首先,java中有两个我们经常用,却也经常忽视的原则:就近原则和命名空间唯一原则(自己总结的,如有不当,请拍砖)
1.就近原则
所谓就近原则,就是说,虚拟机在找一个变量时,会先从离它最近的一对{ }中找,如果找到则停止查找(其他{ }或类成员若有同名变量则会找不到),如果没有则会到外层{ }中找,直到类成员变量这一级,如果类成员也没有则去父类中找,直到Object类结束。
2.命名空间唯一原则
所谓命名空间唯一原则,是指类名及类的属性名和方法名在整个java命名空间中是唯一的,命名空间唯一以保证调用唯一。
你会说,不对啊,我这个类中有个属性叫x,有个成员方法里边有个局部变量x,他们名字不是一样吗?不一样,你要调用该类的属性x,必须用this.x,这是老毕讲过的,更精确的说是包名.类名.this.x。但是一般情况下前边的包名.类名.this没有写,为什么?是因为就近原则在起作用。- package cn.zyx.test;
- public class Test {
- private int num=5;
- public void println(){
- int num=8;
- System.out.println("println方法的num:"+num);//8
- System.out.println("Test的属性num:"+this.num);//5
- System.out.println("Test的属性num:"+Test.this.num);//5
- System.out.println("Test的属性num:"+cn.zyx.test.Test.this.num); //5
- }
- }
- class TestMain{
- public static void main(String[] args){
- Test test= new Test();
- test.println();
- }
-
- }
复制代码 |