定义static属性

在所有定义的方法上以及属性上实际上都可以使用static关键字进行定义。

1.static属性

在讲解具体的static操作之前首先来看这样的一个程序

范例:定义一个表示人的类,同时设置他所在的国家 

class Person{
	private String name;
	private int age;
	String country="中国";//为了后面的操作方便,暂时不封装
public Person(String name,int age) {
	this.name=name;
	this.age=age;	
}
public String getInfo() {
	return "姓名:"+name+",年龄:"+age+",国家:"+country;
}
}

public class TestDemo{
	public static void main(String args[]){
		Person pe1=new Person("张三",10);
		 Person pe2=new Person("李四",20);
		Person pe3=new Person("王五",30);
                 pe1.country="大天朝";
		System.out.println(pe1.getInfo());
		System.out.println(pe2.getInfo());
		System.out.println(pe3.getInfo());
		
	}
}//姓名:张三,年龄:10,国家:大天朝
姓名:李四,年龄:20,国家:中国
姓名:王五,年龄:30,国家:中国

那么现在就可以发现传统属性所具备的特征就是保存在堆内存之中,并且每一个对象独享此属性。 

可是同样的概念,现在明显不适合与当前的环境,所以最好的做法是将country属性变为一个共享属性,那么只要一次修改就可以影响到所有的对象。那么如果要描述这样的共享属性,则只需要在属性前追加一个static关键字即可

class Person{
	private String name;
	private int age;
	static String country="中国";//为了后面的操作方便,暂时不封装
public Person(String name,int age) {
	this.name=name;
	this.age=age;	
}
public String getInfo() {
	return "姓名:"+name+",年龄:"+age+",国家:"+country;
}
}//输出语句略

结果:

姓名:张三,年龄:10,国家:大天朝

姓名:李四,年龄:20,国家:大天朝

姓名:王五,年龄:30,国家:大天朝


当程序中使用了static关键字进行定义之后,那么此属性将不保存在堆内存之中,会保存在一个全局数据区的内存空间之中。并且所有的对象都可以进行该数据区的访问。


但是现在使用的是共享属性,这个时候的代码就会出现一个问题,共享属性能通过一个对象修改吗?

对于static实际上也会将其称为类属性,而所有的类属性都可以利用类名称直接调用。


结果是一样的。


结论:访问static属性都使用类名称

所有的非static的属性必须产生实例化对象之后才可以使用,而所有static的属性不受实例化对象的限制,也就是说是否有对象与static属性操作无关。

例如:       

public static void main(String args[]){
	    System.out.println(Person.country);
		Person.country="大天朝";
	    System.out.println(Person.country);
		} 
}

   选择:关于static属性与非static属性定义的选择(只有共享或者不想产生对象时才用static

       |-在定义类99%的情况下是不会考虑static属性的;

       |-如果需要描述共享属性的概念,或者不希望受到实例化对象控制的时候使用static属性   

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值