内部类
内部类拥有独立的.class文件。
String
String s = new String("hello");
如上语句创建了几个对象?
两个
第一个:hello //只要是字面量,Java都会创建一个String对象并将其存储到常量池中
第二个:new String() //new String()时会再创建一个String对象"hello"
s:指向new出来的String()对象
StringBuilder和StringBuffer区别
StringBuffer类从jdk1.0出现,属于线程安全类,同步处理的,因此效率较低
StringBuilder类从jdk1.5出现,属于非线程安全类,并发处理的,因此效率较高
Java是值传递还是引用传递
Java中无论是基本数据类型还是引用数据类型,都是值传递的
对于基本数据类型而言,传递的是具体的值的副本
对于引用数据类型而言,传递的是具体的地址值的副本
==和equals()的区别
==可以用于比较基本数据类型和引用数据类型。
比较基本数据类型时比较具体值是否相同。
比较引用数据类型是比较具体存储地址。
equals()只能用于比较引用数据类型。
在Object类中定义,默认比较==(即比较地址),一般没有参考意义,常常被重写用来比较具体的属性值是否相同。
String类重写了equals()来比较字符串内容是否相同。
进制
int a = 068;正确吗?
编译错误。0开头代表8进制最大为7,0b开头2进制,0x开头16进制
Finally
简述final,finally,finalize是什么?
final表示最终的、不能改变的。修饰变量表示,该变量的值不能被改变。修饰方法表示,该方法不能被重写。修饰类表示不能被继承。
finally是异常处理机制的最后一块,它只能跟在try后活着最后一个catch后,finally可以保证只要程序执行到try语句块,无论try代码是否出现异常,finally都必定执行。通常我们使用finally去完成资源释放这类操作,比如IO中的关闭流操作。
finalizes是一个方法,定义在Object中,该方法为一个对象生命周期中的最后一个方法,会被GC调用,当一个对象即将被GC回收前会调用该方法。
输出结果是什么
public class FinallyDemo3 {
public static void main(String[] args) {
System.out.println(
test("0")+","+test(null)+","+test("")
);
}
public static int test(String str){
try {
return str.charAt(0)-'0';
} catch (NullPointerException e) {
return 1;
} catch (Exception e){
return 2;
} finally {
return 3;
}
}
}
最后输出结果为3,3,3
finally块中的return语句会覆盖try catch中的return返回
如果try中有return语句,finally中也有return语句,最终执行的是finally中的return语句