首先知道Static是一种修饰符,被Static修饰的变量和方法分别叫做静态成员和静态方法。
一旦使用了static关键字,那么这样的内容不再属于对象,而是属于整个类,凡是类的对象都包含这个共同的特性。
举个例子说,定义一个学生类,这些学生属于一个班级,每一个学生对象包含 姓名、学号、年龄、班级、那么多个学生就要写多个这些成员,这样就比较浪费内存,如果把他们共有的,也就是班级变量 用static关键字修饰,那么所有的对象就共有一个班级信息。
Static对于成员变量和成员方法的不同用途
成员变量
如果一个变量用static修饰那么此变量就是共有的,多个对象共用一份数据
成员方法
1.static修饰的属于静态方法,静态方法不属于对象,属于类
2.如果没有static关键字,那么需要先创建对象,通过对象的属性使用
3.使用静态方法正确方式:【 类名称.静态方法名】在同一个类下可以省略类名称
注意事项
静态不能够直接访问非静态
原因:在内存中,先有的是静态内容,后有的非静态内容,按照先后顺序非静态后生成,所以不能进行访问
public class MyMethod {
int num;
static int aaa;
public void method(){
System.out.println("普通成员方法");
//非静态可以访问非静态
System.out.println(num);
//非静态可以访问静态
System.out.println(aaa);
}
public static void staticMethod() {
System.out.println("静态方法");
//静态可以访问静态
System.out.println(aaa);
//静态不可以访问非静态
//System.out.println(num); 这样写是不对的所以注释掉了
}
}
静态方法中不能有this
原因:this代表当前对象,通过谁调用,谁就是当前对象(this),而静态方法和对象没有关系,不需要通过对象来调用,也就不存在this方法
static方法内存图
静态代码块
- 静态代码块格式:
- public stasic 类名称{
- static{
-
//静态代码块内容
- }
- }
- 特点:当第一次用到本类时,代码块执行唯一的一次
- 静态代码块的典型用途
- 用来一次性的对静态代码块的执行
另外 由于static修饰的内容属于类,不属于对象,所以在调用的时候推荐采用类名称.静态方法名的方式 ,虽然用new出来的对象也可以调用,但是会在编译之后被javac翻译为“类名称.静态方法名”的形式,为了避免不必要的错误,建议不要使用这种方式调用静态方法。