黑马程序员---java中的final static 关键字

来源:互联网 发布:同花顺mac版视频教程 编辑:程序博客网 时间:2024/05/22 13:39
-------android培训、java培训、期待与您交流!-------


一 , 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的引用,引用指向不能改,但是对象的属性可以改