疯狂java学习笔记(二)

疯狂java学习笔记(二)

本系列是基础知识巩固,主要参考李刚老师的疯狂java 突破程序员基本功的16课这本书籍的学习笔记总结。

一、类变量的研究

1.程序第一次用到该类时,对该类进行初始化。
2.类加载器加载该类对象,为所有的静态成员变量分配内存空间,此时该类的所有成员变量均为null(基本数据类型则为对应的默认值)。
3.按照从上向下的顺序执行静态变量的赋值/静态代码块。
4.当创建该类的实例对象时,java程序会依次调用其父类的非静态代码库,父类的构造器,子类的非静态代码块,子类的构造器。
5.若非静态成员变量在定义时赋值 (如 private int a=2;) 和执行非静态代码块同级别情况下赋值,与类加载初始化顺序类似 在上面的先执行。
6.如果存在继承关系 在创建子类对象时同时会创建父类对象与其绑定,所以在程序设计时尽量避免无意义的多层级继承关系

二、final修饰符

1.以final修饰符修饰的静态变量如果是常量则会在编译时执行宏替换,直接替换成对应的常量值。
2.以final修饰的变量无法重新赋值,以final修饰的方法无法被重写,以final修饰的类无法被继承。
3.以final修饰的变量赋值时机有三个,直接在定义变量时 在代码块中,在构造器中。
4.对于非静态final而言 只有在直接定义变量时代码执行才会进行宏替换。
5.在方法中定义匿名类(内部类)中使用类外变量时,必须是以final修饰的变量,理由是内部类可能产生隐式的闭包 正常变量会在方法销毁时被销毁 而内部类的存在可能会引起变量脱离方法继续存在的现象 如在内部类中开个子线程 如果不用final修饰会导致在方法完成之后如果对变量进行变更则会引起内部类子线程中的变量动态变更 会引起极大的混乱 所以必须要求时final修饰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值