static
所有static关键字修饰的都是类相关的,类级别的,都是采用”类名."的方式访问。
一、静态变量和实例变量
变量根据声明的位置进行划分:
- 在方法体当中声明的变量叫做局部变量。
- 在方法体外声名的叫做:成员变量。
成员变量又可以分为:
- 实例变量
- 静态变量。
变量在内存上的存储:
栈 | 堆 | 方法区 |
---|---|---|
局部变量 | 实例变量 | 静态变量 |
静态变量在类加载时初始化,不需要new对象,静态变量的空间就开出来了。静态变量使用类名.的方式访问。
实例变量必须先new对象,通过“引用.”访问。
二、静态方法和实例方法
静态方法:不需要new对象,直接使用“类名.”来访问。但是也可以使用“引用.”来访问,不建议用。(因为其他程序员会困惑。)
实例方法:需要new对象,使用“引用.”来访问。
以后开发中,大部分情况下,如果是工具类的话,工具当中的方法一般都是静态的。(因为静态方法不需要new对象,直接使用“类名.”来访问,很方便。)
三、内部类
1、在使用内部类前我们先想想为什么需要内部类?java内部类有什么好处?
首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。
不过你可能要质疑,更改一下方法的不就行了吗?
的确,以此作为设计内部类的理由,实在没有说服力。真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题 没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。
2、内部类
内部类有三种:
- 静态内部类
- 实例内部类
- 局部内部类,匿名内部类是局部内部类的一种。不建议使用匿名内部类,因为一个类没有名字,没有办法重复,另外代码太乱,可读性太差。
使用内部类编写的代码,可读性很差,能不用尽量不用。
四、类的初始化顺序
初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。
实例语句块在什么时候执行?
只要是构造方法执行,必然在构造方法执行之前,自动执行“实力语句块”中的代码。
实际上这也是sun公司为Java程序员准备一个特殊的时机,叫做对象构建时机。