你的分享就是我们的动力 ---﹥

想问关于属性的非常小白的有关问题

想问关于属性的非常小白的问题
JAVA 编写类的时候

public class tst {
private String a;
public String getA(){
return this.a;
}
public void setA(String value){
this.a=value;
}

}



public class tst {
public String A;
}


问题1 这两种写法有什么区别? 
问题2  这样可读写的属性为什么不采用第二种方式?
问题3 JAVA类的属性就是 private 一个内部成员变量 get 或者 set 这个成员变量的名字就可以自动识别为这个类的属性了?
问题4 
public class tst {
private String abc;
public String getAbc() {
return this.abc;
}
public void setAbc(String value){
this.abc=value;
}

}

public class tst {
private String aBC;
public String getAbc() {
return this.aBC;
}
public void setAbc(String value){
this.aBC=value;
}

}
有什么区别???

------解决思路----------------------
1&2、成员变量通常不建议使用public的,而是使用private,然后设置getter和setter。举个例子,一个东亚人,他的国籍只可能是中国、日本、韩国、朝鲜,如果这个国籍属性是public的,只要随便一个字符串就可以,而使用setter后,你可以在里面判断,不是这四个国家的话抛异常。从这个例子,应该可以感受到getter和setter的一个好处。
3&4、getter和setter的形式是一种约定,达到望文生义的目的,你也可以不按照这个格式,只是,使用你编写的类的人会比较费劲。
------解决思路----------------------
通过接口设置属性可以控制如何设置,比如不符合规则的不设置,而通过直接读取属性修改则不受限制。比如设置年龄,你可以直接改为1000岁,但是不合理,通过接口设置可以加以限制。更重要的是隐藏细节,年龄怎么存的别人不知道(当然你是设计者你知道),你可以用数组存也可以用对象存也可以用int存。方法名是任意的,怎么取都可以,主要是里面的执行主体。
------解决思路----------------------
通过get和set识别的属性是符合JavaBean规范的,因为很多框架遵守这个规范(包括jdk自己的bean模块),你可以把创建和属性操作全委托给框架来进行