> 文档中心 > 【Java面向对象——(封装)】

【Java面向对象——(封装)】

目录

    • JAVA面向对象
      • 对象属性赋值与读取
      • 封装
        • 封装的概念
        • 封装的优点
        • 代码实现Java封装
        • 封装中参数变量与成员变量名一致
        • 封装中this的含义
        • Eclipse中getter和setter方法生成的多种方式
          • 方式一
          • 方式二
          • 方式三——lombok引入
            • 下载插件lombok
            • 配置lombok

JAVA面向对象

对象属性赋值与读取

  • 新建一个Person01的类
  • 在类里面声明三个属性,分别是名字、 性别、 年龄
public class Person01 {/ * 昵称 */String nickname;/ * 性别 1 代表男性 0 代表女性 */int gender;/ * 年龄 */int age;}
  • 在Test里新建一个Person01Test的测试类
  • 把Person01这个类实例化出来两个对象person01和person02
  • 读取person01和person02两个对象的各有的属性
public class Person01Test {@Testpublic void test01() {Person01 person01 = new Person01();Person01 person02 = new Person01();System.out.println(person01.nickname);System.out.println(person02.nickname);System.out.println(person01.gender);System.out.println(person02.gender);System.out.println(person01.age);System.out.println(person02.age);}}

因为在Person01类中没有给属性固定的值,所以输出的是属性的默认值

nullnull0000

给每个对象的属性赋值后再次读取

public class Person01Test {@Testpublic void test02() {Person01 person01 = new Person01();Person01 person02 = new Person01();person01.nickname = "张三";person02.nickname = "李四";System.out.println(person01.nickname);System.out.println(person02.nickname);person01.gender = 1;System.out.println(person01.gender == 1 ? "男" : "女");System.out.println(person02.gender == 1 ? "男" : "女");person01.age = 28;person02.age = 58;System.out.println(person01.age);System.out.println(person02.age);}}

输出被赋的值

张三李四男女2858

封装

封装的概念

  • 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
  • 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
  • 要访问该类的代码和数据,必须通过严格的接口控制。
  • 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
  • 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。

代码实现Java封装

  • 修改属性的可见性来限制对属性的访问(一般限private修饰符修饰属性)
public class Person02 {   private String nickname;   private int gender;   private int age;}
  • 将 Person02类中的属性设置为私有的,只能本类才能访问,其他类都访问不了
  • 对每个值属性提供对外的公共方法访问,分别创建一对赋值及取值的方法,用于对私有属性的访问
  • 因此,任何要访问类中私有成员变量的类都要通过getter和setter方法。
public class Person02 {   private String nickname;   private int gender;   private int age;   public void setNickname(String name) {   nickname = name;   }   public String getNickname() {   return nickname;   }   public void setGender(int sex) {   gender = sex;   }   public int getGender() {   return gender;   }   public void setAge(int nianling) {   age = nianling;   }   public int getAge() {   return age;   }}
  • 在Test里新建一个Person02Test的测试类
  • 把Person02这个类实例化出来两个对象person01和person02
  • 读取person01和person02两个对象的各有的属性
public class Person02Test {@Testpublic void test01() {Person02 person01 = new Person02();Person02 person02 = new Person02();System.out.println(person01.getNickname());System.out.println(person02.getNickname());System.out.println(person01.getGender());System.out.println(person02.getGender());System.out.println(person01.getAge());System.out.println(person02.getAge());}}

给每个对象的属性赋值后再次读取

public class Person02Test {@Testpublic void test02() {Person02 person01 = new Person02();Person02 person02 = new Person02();person01.setNickname("张三");person02.setNickname("李四");System.out.println(person01.getNickname());System.out.println(person02.getNickname());person01.setGender(1);System.out.println(person01.getGender() == 1 ? "男" : "女");System.out.println(person02.getGender() == 1 ? "男" : "女");person01.setAge(28);person02.setAge(58); System.out.println(person01.getAge());System.out.println(person02.getAge());}}

输出被赋的值

张三李四男女2858

封装中参数变量与成员变量名一致

当封装中参数变量与成员变量名一致时

public class Person03 {private String nickname;private int gender;private int age;public void setNickname(String nickname) {nickname = nickname;}public String getNickname() {return nickname;}public void setGender(int gender) {gender = gender;}public int getGender() {return gender;}public void setAge(int age) {age = age;}public int getAge() {return age;}}

