一、成员变量与局部变量

  1.定义的位置不同

    成员变量:成员变量定义在方法外,类中;

    局部变量:局部变量定义在方法中。

  2.生命周期不同

    成员变量:是随着对象的加载而加载,随着对象的销毁而销毁;

    局部变量:是随着方法的加载而加载,随着方法的结束而结束;

  3.存储的位置不同

    成员变量:存储在堆内存中;

    局部变量:存储在栈内存中;

  4.是否有默认值

    成员变量:是有默认值的;

      局部变量:是没有默认值,必须先赋值才能使用;

二、封装

1.概念:用来隐藏属性内部的细节部分,对外提供访问的方法;

2.好处:

  • 可以提高代码的安全性;
  • 提高代码的可扩展性和维护性;

3.体现

  • 对属性进行封装:使用private进行修饰,使用priva进行修饰的属性,不能被其他类访问;

4.方法

提供两个对外访问的方法,可用来改变私有属性的变量值,解决不能被其他类访问的问题。

      set()-------->设置值,用于给成员变量进行赋值;

      get()--------->获取值,获取成员变量的值;

利用this关键字,可以避免方法参数名称与成员变量名称相同的时候,导致成员变量赋值失败。

      this----->表示当前对象的引用,即可以理解为就是当前对象;

      this.变量名-------->获取的是成员变量;

      this.方法()--------->获取的是成员方法;

5.案例

(1)提供public方法,给封装好的函数接口,用来修改封装类的属性。

1 public class Test03 {
 2     public static void main(String[] args) {
 3         //实例化对象
 4         Student stu = new Student();
 5         //访问私有属性
 6 
 7         //给成员变量赋值
 8         stu.setName("张三");
 9         stu.setAge(50);
10         //取值
11         System.out.println(stu.getName());
12         System.out.println(stu.getAge());
13     }
14 }
15 
16 //student类 封装
17 class Student {
18     private String name;
19     private int age;
20 
21     //添加set(),get()方法
22     // 就是定义一个别的类可以访问本类私有属性的方法,该方法为public
23     //得到名字、年龄
24     public void setName(String n) {
25         name = n;
26     }
27     public String getName() {
28         return name;
29     }
30     //设置名字、年龄
31     public void setAge(int a) {
32         if(a < 0 || a > 120){
33             age = 60;
34         }else {
35             age = a;
36         }
37     }
38     public int getAge(){
39         return age;
40     }
41 
42 }

 (2)用this获取成员变量、成员方法

1 public class Test03 {
 2     public static void main(String[] args) {
 3         //实例化对象
 4         Student stu = new Student();
 5         //访问私有属性
 6 
 7         //给成员变量赋值
 8         stu.setName("张三");
 9         stu.setAge(50);
10         //取值
11         System.out.println(stu.getName());
12         System.out.println(stu.getAge());
13     }
14 }
15 class Student {
16     private  String name;
17     private int age;
18 
19     //用this引用set(),get()方法
20     //同上,给本类写对外接口
21     public void setName(String name){
22         this.name=name;
23     }
24     public String getName(){
25         return name;
26     }
27     public void setAge(int age){
28         if (age < 0 || age > 120){
29             this.age=60;
30         }else {
31             this.age=age;
32         }
33     }
34     public int getAge(){
35         return age;
36     }
37 
38 }