【Java面向对象——(封装)】
目录
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)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
- 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
- 要访问该类的代码和数据,必须通过严格的接口控制。
- 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
代码实现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 name 和setter name然后点击ok键
- 该属性nickname的getter and setter已自动生成
- 使用同样的方式可以快速创建其他属性的getter and setter
注意:该方式效率不高
方式二
- 新建一个Person的类
- 在类里面声明三个属性
- 右键选择Source点击Generate Getter and Setters…后点击回车键
- 根据右侧选项点击勾选需要生成getter和setter的属性,然后点击Generate键
- 其各属性的getter and setter已快速自动生成
- 方式二与方式一相对比,方式二更便捷
方式三——lombok引入
- 以上两种方式是开发工具生成的
- 如果遇到属性过多的情况可以使用插件lombok引入
下载插件lombok
- lombok插件下载地址: mvnrepository.
- 搜索栏输入lombok点击Search
- 进入后点击Project Lombok
- 然后点击最新1.18.22版本
- 第一步把依赖复制到项目pom文件中然后保存
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <scope>provided</scope></dependency>
- 第二步下载Files右侧的jar文件到D:\setup目录中
配置lombok
- 下载好lombok-1.18.22.jar文件后在jar文件D:\setup目录中调出控制台
- 在控制台输入并运行jar文件
java -jar lombok-1.18.22.jar
- 输入点击回车后在新跳转的画面点击确定
- 然后点击本地变量找到eclipse文件路径
- 点击安装和升级,最后点击退出安装即可
- 下载配置完成后重新启动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
彭州一中