赋的值为无效值

public class Person03Test {@Testpublic void test02() {Person03 person01 = new Person03();Person03 person02 = new Person03();person01.setNickname("张三");person02.setNickname("李四");System.out.println(person01.getNickname());System.out.println(person02.getNickname());person01.setGender(1);System.out.println(person01.getGender() == 1 ? "男" : "女");System.out.println(person02.getGender() == 1 ? "男" : "女");person01.setAge(28);person02.setAge(58); System.out.println(person01.getAge());System.out.println(person02.getAge());}}

输出被赋的值为默认值

nullnull女女00

封装中this的含义

this 方法的调用者 谁调用我 我就是谁

在此处this的含义是调用本类中的成员变量

public class Person04 {private String nickname;private int gender;private int age;public void setNickname(String nickname) {this.nickname = nickname;}public String getNickname() {return nickname;}public void setGender(int gender) {this.gender = gender;}public int getGender() {return gender;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}}
  • 在Test里新建一个Person04Test的测试类
  • 把Person04这个类实例化出来两个对象person01和person02
  • 给每个对象的属性赋值
  • 读取person01和person02两个对象的各有的属性
public class Person04Test {@Testpublic void test02() {Person04 person01 = new Person04();Person04 person02 = new Person04();person01.setNickname("张三");person02.setNickname("李四");System.out.println(person01.getNickname());System.out.println(person02.getNickname());person01.setGender(1);System.out.println(person01.getGender() == 1 ? "男" : "女");System.out.println(person02.getGender() == 1 ? "男" : "女");person01.setAge(28);person02.setAge(58); System.out.println(person01.getAge());System.out.println(person02.getAge());}}

输出被赋的值

张三李四男女2858

Eclipse中getter和setter方法生成的多种方式

方式一
  • 新建一个Person的类
  • 在类里面声明三个属性
  • 点击任意属性左侧的黄色叹号小灯泡选择Create getter and setter for ‘nickname’… 后点击回车键
    快速创建getter and setter
  • 勾选getter name 和setter name然后点击ok
    快速创建getter and setter
  • 该属性nicknamegetter and setter已自动生成

快速创建getter and setter

  • 使用同样的方式可以快速创建其他属性的getter and setter

注意:该方式效率不高

方式二
  • 新建一个Person的类
  • 在类里面声明三个属性
  • 右键选择Source点击Generate Getter and Setters…后点击回车键快速创建getter and setter
  • 根据右侧选项点击勾选需要生成getter和setter的属性,然后点击Generate快速创建getter and setter
  • 其各属性的getter and setter已快速自动生成
    快速创建getter and setter
  • 方式二与方式一相对比,方式二更便捷
方式三——lombok引入
  • 以上两种方式是开发工具生成的
  • 如果遇到属性过多的情况可以使用插件lombok引入
下载插件lombok
  • lombok插件下载地址: mvnrepository.
  • 搜索栏输入lombok点击Search
    lombok引入
  • 进入后点击Project Lombok
    lombok引入
  • 然后点击最新1.18.22版本
    lombok引入
  • 第一步把依赖复制到项目pom文件中然后保存
<dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>1.18.22</version>    <scope>provided</scope></dependency>

lombok引入

  • 第二步下载Files右侧的jar文件到D:\setup目录中
    lombok引入
配置lombok
  • 下载好lombok-1.18.22.jar文件后在jar文件D:\setup目录中调出控制台lombok配置
  • 在控制台输入并运行jar文件
java -jar lombok-1.18.22.jar
  • 输入点击回车后在新跳转的画面点击确定
    lombok配置
  • 然后点击本地变量找到eclipse文件路径
    lombok配置
  • 点击安装和升级,最后点击退出安装即可
    lombok配置
  • 下载配置完成后重新启动eclipse开发工具
  • 在建好的项目类中可以快速的给所有属性创建getter and setter
  • 在类的上方导入这个依赖即可
package com.lihaozhe.day17.bean;import lombok.Getter;import lombok.Setter;@Getter@Setterpublic class Person06 {private String nickname;private int gender;private int age;}
  • 此时右侧可以看到已创建的getter and setter
    lombok引入

彭州一中