一 , static属性
1)static修饰的资源属于类级别,是全体对象实例共享的资源
2) 静态属性
n 使用static修饰的属性,属于类的全体类的实例共享的变量
n 静态属性是在类的加载期间初始化的
n 使用类名.属性访问,如:System.out
3) 实例变量
n 属于对象的属性
n 使用对象.属性访问,如:person.name
举例如下图所示:
程序执行过程内存图如下所示:
第1步:加载类
第2步:在内存堆中分配对象空间。属性默认自劢初始化,为“0”值
第3步: 进行属性的赋值
第4步: 递归调用父类构造器。(默认调用父类无参数构造器!)
第5步: 调用本类构造器
第6步
中间步骤省略,输出结果时,内存结构图如下所示:
二,static 方法
使用static声明的方法,属于类的方法,一般用来表示工具方法。 在类加载以后就可以自己调用, 丌需要创建任何类的实例对象。 案例如下图所示,这些方法都是属于类的方法(静态方法):
三,静态代码块
静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次! 静态代码块用途不是很常见,一般用来在类加载以后初始化一些静态资源时候使用。 如:加载配置文件
final关键字
1) final修饰的类,不能再被继承
n Java 的String就是final类,不能被继承!
n Math 是final类,不能被继承!
n Integer、Long、Character等包装类是final类,不能被继承!
n 在实际项目开发中,原则上不允许使用final类!
Spring, Hibernate,Struts 2, 这些框架使用了"动态继承代理"技术,使用final的类会影响"动态代理技术" 的实现.
2) final修饰的方法,不能再被覆盖
n 在实际项目开发中,原则上不允许使用final方法! 原因也是因为: 动态代理技术
3) final 修饰的变量,初始化以后不允许再修改了
n final 局部变量
n final 方法参数
n final 的成员变量
4) final static -- Java使用final static修饰的变量作为常量
n 一般要求常量名都有大写字母
n Java常量不是const。
final 修饰的类,不能再被继承
不能覆盖final方法
final修饰属性表示“不能改”,static修饰属性表示属于类的“仅此一份”,注意区分
ü 知识点:
n final的局部变量,只能初始化不能改
n final的方法参数,不能改
n final的引用,引用指向不能改,但是对象的属性可以改