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 }
![]()