接口,抽象类,异常

来源:互联网 发布:md5解密算法java程序 编辑:程序博客网 时间:2024/06/03 05:18

1.抽象类

抽象类:包含一个抽象方法的类称为抽象类

*抽象方法:只声明而未实现的方法称为抽象方法,使用abstrat 关键字声明该方法
abstract class 抽象类名{
属性
方法
访问修饰符 abstract 返回值 方法名(参数列表);
}
*抽象类的使用规则
*1.包含一个抽象方法的类必须是抽象类
*2.抽象类和抽象方法都要使用abstract关键字声明
3.*抽象方法只需要声明而不需要实现
*4.抽象类必须被子类继承,子类(如果不是抽象类)必须重写抽象类中的全部抽象方法

抽象类不能使用final,因为抽象类必须能被继承,而final类是不能被继承的

小结:

*1.抽象类使用的时候一定要有子类,子类仍然使用extends关键字继承一个抽象类,同样会存在单继承关系;一个子类不能同事继承多个抽象类;
*2.抽象类中绝对不能使用final关键字
*3.抽象类中允许有构造方法,但只用于子类构造方法的调用;抽象类不能被实例化


2.接口
*如果一个类中完全是有全局常量(static final声明)

和抽象方法组成,则该类可定义为一个接口
   
interface  接口名{

全局变量

抽象方法
}  
一个接口是不能继承一个抽象类的;但一个接口可以同时继承多个接口
为什么不能继承抽象类呢?
因为抽象类中,可以有非抽象方法,如果接口继承了抽象类,必然要继承抽象类中的方法,但是接口中不能非
抽闲方法

小结
*1、接口是一个特殊的类,只包含全局常量和抽象方法

*接口中的抽象方法可以不加入abstract而抽象类中的抽象方法必须

abstract关键字声明

*2、一个类只能继承一个父类,但是可以实现多个接口

*3、一个接口可以同时继承多个接口,实现接口的多继承

*4、接口不能继承抽象类




4.异常

Exception是程序中可以直接抛出的常见异常,又可分为两类:
RuntimeException 运行时异常:它表示程序运行正常的话就不会发生这种问题,这种异常不用在程序中把他们列出来,运行时有问题,会自动被JVM抛出。比如空指针异常,数组超出异常。
非运行时的异常:例如FileNotFoundException(文件未找到例外)。Java编译器要求在程序中必须处理这种例外,捕获例外或者声明抛弃例外。 

throw 和throws的区别

1throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。

2throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。 


==============================接口,抽象类的面试===================
1.抽象类和接口的区别
   成员变量:   抽象类:可以是变量也可以是常量
  接口  :只能是常量
   声明方式:      抽象类:abstract class
接口  :   interface
   构造方法:   抽象类:有构造方法
接口   :无构造方法
    成员方法:  抽象类:可以是抽象方法,也可以不是抽象方法
      接口   : 只能是抽象方法
    引用类型:  抽象类:需要的子类的对象
接口    :需要的是实现类的对象
   相同点:1.都不能直接实现
  2.都有抽象方法
  3.子类,实现类必须实现抽象方法
2.

Javathrowthrows关键字之间的区别?

答:throws用于在方法签名中声明此方法可能抛出的异常,

    throw关键字则是中断程序的执行并移交异常对象到运行时进行处

3.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


原创粉丝点击