Java 基础 17 private、this关键字和封装

1.1 private关键字的概述和特点

1.1.1private关键字

  • private关键字:
    • 是一个权限修饰符。
    • 可以修饰成员(成员变量和成员方法)
    • 被private修饰的成员只在本类中才能访问。

1.1.1.1案例代码

package com.itheima_01;
/*
 * 直接使用对象名访问成员变量,会存在数据的安全问题
 * 这个时候,我们就应该思考能不能让外界不要直接访问成员变量?
 * 能
 * 如何实现呢?
 *      用private关键字
 * private:
 *      是一个修饰符
 *      可以修饰成员变量,也可以修饰成员方法
 *      被private修饰的成员只能在本类中被访问
 * 
 * 针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量的值,
 * 方法用public修饰
 */
public class Student {
    String name;
    //int age;
    private int age;
    
    public void setAge(int a) {
        if(a<0 || a>200) {
            System.out.println("你给的年龄有误");
        }else {
            age = a;
        }
    }
    
    public int getAge() {
        return age;
    }
    
    public void show() {
        System.out.println(name+"***"+age);
    }
}
package com.itheima_01;
/*
 * 测试类
 */
public class StudentTest {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        s.show();
        
        //给成员变量赋值
        s.name = "林青霞";
        //s.age = 30;
        //s.age = -30;
        //通过方法赋值
        s.setAge(-30);
        s.show();
    }
}

1.2 private修饰后的标准类代码

  • rivate最常见的应用:
    • 把成员变量用private修饰

    • 提供对应的getXxx()/setXxx()方法

1.2.1案例代码

package com.itheima_02;
/*
 * 学生类
 */
public class Student {
    private String name;
    private int age;
    
    public void setName(String n) {
        name = n;
    }
    
    public String getName() {
        return name;
    }
    
    public void setAge(int a) {
        age = a;
    }
    
    public int getAge() {
        return age;
    }
}
package com.itheima_02;
/*
 * 测试类
 */
public class StudentTest {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        System.out.println(s.getName()+"***"+s.getAge());
        
        //给成员变量赋值
        s.setName("林青霞");
        s.setAge(30);
        System.out.println(s.getName()+"***"+s.getAge());
    }
}

1.3 封装的概述和好处

  • 封装概述
    • 是面向对象三大特征之一
    • 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
  • 封装原则:
    • 将不需要对外提供的内容都隐藏起来。
    • 把属性隐藏,提供公共方法对其访问。
    • 成员变量private,提供对应的getXxx()/setXxx()方法
  • 好处:
    • 通过方法来控制成员变量的操作,提高了代码的安全性
    • 把代码用方法进行封装,提高了代码的复用性

1.4 this关键字的概述和使用

1.4.1 this关键字由来和使用

  • this:代表所在类的对象引用

  方法被哪个对象调用,this就代表那个对象

  • 什么时候使用this呢

  局部变量和成员变量重名

1.4.1案例代码

package com.itheima;

/*
 * 学生类
 * 
 * 目前代码中的n和a没有做到见名知意,需要改进。
 * 
 * 如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。
 * 
 * 我们有没有办法把局部变量的name赋值给成员变量的name呢?
 * 有
 * 
 * 有什么办法呢?
 *      用this关键字就可以解决这个问题
 * 
 * this:代表所在类的对象引用
 *      方法被哪个对象调用,this就代表谁。
 * 
 * 使用场景:
 *      就是用于解决成员变量被隐藏的问题。       
 */
public class Student {
    private String name;
    private int age;

    public void setName(String name) { //"林青霞"
        //name = name;
        this.name = name;
    }

    public String getName() {
        return name;
        //return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

package com.itheima;

/*
 * 测试类
 */
public class StudentTest {
    public static void main(String[] args) {
        // 创建对象
        Student s = new Student();
        System.out.println(s.getName() + "---" + s.getAge());

        s.setName("林青霞");
        s.setAge(30);
        System.out.println(s.getName() + "---" + s.getAge());
    }
}

你可能感兴趣的:(Java 基础 17 private、this关键字和封装)