static关键字:
package com.lbj.javase07;
/**
* "中国人"类
*
* 什么时候成员变量声明为实例变量呢?
* -所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性具体的值不同】
*
* 什么时候成员变量声明为静态变量呢?
* -所有对象都有这个属性,并且所有对象的这个属性的值是一样的,建议定义为静态变量,节省内存的开销
*
* 静态变量在类加载的时候初始化,内存在方法区中开辟。访问的时候不需要创建对象,直接使用"类名.静态变量名"的方式访问。
*
* 关于java中的static关键字:
* 1.static英语单词翻译为静态的
* 2.static修饰的方法是静态方法
* 3.static修饰的变量是静态变量
* 4.所有static修饰的元素都称为静态的,都可以使用"类名."的方式访问,当然也可以用"引用."的方式访问【但不建议】
*
* @author 14811
*
*/
public class Chinese {
//身份证号【每一个对象的身份证号不同】
//实例变量
String id;
//姓名【每一个对象的姓名不同】
//实例变量
String name;
//国籍【每一个对象由于都是由"chinese类"实例化的,所以每一个中国人的国籍都是"中国"】
//无论通过Chinese类实例化多少个java对象,这些java对象的国籍都是"中国"
//实例变量【实例变量是一个java对象就有一份,100个java对选哪个,就有100个country】,分析这种设计方式有什么缺点?
//实例变量存储java对象内部,在堆内存中,在构造方法执行的时候初始化
//String country;
//所以需要统一一个模板,属于中国人的模板
//国籍【所有对象国籍一样,这种特征属于类级别的特征,可以提升为整个模板的特征,可以在变量前添加static关键字修饰】
//静态变量,静态变量在类加载的时候初始化,不需要创建对象,内存就开辟了。
//静态变量存储在方法区内存中
static String country="中国";
//构造函数
public Chinese(){
/*
* this.id=null;
* this.name=null;
* this.country=null;
*/
}
public Chinese(String id,String name){
this.id=id;
this.name=name;
}
}
创建一个测试类:
package com.lbj.javase07;
public class ChineseTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建中国人对象1
// Chinese zhangsan=new Chinese("1","张三","中国");
// System.out.println(zhangsan.id+","+zhangsan.name+","+zhangsan.country);
//
// Chinese lisi=new Chinese("2","李四","中国");
// System.out.println(lisi.id+","+lisi.name+","+lisi.country);
//
// Chinese wangwu=new Chinese("3","王五","中国");
// System.out.println(wangwu.id+","+wangwu.name+","+wangwu.country);
Chinese zhangsan=new Chinese("1","张三","中国");
System.out.println(zhangsan.id+","+zhangsan.name+","+Chinese.country);
Chinese lisi=new Chinese("2","李四","中国");
System.out.println(lisi.id+","+lisi.name+","+Chinese.country);
Chinese wangwu=new Chinese("3","王五","中国");
System.out.println(wangwu.id+","+wangwu.name+","+Chinese.country);
System.out.println(Chinese.country);//这样可以调用
System.out.println(zhangsan.country);//这样也可以调用
zhangsan=null;
//所有静态的数据都是可以采用类名. ,也可以采用"引用."的方式访问
//采用引用.的方式访问的时候,即使引用是null,也不会出现空指针异常。因为访问静态的数据不需要对象的存在
System.out.println(zhangsan.country);
}
}