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:  |