变量的声明(实例与静态)
1 /* 2 什么时候变量声明为实例的,什么时候声明为静态的? 3 如果这个类型的所有对象的某个属性值都是一样的, 4 不建议定义为实例变量,浪费内存空间。建议定义 5 为类级别特征,定义为静态变量,在方法区中只保留 6 一份,节省内存开销。 7 8 一个对象一份的是实例变量。 9 所有对象一份的是静态变量。 10 */ 11 /* 12 public class StaticTest02{ 13 public static void main(String[] args){ 14 Chinese c1 = new Chinese("1231456456456456","张三","中国"); 15 System.out.println(c1.idCard); 16 System.out.println(c1.name); 17 System.out.println(c1.country); 18 19 Chinese c2 = new Chinese("7897897896748564","李四","中国"); 20 System.out.println(c2.idCard); 21 System.out.println(c2.name); 22 System.out.println(c2.country); 23 } 24 } 25 26 // 定义一个类:中国人 27 class Chinese{ 28 29 // 身份证号 30 // 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。 31 String idCard; 32 33 // 姓名 34 // 姓名也是一个人一个姓名,姓名也应该是实例变量。 35 String name; 36 37 // 国籍 38 // 对于“中国人”这个类来说,国籍都是“中国”,不会随着对象的改变而改变。 39 // 显然国籍并不是对象级别的特征。 40 // 国籍属于整个类的特征。整个族的特征。 41 // 假设声明为实例变量,内存图是怎样的? 42 // 假设声明为静态变量,内存图又是怎样的? 43 String country; 44 45 // 无参数 46 public Chinese(){ 47 48 } 49 50 // 有参数 51 public Chinese(String s1,String s2, String s3){ 52 idCard = s1; 53 name = s2; 54 country = s3; 55 } 56 } 57 */ 58 59 public class StaticTest02{ 60 public static void main(String[] args){ 61 // 访问中国人的国籍 62 // 静态变量应该使用类名.的方式访问 63 System.out.println(Chinese.country); 64 65 Chinese c1 = new Chinese("1231456456456456","张三"); 66 System.out.println(c1.idCard); 67 System.out.println(c1.name); 68 69 Chinese c2 = new Chinese("7897897896748564","李四"); 70 System.out.println(c2.idCard); 71 System.out.println(c2.name); 72 73 // idCard是实例变量,必须先new对象,通过“引用.” 访问 74 // 错误: 无法从静态上下文中引用非静态 变量 idCard 75 //System.out.println(Chinese.idCard); 76 } 77 } 78 79 // 定义一个类:中国人 80 class Chinese{ 81 82 // 身份证号 83 // 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。 84 String idCard; 85 86 // 姓名 87 // 姓名也是一个人一个姓名,姓名也应该是实例变量。 88 String name; 89 90 // 国籍 91 // 重点重点五颗星:加static的变量叫做静态变量 92 // 静态变量在类加载时初始化,不需要new对象,静态变量的空间就开出来了。 93 // 静态变量存储在方法区。 94 static String country = "中国"; 95 96 // 无参数 97 public Chinese(){ 98 99 } 100 101 // 有参数 102 public Chinese(String s1,String s2){ 103 idCard = s1; 104 name = s2; 105 } 106 }