心有法竹
/*静态方法里面不能访问本类的非静态方法和非静态域.原因:静态方法和静态域属类所有.只能ClassName.XXX这样访问.例如:*/class Dog{public final static String PHYLUM="Vertebrate";private int age=0;pvivate String masterName="";public static void bark(){System.out.println("旺旺旺");}public void showAge(){System.out.println("Age:"+this.getAge());}public void setAge(int age){this.age=age;}public int getAge(){return this.age;}public void setMasterName(String masterName){this.masterName=masterName;}public String getMasterName(){return this.masterName;}}Dog dog1=new Dog();dog1.setAge(5);dog1.setMasterName("chinarensp");/*所有的狗都属脊椎动物门,用static."Dog.PHYLUM"获取Dog所属的门狗所属的脊椎动物门不可能改变,用final;而每只狗都有属于自己的年龄,如5岁,10岁等.只有实例化后,有些属性(非静态域)才有意义,如年龄,主人名字等.1.public class TestClass{ 2. int x;3. int y;4. static void showtest(TestClass tc){5. System.out.println(tc.x+" "+tc.y);6. }7. void seeit(){8. showtest(this);9. }10. public static void main(String[] args){11. TestClass p=new TestClass();12. p.x=9;13. p.y=10;14. p.seeit();15. }16.} 如果把第5行tc.删掉. 就变成访问第2,3行的x,y;showtest是静态文法,而第2,3行的x,y不是静态的.因此不能访问.把第5行tc.删掉的解决方法:1.把showtest改成非静态方法.2.而第2,3行的x,y改成静态域.任选一种文法可以都通过编译,但程序可能会改变.*/