JavaSE基础 | 面试必备干货
1.Java特性
Java做为一门“全面”面向对象的编程语言,提供了面向对象的四种基本性质:抽象性、封装性、继承性和多态性。 面向对象主要有四大特性:封装、抽象、继承和多态。
Java支持8种数据类型:
byte—————>Byte
short—————>Short
int——————>Integer
long——————>Long
float——————>Float
double——————>Double
boolean——————>Boolean
char——————>Character
2.Java如何支持正则表达式
Java中的String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。此外,Java中可以用Pattern类表示正则表达式对象,它提供了丰富的API进行各种正则表达式操作。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegExpTest {
public static void main(String[] args) {
String str = "成都市(成华区)(武侯区)(高新区)";
Pattern p = Pattern.compile(".*?(?=\\()");
Matcher m = p.matcher(str);
if(m.find()) {
System.out.println(m.group());
}
}
}
返回结果是:成都市
3.正则表达式及其用途
在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理的时候最为强大的工具,绝大多数语言都提供了对正则表达式的支持。
4.Java和JavaScript
JavaScript 与Java是两个公司开发的不同的两个产品。Java 是原Sun Microsystems公司推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而JavaScript是Netscape公司的产品,为了扩展Netscape浏览器的功能而开发的一种可以嵌入Web页面中运行的基于对象和事件驱动的解释性语言.
一、基于对象和面向对象
Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。
二、解释和编译
Java的源代码在执行之前,必须经过编译。JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。目前浏览器几乎都是用了JIT,即时编译。
三、强类型变量和类型弱变量
Java采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型
四、代码格式不同
5.Java如何跳出循环
考察循环
在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。Java中支持带标签的break和continue语句。应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用。使用需谨慎
6.&和&&的区别
考察运算符
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算
&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。
7.int和Integer有什么区别
考察数据类型
Int是java的原始数据类型,Integer是java为int提供的封装类。
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
8.Array和ArrayList的区别
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
9.值传递和引用传递
考察:Java引用传递
值传递:传递的是该变量的一个副本,改变副本不影响原变量。
引用传递:对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。对引用对象进行操作会同时改变原对象
一般认为,java内的传递都是值传递.
10.Lamda表达式是什么?优缺点。
Lambda表达式是Java SE 8中一个重要的新特性,lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体。
Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化
Lambda表达式的语法
基本语法:
(parameters) -> expression
或
(parameters) ->{ statements;
import java.util.Arrays;
import java.util.List;
public class RegExpTest {
public static void main(String[] args) {
String[] atp = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka",
"David Ferrer","Roger Federer",
"Andy Murray","Tomas Berdych",
"Juan Martin Del Potro"};
List<String> players= Arrays.asList(atp);
for (String player : players) {
System.out.print(player + "; ");
}
players.forEach((player) -> System.out.print(player + "; "));
}
}
优点:1. 简洁。2. 非常容易并行计算。3. 可能代表未来的编程趋势。
缺点:1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)2. 不容易调试。3. 若其他程序员没有学过 lambda 表达式,代码不容易让其他语言的程序员看懂。
11.Map的分类
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
java.util.Map;有四个实现类
HashMap Hashtable LinkedHashMap和TreeMap
HashMap是一个最常用的Map,根据键值可以直接获取它的值只允许一条记录的键为Null;允许多条记录的值为Null;不支持线程的同步。
Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
上一篇: 带妹学Java第十九天(至递归)
下一篇: JAVA 攻城狮 第三十二天