Java--static关键字

含泪咬牙学习的第七天
今天总结static关键字,个人认为还是比较重要

static关键字

用于修饰成员(成员变量和成员函数)

特点
  • 随着类的加载而加载
  • 优先于对象存在
  • 被所有对象所共享
  • 可以直接被类名调用
注意
  • 静态方法只能访问静态成员
  • 静态方法中不可以写this / super 关键字
  • 主函数是静态的
  • 非静态成员既可以访问非静态成员也可以访问静态成员(例:就像下列代码中show()方法就不能被static所修饰,因为输出语句中的name和age包含this关键字)

内存运行图
在这里插入图片描述
图解:

  1. 在main函数进栈前代码区和静态代码区就已经存在
  2. 然后main函数进栈,实例化对象s1
  3. s1指向堆里的一部分空间,存放了类中的name和age,并且可以指向静态代码区
  4. s1.show()方法进栈执行,
  5. 执行完毕弹栈
  6. 实例化对象s2
  7. 与s1相同,s2指向堆里另一部分空间,并且,s2可以指向同一静态代码区
  8. s2.show()方法进栈执行,
  9. 执行完毕弹栈
  10. 10.main函数执行完毕弹栈

静态方法的调用还可以直接类名加属性名,不用再通过对象

class Student{ 
    static string school="CSDN";       //被static所修饰   静态变量 
	int age;
	string name;                      //成员变量
	Student(string name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public void show(){
		System.out.println(name+",来自"+school+","+age+"岁");
	}

}

public class DemoStudent{
	public static void main(String[] args)
	{
		Student s1=new Student("zs",20);
		s1.show();
		Student s2=new Student("ls",21);
		s2.show();
		System.out.println(s1.shool);             //对象 访问方式
		System.out.println(Student.shool);        //类名 访问方式
	}
}
成员变量与静态变量的区别

1.存储位置不同

  • 成员变量 在堆内存中存储(对象有特有的数据)
  • 静态变量 在静态静态代码区存储(所有对象共享数据)

2.调用方式不同

  • 成员变量 通过对象来调用
  • 静态变量 可以通过对象,也可以通过类名来调用

3.生命周期不同

  • 成员变量 随对象的产生而产生,随对象消失而消失
  • 静态变量 随类的产生而产生,随类的消失而消失

4.别名不同

  • 成员变量 --实例变量
  • 静态变量 --类变量
发布了23 篇原创文章 · 获赞 33 · 访问量 1135

猜你喜欢

转载自blog.csdn.net/qq_42577542/article/details/104258777