一个小程序看代码规范

来源:互联网 发布:mysql数据库清空所有 编辑:程序博客网 时间:2024/06/01 10:02
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:50tme:20,age:30,count:12,all:50tme:20,age:15,count:11,all:25



0 0
原创粉丝点击