私有成员的设置和访问方式——set()和get()方法
在定义类时,为了保证类中成员数据安全性及的封装性,防止成员数据值被任意修改,通常将类中成员属性用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变量名一致。
私有成员的设置和访问方式——set()和get()方法的更多相关文章
- 私有成员的设置和访问方式——setter和getter
在定义类时,为了保证类中成员数据安全性及的封装性,防止成员数据值被任意修改,通常将类中成员属性用private进行修饰. 被private修改的成员属性,只能在类中访问,跳出本类后,就无法直接访问. ...
- spring通过注解方式依赖注入原理 (私有成员属性如何注入)
一.spring如何创建依赖的对象 用过spring的都知道我们在dao.service层加上@repository.@Service就能将这两个对象交给spring管理,在下次使用的时候使用@res ...
- C++ //继承中的对象模型 //利用开发人员命令提示工具查看对象模型 //父类中所有非静态成员属性都会被 子类继承下去 //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承下去了
1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 /* 9 #include &l ...
- C#箴言之用属性来访问类的私有成员
在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问. ...
- C++笔记之外部类访问内部类的私有成员
如下图所示 内部类可以访问外部类的私有成员 而外部类无法访问内部类的私有成员 为了能让外部类访问内部类的私有成员,将外部类声明为内部类的友元类即可 #include <iostream> ...
- javascript模式(1)--私有成员
javascript是基于对象的一门语言,没有想java等语言那样子拥有封装的特性.但是javascript可以通过闭包来进行模拟. 1.构造函数与私有成员 可以用构造函数形成一个闭包,实现内部成员的 ...
- python私有成员与公有成员(_和__)
python并没有对私有成员提供严格的访问保护机制. 在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员. 私有成员在类的外部不能直接访问,需要 ...
- python-面向对象(四)——类成员的访问方式汇总
类成员的访问方式 #!/usr/bin/env python # _*_coding:utf-8 _*_ class pepole(object): '''This is __doc__ inform ...
- C#中访问私有成员
首先访问一个类的私有成员不是什么好做法.大家都知道私有成员在外部是不能被访问的.一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员造访,可以套用下面这种非常好的方式去解决. pr ...
随机推荐
- jquery.validate.js 一个jQuery验证格式控件
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
- RSA----实际函数库选择
需求:对字符串加密 加密后不要超过这个字符串的长度,最好是1半的长度. 非对称算法. 重复度一定要低 1使用RSA加密 1 rsaeuro 2openssl 参考openssl编程 3 Cr ...
- OPENCV图像特征点检测与FAST检测算法
前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...
- Vue.js实例
构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 })
- Java通过JNI调用dll详细过程(转)
源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...
- Delphi 内存与指针
源:Delphi 内存与指针 Delphi 的内存操作函数(1): 给字符指针分配内存 Delphi 的内存操作函数(2): 给数组指针分配内存 Delphi 的内存操作函数(3): 给结构体指针分配 ...
- RFID射频卡超市购物结算系统
RFID射频卡超市购物结算系统 这段时间在做RFID射频卡超市购物结算系统,这个系统的设想来自于大学研究课题,但是我们在淘宝网上购买设备的时候淘宝店主都认为RF射频技术不好应用在超市购物结算系统,原因 ...
- HDU1429 bfs
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- org.springframework.data.mapping.PropertyReferenceException: No property created found for type
错误原因:org.springframework.data.domain.SortSort sort=new Sort(Sort.Direction.DESC,"created_time&q ...
- MySQL-基本sql命令
关于环境的搭建和数据库的连接,我直接跳过,假设电脑上已经安装好了MySQL的环境,接下来直接进行数据库的操作:(虽然数据库不区分大小写,但是本文约定:命令用大写,用户变量和字段用小写) 1.创建数据库 ...