Java面试相关
Java基础
接口的特性
- 接口中不能有实例域与静态方法,但可以有静态常量;
- 接口中不存在已实现的方法;
- 接口中方法是public的抽象方法;
- 实现接口的非抽象类必须实现接口中的所有方法;
- 每个类只可以有一个超类但是能实现多个接口;
- 不能用new去实例化一个接口,因为其内部还没有实现方法,但可以声明接口的变量去引用接口的实现类对象;
- 从jdk1.8开始接口允许用default关键字去定义默认的方法实现,静态与非静态皆可;
接口与抽象类的区别
- 抽象类只可单继承,接口可以多实现;
- 抽象类中可以有普通属性和常量,接口中只能有常量;
- 接口不含有构造函数,抽象类含构造函数,但该构造函数是给实现类做初始化操作的;
- jdk1.8之前,接口只含抽象方法,不含方法的实现,抽象类可以含有方法的实现;
重写与重载的区别
重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数和参数类型,但子类可改变了该父类父类的方法的内部实现,同时也可以通过super关键字访问父类中该方法的实现,其作用在于子类可以根据需求实现父类的方法;
重载是指方法名相同,但输入参数不同的方法,虚拟机会根据不同的参数列表去选择合适的方法执行,返回类型可以不同,但参数列表一定要不同,因虚拟机无法通过返回类型去判断该执行哪一个方法;
内部类与静态内部类的区别
- 创建方式不同;静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使用。内部类创建对象的时候,不能独立于外部类,必须要先创建外部类的对象,然后再用这个对象来new出内部类的对象。
- 可声明的属性与方法不同;静态内部类可声明静态或非静态的属性与方法,内部类只能声明非静态的属性与方法;因为静态内部类在类加载阶段就已经存在内存中了,而内部类是不随外部类一起加载的,它得在外部类实例化后才会加载,自然不能拥有应在类加载阶段就分配好内存的静态属性与方法;
- 可引用外部类的属性不同;静态内部类只可以引用外部类的静态属性及方法,内部类可以引用外部类的静态与非静态属性及方法;
final关键字
final即表示不可更改,衡量的含义,其可用于修饰变量、方法与类;
- 修饰变量则表示该变量必须要初始化,且赋初始值后不可再赋值;
- 修饰方法表示该方法不可被重写;
- 修饰类表示该类不可被继承,则其内部方法其实都默认为final,因为没有子类则不可能被重写;
Java是值引用还是对象引用
值传递,一个实例方法被传递到方法中,参数的值实际是传递对象的引用的一个副本,与方法的输入参数指向同一个对象,但指向的对象可以在方法内改变,例如输入一个String str,在方法内改变指向str = 另一个字符串,方法外的输入参数str依然指向他原本的字符串,方法内则是将原str的引用改为新str的引用;