10、Try...catch...finally与直接throw的区别
原题:
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
我的错误想法:
我本来以为执行throw new RuntimeException();
程序就会停止,谁知道finally语句执行地非常坚定,无论如何都要执行!
答案解析:
还是需要理解Try...catch...finally与直接throw的区别:try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了;
11、Java程序初始化顺序:
-
父类的静态代码块;
-
子类的静态代码块;
-
父类的普通代码块;
-
父类的构造方法;
-
子类的普通代码块;
-
子类的构造方法;
12、类实现多个接口的时候,只需要一个implements,多个接口通过逗号进行隔开,先继承类再实现接口;
class A implements B,C
13、线程执行逻辑
14、自动装箱
double d = 5.3e12; 相当于 5.3*10的12次方,科学计数法
double d = 3; 对 (自动转换类型)
Double d = 3; 错 (自动装箱的目标必须严格对应它拆箱后的类型)
Double d = 3.0;对 (自动装箱)
15、线程安全的Map类有hashtable concurrentHashMap synchronizedMap
16、为什么一个负责任的Java程序员想使用嵌套类?
为了让非常专门的类的代码与和它一起工作的类联系起来;
为了支持产生特定事件的新的用户界面;
17、静态变量会默认赋初值,局部变量和final声明的变量必须手动赋初值
18、成员变量和局部变量的区别
1、成员变量是独立于方法外的变量,局部变量是类的方法中的变量;
1)、成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用; 2)、局部变量:包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。 2、成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型; 3、成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许,还可以在类的外部使用成员变量; 4、局部变量的生存周期与方法的执行期相同。当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。类的成员变量,如果是实例成员变量,它和对象的生存期相同。而静态成员变量的生存期是整个程序运行期; 5、成员变量在累加载或实例被创建时,系统自动分配内存空间,并在分配空间后自动为成员变量指定初始化值,初始化值为默认值,基本类型的默认值为0,复合类型的默认值为null。(被final修饰且没有static的必须显式赋值),局部变量在定义后必须经过显式初始化后才能使用,系统不会为局部变量执行初始化;
6、局部变量可以和成员变量 同名,且在使用时,局部变量具有更高的优先级,直接使用同名访问,访问的是局部变量,如需要访问成员变量可以用this.变量名访问;
19、x+y+""
System.out.println(x+y +""+(x+y)+y);
结果为:25255
-
不论有什么运算,小括号的优先级都是最高的,先计算小括号中的运算,得到x+y +""+25+y;
-
任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加,得到25+“”+25+5;
-
上面的结果按字符串相加得到25255;
20、java集合框架图
21、一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件
22、一个.java文件中定义多个类
注意一下几点:
(1) public权限类只能有一个(也可以一个都没有,但最多只有一个);
(2)这个.java文件名只能是public 权限的类的类名;
(3)倘若这个文件中没有public 类,则它的.java文件的名字是随便的一个类名;
(4)当用javac命令生成编译这个.java 文件的时候,则会针对每一个类生成一个.class文件;
23、File类不能读写文件
File类不能读写文件,能够读写文件的是数据流(OutputStream和InputStream);
24、Java的Daemon线程,setDaemon( )设置必须要在start之前;
25、protected 修饰的成员变量,可以被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问;