1. Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。
Java将可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException),运行时异常(RuntimeException),错误(Error)。
运行时异常:RuntimeException及其子类都被称为运行时异常。
特点:Java编译器不会检查它
主要有:
NullPointerException(空指针异常)
IndexOutOfBoundsException(数组越界异常)
ClassCastException(类型转换异常)
ArrayStoreException(数据存储异常,操作数组时,类型不一致)
被检查异常:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。
特点 : Java编译器会检查它
主要有:
IOException(输入输出异常)
FillNotFoundException(文件没有被找到异常)
SQLException(SQL异常)
Error:Error类及其子类
特点 : 和运行时异常一样,编译器也不会对错误进行检查。
主要有:OutOfMemoryError(内存溢出)、ThreadDeath
参考:https://blog.csdn.net/qiuchaoxi/article/details/79788993
2.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
3.说说&和&&的区别。
答:
&&:
if(str != null && !"".equals(str))
当: str != null 的时候,接下来才会去执行: !"".equals(str)
如果: str != null为false,那么这个时候,程序是处于短路的情况,则,!"".equals(str) 是不会执行的。
&:
if(str != null & !"".equals(str))
不管: str != null 的结果如何(即true,false),程序都会执行: !"".equal(str)
注意: &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
4.在JAVA中如何跳出当前的多重嵌套循环?
答:
**方法1:**在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号break语句,即可跳出外层循环。例如:
ok:
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
System.out.println(“i=” + i + “,j=” + j);
if(j == 5) break ok;
}
}
**方法2:**通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++) {
for(int j=0;j<arr[i].length;j++){
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5) {
found = true;
break;
}
}
}
参考:https://blog.csdn.net/amen_wu/article/details/53913319
5. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
答:在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体)。
整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它不能作用于swtich语句中。String在jdk1.7以后可以使用。
6.char型变量中能不能存贮一个中文汉字?为什么?
答:char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
7.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答:使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
8.静态变量和实例变量的区别?
答:
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
例如:public class StaticTest {
private static int staticInt = 2;//静态变量
private int random = 2;//实例变量
}
9. 是否可以从一个static方法内部发出对非static方法的调用?
答:
**不可以。**因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。
也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
10. 内部类可以引用它的包含类的成员吗?有没有什么限制?
答:
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员。