目录
JAVA面向对象
对象属性赋值与读取
- 新建一个Person01的类
- 在类里面声明三个属性,分别是名字、 性别、 年龄
public class Person01 {
/**
* 昵称
*/
String nickname;
/**
* 性别 1 代表男性 0 代表女性
*/
int gender;
/**
* 年龄
*/
int age;
}
- 在Test里新建一个Person01Test的测试类
- 把Person01这个类实例化出来两个对象person01和person02
- 读取person01和person02两个对象的各有的属性
public class Person01Test {
@Test
public 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类中没有给属性固定的值,所以输出的是属性的默认值
null
null
0
0
0
0
给每个对象的属性赋值后再次读取
public class Person01Test {
@Test
public 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);
}
}
输出被赋的值
张三
李四
男
女
28
58
封装
封装的概念
- 在面向对象程式设计方法中,封装(英语: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 {
@Test
public 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 {
@Test
public 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());
}
}
输出被赋的值
张三
李四
男
女
28
58
封装中参数变量与成员变量名一致
当封装中参数变量与成员变量名一致时
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 {
@Test
public 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());
}
}
输出被赋的值为默认值
null
null
女
女
0
0
封装中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 {
@Test
public 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());
}
}
输出被赋的值
张三
李四
男
女
28
58
Eclipse中getter和setter方法生成的多种方式
方式一
- 新建一个Person的类
- 在类里面声明三个属性
- 点击任意属性左侧的黄色叹号小灯泡选择**Create getter and setter for ‘nickname’… **后点击回车键
- 勾选getter name 和setter name然后点击ok键
- 该属性nickname的getter and setter已自动生成
- 使用同样的方式可以快速创建其他属性的getter and setter
注意:该方式效率不高
方式二
- 新建一个Person的类
- 在类里面声明三个属性
- 右键选择Source或者使用键盘Alt+Shift+s点击**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
@Setter
public class Person06 {
private String nickname;
private int gender;
private int age;
}
- 此时右侧可以看到已创建的getter and setter