私有成员的设置和访问方式——setter和getter
在定义类时,为了保证类中成员数据安全性及的封装性,防止成员数据值被任意修改,通常将类中成员属性用private进行修饰。
被private修改的成员属性,只能在类中访问,跳出本类后,就无法直接访问。
此时,其它类要对该成员变量进行操作,则通常要用到“设置setter”和“读取getter”操作。
那些,什么是stter和getter呢???先看以下示例。
实例1:
如下,study包中,创建一个Job类
Job类中,jobName为private属性。先使用setter方式进行设置,再用getter进行获取。
setter方式用于外部调用时,传递值给name。
getter方式用于外部调用时,获取name的值。
package study; //设置一个包 //创建一个类 public class Job { //类中的属性为private私有 private String jobName; //设置一个public方法,用于外部设置jobName值。 //形参name为String类型,外部调用时,将实参值传给name,再赋值给jobName,返回值类型为空 public void setJobName(String name){ jobName=name; } //设置一个public方法,用于外部访问jobName值。 //上一步,外部调用set方法时,将实参值传给了jobName,在这步即可将jobName值返回,返回类型与jobName值一致。 public String getJobName(){ return jobName; } }
以上,设置和调用private值的模型创建完成后,即可实例化Job类
import study.*; public class MyTest { public static void main(String[] args) { Job z=new Job(); //创建z对象 z.setJobName("城管"); //z调用set方法,将实参值“城管”转给Job类set方法中的name System.out.println(z.getJobName()); //z调用get方法,获取实参值 } }
输出结果:
城管
实例2:
当setter和getter方法中的形参名与private修饰的变量名一致时,需要用this关键字
定义类,如下
package study; public class Job { private String jobName; //形参jobName与private所修饰的变量名一致时,需要在变量名前加this.,表示调用者。如z对象调用,this就代表z public void setJobName(String jobName){ this.jobName=jobName; } //返回值前加this.,同样代表调用者。即回返调用者的值。 public String getJobName(){ return this.jobName; } }
模型创建完成后,即可实例化对象
import study.*; public class MyTest { public static void main(String[] args) { Job z=new Job(); //创建z对象 z.setJobName("警察"); //z调用set方法,将实参值“城管”转给Job类set方法中的jobName。z即模型中的this。 System.out.println(z.getJobName()); //z调用get方法,获取实参值。z即模型中的this。 } }
输出结果:
警察
实例3:
可以将setter和getter两个合二为一。赋值后,直接返回所赋的值。如下
package javastudy; public class setgetTest { public static void main(String[] args) { Job z =new Job(); z.setJobName("城管"); z.show(); } } class Job{ private String jobName; public String setJobName(String name){ //set方法赋值,同时返回set所赋的值 jobName=name; return jobName; } public void show(){ System.out.println(jobName); } }
输出结果:
城管
示例4:
可以在setter中加入条件判断语句,判断setter的参数值是否合法。
public class Person { public static void main(String[] args) { Per a = new Per(); a.setAge(130); } } class Per { private int age; public int getAge() { return age; } public void setAge(int age) { // 在setter中加入if条件判断 if (age > 0 && age < 130) { this.age = age; say(); } else System.out.println("error age"); } public void say() { System.out.println("My age is " + age); } }
输出:
error age
注:在Eclispe中,内置了setter和getter代码生成功能,如下
总结:
访问类中的private变量时,才用到setter和getter。
设置,setter:返回值为空void,有参数,形参名与private变量名一致时要加this.
获取,getter:无参数,返回值及返回类型,与获取的private变量名一致。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)