static、final、finally,finaize,abstract修饰符

static

  • 修饰变量(静态变量):类变量,是该类的所有实例对象所共享的,在内存中只有一份
  • 修饰方法(静态方法):在类加载的时候就存在了,不依赖于实例,静态方法不能是抽象的,静态方法中不能有this,super等,因为this和super依赖于实例对象,而静态方法不和任何实例绑定。
  • 静态语句块:在类加载的初始化时候执行一次
  • 静态内部类:非静态内部类依赖于外部类的实例,而静态内部类不需要。静态内部类和一个外部类没区别静态内部类不能访问外部类的非静态的变量和方法。

初始化顺序

  • 父类(静态变量、静态语句块)
  • 子类(静态变量、静态语句块)
  • 父类(实例变量、普通语句块)
  • 父类(构造函数)
  • 子类(实例变量、普通语句块)
  • 子类(构造函数)

final、finally、finalize区别

final

final可以用于成员变量(包括方法参数),方法、类。
1.final修饰类,表示该类不可被继承
2.final修饰变量,表示该变量不可以被修改,只允许赋值一次,如果修饰引用类型,final使引用不变,也就是不能引用其他对象,但是被引用的对象本身是可以修改的。
3.final修饰方法,表示该方法不可以被重写,private方法隐式的被指定为final,如果在子类中定义的方法和父类的一个pirvate方法签名相同,此时子类的方法不是重写父类方法,而是在子类中定义了一个新的方法

final变量抑制指令重排序:
在java语言中,用final修饰的字段被赋予了一些特殊的语义,它可以阻止某些重排序,具体的规则就这两条:

  1. 在构造方法内对一个final字段的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
  2. 初次读一个包含final字段对象的引用,与随后初次读这个final字段,这两个操作不能重排序。

finally

try catch finally

当try语句退出时肯定会执行finally语句。这确保了即使发了一个意想不到的异常也会执行finally语句块。但是finally的用处不仅是用来处理异常——它可以让程序员不会因为return、continue、或者break语句而忽略了清理代码。把清理代码放在finally语句块里是一个很好的做法,即便可能不会有异常发生也要这样做。无论try里执行了return语句、break语句、还是continue语句,finally语句块还会继续执行。注意,当try或者catch的代码在运行的时候,JVM退出了。那么finally语句块就不会执行。同样,如果线程在运行try或者catch的代码时被中断了或者被杀死了(killed),那么finally语句可能也不会执行了,即使整个运用还会继续执行。
finally是异常处理关键字,finally中的主体总会执行,不管异常发生是否。
在这里插入图片描述

finalize:

该方法用于告诉垃圾回收器应该执行的操作,从object类继承而来。在从堆中永久删除对象之前,垃圾回收器调用对该对象的Finalize方法。注意,无法确切保证垃圾回收器何时调用该方法,也无法保证调用不同对象的方法的顺序。 即使一个对象包含另一个的对象的引用,或者在释放一个对象很久以前就释放了另一个对象,也可能会以任意的顺序调用这两个对象的finalize方法,如果比如保证采用特定的顺序,则必须提供自己特有的清理方法

Finalze已经不推荐使用,在JDK9中已经标记为过时

3、abstract
abstract 关键字可以修饰类或方法。
abstract 类可以扩展(增加子类),但不能直接实例化。
abstract 方法不在声明它的类中实现,但必须在某个子类中重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值