一个小程序看代码规范

public class Person {
    
    private static final int tme = 20;
    private static int age = 30;
    private int count = 0;
    public static int all = 50;
    public String name;
    
    public Person(int count,String name) {
        this.count = count;
        this.name = name;
    }


    public static int getAll() {
        return all;
    }


    public static void setAll(int all) {
        Person.all = all;
    }


    public static int getAge() {
        return age;
    }


    public static void setAge(int age) {
        Person.age = age;
    }


    public static int getTme() {
        return tme ;
    }

    @Override
    public String toString() {
        
        return "tme:" + tme + ",age:" + age +",count:" + count +",all:" + all ;
    }<p>}</p>

这样的类大家可能都见过,但是平时应该没有人详细的研究过,反正是可以用,没有出问题,就可以了。

现在对上面这个类中的问题或者说是不好的地方进行一下说明,仅代表个人意见

首先说明一下static,个人理解,static修饰变量时,表示这个变量不属于这个类的对象,而是属于这个类,也就是说,所有的类的实例使用的都是这一个变量,大家用的是同一个,不是出现同名的多个。

再简单的说一下private,private修饰的变量,应该是将变量私有化,不希望其他类通过类的实例进行修改,如果需要修改,需要提供对应的方法进行修改。一般这样的变量是提供给其他对象或类调用的,

private static final int tme = 20;

time这个变量的含义是:静态的,final的,也就是说这个变量属于整个类,所有的对象公用这一个,final的含义是,这个变量是不可以进行修改的。

这个变量声明存在的问题是,既然想给其他对象或者类调用,为啥声明成private。声明为private,那就是不想让别人直接调用,需要另外提供对应的方法


    public static int getTme() {
        return tme;
    }

但是这个方法,同样是static,如果不是static那么就不可以引用或操作static的time。静态方法同样是需要类名.的方式调用。这样为啥不直接将变量设置为

public static final int tme = 20;
如果返回的是这样的
public static int getTme() {
        return tme *2;
    }

如果是这样也可说得过去,但是那为啥不直接写成

public static final int tme = 20 *2;

返回的值是经过计算得出的,需要time 与另外一个static v进行计算得出,v是经常变化的

 public static int getTme() {
        return tme * v;
}

如果是这样,那么time设置成private 看似很合理。那么这个函数命名就不是很合理了吧,你的这个函数,不是返回Time,而是返回的一个计算结果,那么是不是修改一个名字会更容易理解呢。例如修改为public static int getResult()

public String name;

name是一个普通的成员变量,每一个对象都有自己的name。根据封装的思想,这个name应该设置为private比较好,然后对外提供set和get方法,这样做的好处是,在对象进行赋值时我们可以进行必要的安全检查或者拦截处理。

 public void setName(String name) {
        if(null == name){
            name = "";  
        }
        this.name = name;
}

这样的话,不管外面有多少个对象,我们只要修改这一个地方就可以,如果设置为public

那么如果对name进行修改,可能会出现这样的情况,Person p = new Person();p.name= “123”。如果 有一天说,需要进行一些过滤,名字必须以字母开头,那么,要是有1000个这样的对象,是不是需要一个一个的检查一千遍。

同理 public static intall = 50; 已经对外提供了set和get方法,为啥不修改成pirvate呢?

        Person p1 = new Person(11,"1");
        System.out.println(p1.toString());
        Person p2 = new Person(12,"2");
        System.out.println(p2.toString());
        p2.all = 25;
        p2.setAge(15);
        System.out.println(p1.toString());

运行结果:如果你使用一个对象,修改了一个static修饰的变量,那么其他所有对象的这个值都会被修改。

tme:20,age:30,count:11,all:50
tme:20,age:30,count:12,all:50
tme:20,age:15,count:11,all:25



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值