本文已参与「新人创作礼」活动,一起开启掘金创作之路。
关键字
final、finally和finalize的区别是什么?
final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可继承。
注意:【static final】修饰变量时,static 保证值只有一份,final保证值不会被修改。
【static final】修饰基本数据类型时,该变量为编译期变量,用类名调用该变量不初始化类。
【static final】修饰引用类型时,该变量非编译期变量,用类名调用该变量,需要初始化类。
static 修饰的变量在加载类的时候,load到方法区。
finally作为异常处理的一部分,只能在try/catch语句后使用,finally的语句块最终一定被执行。
finalize是Object类的一个方法,在垃圾收集器执行时会调用被回收对象的finalize()方法。当垃圾回收器准备好释放对象占用空间时,首先会调用finalize()方法,并在下一次垃圾回收动作发生时真正回收对象占用的内存。
finally代码块是否一定会执行?
当遇到下面情况不会执行。
(1)当程序在进入try语句块之前就出现异常时,不会执行finally块中的代码。
(2)当程序在try块中强制退出时,如使用System.exit(0) ,也不会执行finally块中的代码。
值得注意的是:
当try/catch语句块中有return时,finally语句块中的代码会在return之前执行。
如果try/catch/finally块中都有return语句,try/catch模块中的return语句不会执行。
static的作用是什么?
static的主要作用有两个:
(1)使指定的数据类型分配与对象无关的存储空间。
(2)使方法或属性变为静态的,即在不创建对象的情况下可通过类直接使用方法或属性。
具体而言static又可分为4种使用方式:
(1)修饰成员变量。static修饰的静态变量在内存中只有一个副本。只要静态变量所在的类被加载,就会被分配空间,static 修饰的变量在加载类时,load到方法区。
(2)修饰成员方法。static修饰的方法无需创建对象就可以被调用。static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和静态成员方法。
(3)修饰代码块。JVM在加载类的时候会执行static代码块,且只会执行一次。
(4)修饰内部类。static内部类可以不依赖外部类对象而被实例化,静态内部类在被使用时被初始化。静态内部类只能访问外部类中的静态成员。
面向对象特性
“封装”
把过程和数据包围起来,对数据的访问只能通过已定义的界面;
“继承”
一种联结类的层次模型;
“多态”
允许不同类的对象对同一消息做出响应。
简述java的多态
Java多态可以分为编译时多态和运行时多态。
编译时多态主要指方法重载,指同一个类中有多个同名的方法,在编译期间通过参数列表的不同来区分不同的方法。
运行时多态主要指方法重写,继承父类与实现接口时子类与实现类重写了方法,使用父类引用指向子类对象,在运行期间根据引用变量所指的具体实例对象调用该对象的方法。
运行时多态的实现:主要依靠方法表,方法表中最先存放的是Object类的方法,接下来是该类的父类的方法,最后是该类本身的方法。子类重写的方法会覆盖父类的方法,因此可以实现运行时多态。
Java三大特性(面向对象的特性):封装、继承、多态