一、成员变量与局部变量
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 }