1. static
static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量
- 被static修饰的成员变量,叫做静态变量
特点:
a. 被该类所有对象共享,一次赋值所有对象均有,且所有对象都可以对它进行更改。
b. 属于类,不属于对象
c. 随着类的加载而加载,优于对象存在
调用方式:
a. 类名调用(推荐)
b. 对象名调用
- 被static修饰的成员方法,叫做静态方法
特点:
a. 多用在测试类和工具类中
b. javabean类中很少会用
调用方式:
a. 类名调用
b. 对象名调用
2. static内存图
静态区:
a. 在JDK8以前,它在方法区里,从JDK8开始,它被放到了堆空间里
b. 存放这个类所有的静态变量,不存静态方法(静态方法跟非静态方法都是暂存在方法区/元空间里,等到执行到这个语句了,再加载进栈)
c. 随着该类的字节码文件加载到方法区之后,静态区就出现了,静态变量也随之出现
d. 通过该类的对象实例,可以找到该类对应的静态区
3. javabean类,测试类,工具类
javabean类:
a. 用来描述一类事物的类,比如:Student,Teacher,Dog,Cat等
b. 先私有化成员变量,再创建空参和带全部参数的构造方法,再对每个私有化的成员变量提供get,set方法,最后对额外的行为写对应的成员方法
测试类:
a. 用来检查其他类是否书写正确,带有main方法的类,是程序的主入口。
b. 如,创建javabean类的对象,并进行赋值调用
工具类:
a. 不是用来描述一类事物,而是帮我们做一些事情的类
b. 类名见名知意
c. 私有化构造方法,不让外界创建对象,因为它的对象没有任何意义
d.方法定义为静态,方便调用
4. static的注意事项
- 静态方法只能访问静态变量和静态方法
- 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法(非静态成员变量也叫实例变量)
- 静态方法中是没有this关键字
- 非静态方法的形参中,有一个隐藏的this,类型与方法调用者的类型相同
- 非静态方法中的非重名的成员变量前,也有一个隐藏的this
- 非静态方法中调用该类中的非静态方法(静态方法),非静态方法(静态方法)前也有一个隐藏的this,静态方法(变量)有两种调用方式:类名和对象名
a. this表示当前方法调用者的地址值
b. 这个this是由虚拟机自动赋值的,不能手动赋值
5. 重新认识main()方法
public static void main ( String[ ] args ) {
}
- public:被JVM调用,给到public,其他类也能直接使用这个方法,( main()方法是被虚拟机调用的,访问权限需要足够大)
- static:被JVM调用,不用创建对象,直接类名访问
,因为main方法是静态的,所以测试类中其他方法也需要是静态的。 - void:被JVM调用,不需要给JVM返回值
- main:一个通俗的名称,虽然不是关键字,但是被JVM识别
- String[ ] args:以前用于接收键盘录入数据,现在没用了