static关键字含义与使用

1.static基本内容:

(1)静态的意思。可以修饰成员变量和成员方法。
(2)静态的特点:
	A:随着类的加载而加载
	B:优先与对象存在
	C:被类的所有对象共享
		这其实也是我们判断该不该使用静态的依据。
		举例:饮水机和水杯的问题思考
	D:可以通过类名调用
		既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。
(3)静态的内存图
	静态的内容在方法区的静态区
(4)静态的注意事项;
	A:在静态方法中没有this对象
	   原因:静态是随着类的加载而加载,this是随着对象的创建而存在。
			静态比对象先存在。
	B:静态只能访问静态(代码测试过)
(5)静态变量和成员变量的区别
	A:所属不同
		静态变量:属于类,类变量
		成员变量:属于对象,对象变量,实例变量
	B:内存位置不同
		静态变量:方法区的静态区
		成员变量:堆内存
	C:生命周期不同
		静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
		成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
	D:调用不同
		静态变量:可以通过对象名调用,也可以通过类名调用
		成员变量:只能通过对象名调用

2.代码解读:

/*
	定义一个人类
	
	姓名和年龄都是变化的,这个我能接收,因为每个人的姓名和年龄是不同的。
	但是,我们现在选取的几个人都是中国人,他们的国籍是一样的。
	一样的国籍,我每次创建对象,在堆内存都要开辟这样的空间,
	我就觉得有点浪费了。怎么办呢? 
		针对多个对象有共同的这样的成员变量值的时候,
		Java就提高了一个关键字来修饰:static。
*/
class Person {
	//姓名
	String name;
	//年龄
	int age;
	//国籍
	//String country;
	static String country;
	
	public Person(){}
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public Person(String name,int age,String country) {
		this.name = name;
		this.age = age;
		this.country = country;
	}
	
	public void show() {
		System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
	}
}

class PersonDemo {
	public static void main(String[] args) {
		//创建对象1
		Person p1 = new Person("邓丽君",16,"中国");
		p1.show();
		
		//创建对象2
		//Person p2 = new Person("杨幂",22,"中国");
		//p2.show();
		Person p2 = new Person("杨幂",22);
		p2.show();
		
		//创建对象3
		//Person p3 = new Person("凤姐",20,"中国");
		//p3.show();
		Person p3 = new Person("凤姐",20);
		p3.show();
		
		p3.country = "美国";
		p3.show();
		
		p1.show();
		p2.show();
	}
}

运行结果:

  • String country;定义为非静态的
    这里写图片描述
  • static String country;定义为静态的
    这里写图片描述

3内存图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bUhxve1-1597116188716)(https://img-blog.csdn.net/20171216171930880?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXlfQ09ERWFydA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

猜你喜欢

转载自blog.csdn.net/My_CODEart/article/details/78820938
今日推荐