变量的声明(实例与静态)

  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 }

 

posted @ 2020-06-17 14:24  1998青年  阅读(491)  评论(0编辑  收藏  举报