1、final关键字用法(作用)
1)修饰类:表示该类不能被继承。
2)修饰方法:表示该方法不能被重写。
3)修饰变量:表示此变量是常量,只能赋值一次且不能被修改。
2、final、finally、finalize的区别
final:如第一题所示,这里不再重复叙述。
finally:它是try-catch-finally最后的代码块,最终都会执行,finally可以省略,如果存在则一定会执行里面的代码(发生Error错误等非程序性异常除外)。
finalize:它是Object类的一个方法,在垃圾回收器(GC)执行的时候会自动调用被回收对象的此方法,一般不建议主动使用。
3、Java继承机制
1)Java类与类直接只支持单继承,如下是JDK源码部分截图:
2)Java接口与接口之间支持多继承,如下图:
4、重写和重载
重写:重写是父类与子类之间多态的一种表现,即子类可以覆盖从父类继承的方法,重写的方法一般使用@Override标识,如下图:
重载:重载是一个类中方法多态的一种表现,即一个类中可以有多个同名的方法,方法的参数类型不同或参数个数不同,返回类型可以相同也可以不同,如下图:
5、Java异常
Throwable
Throwable是Java异常的父(祖先)类,所有的异常都继承这个类,Error类和Exception类是Throwable类的两个子类。
Error
Error类是非程序异常,即程序不能捕获和无法提前预知的异常,一般是程序编译或者系统性的错误,如OutOfMemorry内存溢出异常等。
Exception
Exception异常分为两种:
1)运行时异常:Java编译器不会检查,当程序中可能出现这类异常时,即使没有用try-catch语句捕获,Java也会编译通过,常见的如NullPointerException、lndexOutOfBoundsException。
2)非运行时异常:程序必须进行处理、捕获或者抛出,不处理则编译不通过,常见的如IOException、ClassNotFoundException。
下图为常见异常结构图:
6、throw和throws的区别
throw:用于在方法中主动抛出一个异常,如下图:
throws:用于方法声明中可能会抛出的异常,如下图:
7、Java包装类型
包装类型:包装类型是Java为了解决基本数据类型无法面向对象编程而设计。
如下图展示了Java8种基本数据类型和与之对应的包装类型:
8、int和Integer的区别
主要有以下4种区别
1)int是一种基本数据类型,Integer是int的包装类型。
2)int的默认值是0,Integer属于Java类,默认值是null。
3)int可以直接使用,而Integer需要经过实例化才能使用。
4)Integer的使用范围更广,比如可以用于泛型。
9、自动装箱和自动拆箱
描述:Java 5开始增加了自动装箱和自动拆箱机制,用于提供基本数据类型和包装类型的相互转换的操作。
自动装箱:用于自动将基本数据类型转成对应的包装类型,原理是调用包装类的valueOf()方法。
自动拆箱:用于自动将包装类型转成对应的基本数据类型,原理是调用包装类的xxValue()方法,如iInteger的intValue()方法。
10、理解Java的多态
多态,即“多种状态"的意思,在Java中有以下二种情形:
一、方法多态
1)方法重写:是父类与子类之间多态性的一种表现,即子类可以覆盖从父类继承的方法。
2)方法重载:是一个类中方法多态的一种表现,即一个类中可以有多个同名的方法,方法的参数类型不同或参数个数不同,返回类型可以相同也可以不同。
二、对象多态
1)接口和实现类:接口可以有多种不同的实现形式。
2)抽象类和实现类:抽象类和实现类可以有多种不同的形式。
第二篇基础面试题到此结束。