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