1.抽象类
抽象类:包含一个抽象方法的类称为抽象类
抽象类不能使用final,因为抽象类必须能被继承,而final类是不能被继承的
小结:
4.异常
1、throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。
在
Java
中
throw
与
throws
关键字之间的区别?
答:
throws
用于在方法签名中声明此方法可能抛出的异常,
throw
关键字则是中断程
序的执行并移交异常对象到运行时进行处理
.catch
子句能为空吗?
答:可以有空的
catch
子句,但那是最糟糕的编程,因为那样的话,异常即使被捕获,
我们也得不到任何的有用信息,对于调试来说会是个噩梦,因此,编程时永远不要有空
的
catch
子句。
Catch
子句中至少要包含一个日志语句输出到控制台或保存到日志文件
中
4. final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内
部类要访问局部变量,局部变量必须定义成final类型
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,
可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法
总被调用
5.error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可
能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发
生的情况。
6.
请写出你最常见到的5个runtime exception。
NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException,ClassNotFound,Out of memory Exception
7.
运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,
运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
Java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明
抛出未被捕获的运行时异常。
8.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的
接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例。
当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象
的方法可以捕获到这个异常并进行处理。Java 的异常处理是通过 5 个关键词来实现
的:try、catch、throw、throws 和 finally。一
般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这
时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
try 用来指定一块预防所有“异常”的程序;
catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
throw 语句用来明确地抛出一个“异常”;
throws 用来标明一个成员函数可能抛出的各种“异常”;
Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
9.
Try-catch-finally的执行过程
try{}语句块中放的是要检测的java代码,可能有会抛出异常,也可能会正常执行
catch(异常类型){}块是当java运行时系统接收到try块中所抛出异常对象时,会寻找 处理这一异常catch块来进行处理(可以有多个catch块)
finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了 System.exit(0)
10.
什么是反射?什么是泛型?
反射:是指主要指程序可以访问、检测和修改它本身状态或行为的一种能力
泛型:泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
11.java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗?
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}
public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
*/
} finally {
a = 40;
}
// return a;
}
}
结果为:30
12. * java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗?
*/
public class FinallyDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}
public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
*/
} finally {
a = 40;
return a; //如果这样,就又重新形成了一条返回路径,由于只能通过1个return返回,所以这里直接返回40
}
// return a;
}
}
结果为:40
13.java对try——catch——finally的执行机制是这样的:在虚拟机不退出,即程序不终止的情况下,finally方法总会得到执行,即便catch块里有return语句也会执行完finally再返回。
至于为什么输出i的值为1,那是因为,在高级语言中(java也不例外),调用一个方法,若其有返回值,总是会返回return后面变量或语句的值,new TestTryCatch().test(),即输出test()方法的return i,执行到这时,i值为“1”,这时java机制会把i存储在某一内存空间,只是由于还有finally还没执行,故暂不返回,等finally执行完毕,就返回刚才已经储存的i值。
14.面试题:
* 在面试时,如果有不知道的可以向面试官虚心请教
* 1:final、finally和finalize的区别
* final:最终的意思,可以修饰类,修饰成员变量,修饰成员方法
* 修饰类,类不能被继承
* 修饰变量,变量是常量
* 修饰方法,方法不能被重写
* finally:是异常处理的一部分,用于释放资源。
* 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了
* finalize:是Object类的一个方法,用于垃圾回收
* 2:如果catch里面有return语句,请问finally里面的代码还会执行吗?
* 如果会,请问题在return前还是在return后。
* 会。前
*
* 准确的说,应该是在中间。结果为:40