Android面试复习-Java基础
关键字final和static
final
final变量即为常量,只能赋值一次
final方法不能被子类重写
final类不能被继承
static
static变量:对于静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,也可以用对象来访问
static代码块:static代码块是类加载时,初始化自动执行的
static方法:可以直接通过类名调用,任何的实例都可以调用,因此static方法中不能用this,super关键字。不能直接访问不带static的成员变量和成员方法,只能访问所属类的静态成员变量和成员方法。
final,finally,finalize的区别
final
变量,类,方法的修饰符,被final修饰的类不能被继承,变量或方法被final被final修饰则不能被修改和重写
finally
异常处理时提供finally 块来执行清除操作,不管有没有异常抛出,此处代码块都会被执行。如果try语句块中包含return语句,finally语句块是在return之后执行
finalize
Object类中定义的方法,若子类覆盖了finalize方法,在垃圾收集器将对象从内存中清除前,会执行该方法,确定对象是否会被回收。
抽象类与接口的联系与区别
抽象方法
只有声明,没有具体实现,用关键字abstract修饰。抽象方法必须为public或protected
抽象类
在类前面必须用abstract关键字修饰,一般至少包含一个抽象方法。抽象类也可以有成员变量和普通方法。若一个类继承一个抽象类,则必须实现父类中的所有抽象方法,若子类没有实现父类的抽象方法,则也应该定义为抽象类
接口
用关键字interface修饰,接口中的变量隐式指定为Public static final变量。方法会被隐式的指定为public abstract,接口中的所有方法均不能有具体的实现,接口中的方法都必须为抽象方法。若一个非抽象类实现某个接口,必须实现该接口中所有的方法
区别
1. 抽象类可以提供成员方法实现的细节,而接口只能存在抽象方法
2. 抽象类的成员变量可以是各种类型,而接口中成员变量只能是public static final类型
3. 接口中不能含有静态代码块,而抽象类可以有静态方法和静态代码块
4. 一个类只能继承一个抽象类,用extends来继承,却可以实现多个接口,用implements来实现接口。
接口的意义
1. 有利于代码的规范
2. 有利于代码维护和扩展
3. 解耦作用,全局变量的定义,当发生需求变化是,只需改变接口中的值即可
4. 直接看接口就可以清楚具体实现类间的关系
父类的静态方法和属性不能被子类重写,但子类可以继承父类静态方法和属性
重载和重写的区别
重载:一个类可以有多个相同方法名的,但参数类型和个数都不一样
重写:子类继承父类,子类可以通过实现父类中的方法,从而新的方法把父类旧的方法覆盖