5.6.1static属性
在一个类中,主要的组成就是属性和方法(分为构造方法和普通方法两种),而每一个对象分别拥有自己的属性内容(不同对象的属性保存在不同的堆内存中)。如果想要类中的某个属性定义为公共属性(所有对象都可以使用的属性),则可以在声明属性前加上static关键字。
范例:定义static属性
public class Chinese {
private String name;
private int age;
static String country="伟大的中国";//[静态成员属性]国家,暂时封装
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age =age;
}
public int getAge() {
return age;
}
public Chinese() {}
public Chinese(String name,int age) {
this.name =name;
this.age=age;
}
public String getInfo() {
return "姓名:"+this.name+" 年龄:"+this.age+" 国籍:"+this.country;
}
}
public class Chinese_a {
public static void main(String[] args) {
Chinese per1=new Chinese("张三",50);
Chinese per2=new Chinese("李四",30);
Chinese per3=new Chinese("王五",20);
per1.country="中华人民共和国";
System.out.println(per1.getInfo());
System.out.println(per2.getInfo());
System.out.println(per3.getInfo());
}
}
姓名:张三 年龄:50 国籍:中华人民共和国
姓名:李四 年龄:30 国籍:中华人民共和国
姓名:王五 年龄:20 国籍:中华人民共和国
static定义一个country属性,该属性称为公共属性,,保存在全局数据区中,当有一个对象修改了static属性内容后将影响到其他所有对象。关系如下:
如果country不使用static,实例化操作时,每一个对象都拥有各自的country属性,那么此属性不是公共属性,而当进行country属性更新时,就必然要修改所有类的对象,这样在实例化对象较多的时候一定会带来性能与操作上的问题。关系如下:
static 描述的是全局属性,对于全局属性除了可以利用实例化对象调用外,最大的特点在于可以直接利用类名称并且在没有实例化对象产生的情况下进行调用。
范例:通过类名直接调用static属性
public class Chinese_b {
public static void main(String[] args) {
System.out.println("直接访问static属性"+Chinese.country );
Chinese.country="中华人民共和国"; //修改静态属性内容
Chinese per=new Chinese("张三",25);
System.out.println(per.getInfo());
}
}
执行结果
public class Chinese_b {
public static void main(String[] args) {
System.out.println("直接访问static属性:"+Chinese.country );
Chinese.country="中华人民共和国";
Chinese per=new Chinese("张三",25);
System.out.println(per.getInfo());
}
}
通过本程序,就应该清楚以下几点:
- 使用static定义的属性内容不再堆内存中保存,而是保存在全局数据区。
- 使用static定义的属性内容表示类属性,类属性可以由类名称直接进行调用。
- static属性虽然定义在类中,但是可以在没有实例化对象的情况下进行调用。