java get() 方法set()_关于java使用get()和set()方法,而不用public的问题

1.灵活性

比如我们有一个Person类,我们给它设置一个属性name,但是我们希望在取名字的时候,不是只显示名字,

而是把名字按我们的要求输出,比如”我的名字叫XX”,代码如下:

public class Person {

private String

name;

public String getName()

{

return "我的名字叫" + name;

}

public void

setName(String name) {

this.name = name;

}

}

如上代码,以后我们只要定义一个person对象,并给他setName(xx),

再getName的时候,就会显示我的名字叫XX。在实际业务中还可以有更灵活的运用,

2.安全性

规定只读或只写,或写读

比如我们的操作系统在新建用户或在共享文件的时候,经常会提示对针对某个用户的权限是什么,是只读还是只写还是可读写,这里的读写就好比get/set。

对于类来说,如果不使用set/get方法,直接用public定义某个属性,那么这个属性是可读可写的,如果你希望一个类的某个属性是只能读取,不能写入的时候,上面用public定义某个属性就不能满足了,但是我们可以使用private定义属性,再定义一个get方法,但是不定义set方法来实现。反之,只定义set,不定义get则表示该属性是只写不能读的。

举个简单的例子,如下代码

public class Circle {

private double radius;

private double pai =

3.14;

public double getPai()

{

return pai;

}

public void

setRadius(double radius) {

this.radius = radius;

}

public double getC()

{

return 2*pai*radius;

}

}

我们定义了一个圆类,定义了属性半径和pai,半径我只提供写的方法,但是不提供读,而pai只提供读,但不能写,并提供了一个计算周长的方法getC。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。

set/get的方法作用当然不只这些,实际项目中的用法有很多,比如对某个类升级,有一个属性的Type变化了,只要set/get的Type不变就不会影响到以前的代码。更多的用法只能在使用中多体会了

3、类似第一条说的,用get()与set()可以控制变量。

如果get()和set()方法里面只放一个赋值语句的话,和public变量应该没什么区别

但是设想,如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,

如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。用某个同学的说法就是:get

和 set 可以在方法内部对参数进行校验,做安全检查后再进行赋值

public class Person {

private String name;

private int age;

public static void main(String[] args) {

Person p = new Person();

//p.setName("帅哥");

p.setAge(-100);

System.out.println("*********" + p.getName());

System.out.println("****分割线***************");

System.out.println("*********" +p.age);

}

public String getName() {

return "我的名字叫" + name;

}

// public void setName(String name)

{//我把name属性的写入setName方法去掉,那么p.setName("ZHANGZHEN");

// this.name = name;  //p.setName("ZHANGZHEN")这条语句就会报错,因为name属性无该接口

// }

public int getAge() {

return age;

}

public void setAge(int age) {

if(age <0 ){//控制set写入的变量范围等等作用

this.age=age*(-1);

}else{

this.age = age;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值