java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。
-
访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限
我们的访问控制符有四种:- public
- protected
- 不修饰
- private
这里有一张经典的表可以说明他们的作用范围:
访问控制符 | 同一类下 | 同一包下 | 不同包下的子类 | 不同包下的非子类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
不修饰 | √ | √ | × | × |
private | √ | × | × | × |
以上表格中“√”表示可以访问,“×”表示不能访问,我们可以看出,public修饰的内容范围最大,private修饰的范围内容最小。
我们新建一个工程,在里面建两个包,test1和test2,然后在test1包下建一个类,叫Person,这次只给给四个属性,name age,gander,birth,用不同的修饰方法来修饰,并在类里面新建一个main方法。
- public class Person {
- public String name;
- protected int age;
- String gander;
- private String birth;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getGander() {
- return gander;
- }
- public void setGander(String gander) {
- this.gander = gander;
- }
- public String getBirth() {
- return birth;
- }
- public void setBirth(String birth) {
- this.birth = birth;
- }
- public static void main(String[] args) {
- Person person = new Person();
- }
- }
然后,我们在main方法里实例化一个Person类,然后我们不使用它的getter和setter方法,直接使用属性:
- public static void main(String[] args) {
- Person person = new Person();
- person.name = "大妖怪";
- person.age = 100;
- person.birth = "2016";
- person.gander = "男";
- System.out.println(person.name);
- }
你会发现运行起来没有问题,这个就是同一类下的情况。
我们继续建一个Test类在test1包下,然后把我们刚刚这段main方法拷进去:
你会发现,我们调用birth属性这里报错了,并且点击左边的红叉,它会给出提示让你要么改birth的修饰符,要么调用setBirth方法。
这种情况属于不在同一类下在同一包下的情况了,我们查看下birth属性的修饰方法,正好是private。
那么我们把Test类拷到test2包下并且导包: 你会发现现在只有name可以正常使用,别的都报错了,这种情况是不同包下的非子类,通过表格我们可以查到只有public修饰的属性可以被访问,而name的修饰符就是public。
接下来,我们让这个Student类继承我们的Person类,并且写个test方法去调用我们父类中的属性:
- public class Student extends Person {
- public void test(){
- name = "大妖怪";
- age = 1;
- birth = "2016";
- gander = "男";
- }
- }
此时你会发现,没报错的只有我们的name和age,也就是public和protected修饰的属性。
讲到这可以顺便说说我们的一些代码命名规范了:
- 项目名全部小写
- 包名全部小写
- 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写
- 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写
- 常量名全部大写
-
所有命名规则必须遵循以下规则:
- 名称只能由字母、数字、下划线、$符号组成
- 不能以数字开头
- 名称不能使用JAVA中的关键字
- 不允许出现中文及拼音命名
至于什么是关键字,给个最简单的判断方法,在eclipse中你写出来的东西是红色的就是了,比如class: