Java之两张图理解static关键词

小结:

static可以用来修饰类中的成员(成员变量成员方法) 也可以用来修饰成员内部类被静态所修饰的成员,随着类的加载而加载,优先于对象存在,会被所有的对象所共享,可以通过类名直接调用,静态方法中,只能调用静态的成员(静态成员变量,静态成员方法)

static关键词

引源:当我们new很多对象时,对象中会有自己特有属性,也可能存在共同属性,为了避免浪费内存空间


特点:当static修饰方法时,该方法属于类,与对象没有关系。被静态修饰的成员,可以被类.名字直接调用

案例:

public class Demo {
	public static int num = 100;
}

public class Test {
	public static void main(String[] args) {
		Demo d1 = new Demo();
		Demo d2 = new Demo();
		d1.num = 200;
		System.out.println(d1.num); 
		System.out.println(d2.num); 
}


console:
200
200

注意事项:

1: 静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。(静态内容先存在去调用后存在的对象内容,显然会报错)

class Demo {
	//成员变量
	public int num = 100;
	//静态方法
	public static void method(){
		//this.num; 不能使用this/super。
		System.out.println(this.num);
	}
}
2: 同一个类中,静态成员只能访问静态成员(权限问题)
class Demo {
	//成员变量
	public int num = 100;
	//静态成员变量
	public static int count = 200;
	//静态方法
	public static void method(){
		//System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
		System.out.println(count);
	}
}

3:定义静态常量,通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接

public class Student {
	public static final String STUDENT_NAME = "mark";
	public static void method(){
		System.out.println("一个静态方法");
	}
}

/*
  *当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。
*/
System.out.println(Student.STUDENT_NAME); //打印学生姓名
Company.method(); // 调用一个静态方法

console:
mark
一个静态方法

结尾静态中不能调用非静态生命周期导致,静态优先于非静态而存在,存在的东西调用不存在的东西显然错误),下图为static在内存中运行过程

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/80291957
今日推荐