对象,内存与封装

 1 /*栈内存:存储变量名的地址与基本类型;
 2 堆内存:存储对象(数据);
 3 new:1.表示创建一个对象;
 4     2.表示实例化对象;
 5     *3.表示申请内存空间:
 6 (64位 字符串占8个字节,整形占4个字节)    
 7  Horse h1= new Horse();
 8  Horse h2 =new Horse();
 9  h1.name=“小白”;
10  h1.age=100;
11  h2 =h1;//对象之间的赋值,相同类型才可以赋值;
12  当堆内存的对象没有被栈内存的引用所指向,那么堆内存的对象被jvm的GC视为垃圾
13  */
14  /*
15  封装:隐藏实现细节,仅对外提供访问接口;
16  (属性,方法,类,组件,模块化,系统级)的封装
17  优点:
18      模块化
19      信息隐藏
20      代码重用
21      插件化易于调试
22      具有安全性
23  缺点:
24     会影响执行效率 
25     
26 封装性
27    如果属性没有封装,那么在本类外创建对象后,可直接访问属性
28     private 关键字: 访问权限修饰符(私有的属性或方法,只能在本类访问)
29     但想要类的外部访问私有属性,需要提供公有的方法来间接访问
30     通常在一个类中,属性都私有化,并对外提供getter and setter 方法 ;
31     
32 */     
33 public class Test2 {
34 
35     public static void main(String[] args) {
36         // TODO Auto-generated method stub
37         Person p1 = new Person();
38         p1.setName("mmm");  
39         p1.setAge(0);
40             
41     }
42 
43 }
44 class Person{
45     //属性的封装
46     private String name;//成员变量
47     private int  age;
48     
49     //ggetter and setter 
50     
51     //对外提供一个获取name属性的方法
52     private String getName() {
53         return name;
54     }
55     //对外提供一个为name属性设置的方法
56     void setName(String name) {
57         this.name = name;
58     }
59     private int getAge() {
60         return age;
61     }
62     void setAge(int age) {
63         this.age = age;
64     }
65     
66     
67 }
68 
69 成员变量与局部变量
70   1.在类的位置不同:
71     成员变量:在类中定义;
72     局部变量:在方法中定义或者方法的参数;
73   2.在内存位置不同:
74      成员变量:在堆内存(成员变量属与对象,对象进入堆内存)
75      局部变量:在栈内存(局部变量属与方法,方法进入堆内存)
76   3.初始值不同:
77      成员变量:有默认初始化,引用类型默认为null
78      局部变量:没有默认初始化,必须定义,赋值,然后才能使用;
79   4.周期不同:
80     成员变量:顺着对象的创建而存在,顺着对象的销毁而消失
81     
82     局部变量:顺着方法的调用而存在,顺着方法的调用完毕而消失
83  注意:
84     成员变量名称与局部变量名称可以一样,在方法中使用是采用就近原则;
85      
原文地址:https://www.cnblogs.com/yyb6/p/9080979.html