如果把第5行tc.删掉,不管程序如何,首先编译就会出错,然后再去掉static的话,编译又通过了?

比如有段程序
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.} 

温温酱
浏览 94回答 2
2回答

心有法竹

/*静态方法里面不能访问本类的非静态方法和非静态域.原因:静态方法和静态域属类所有.只能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改成静态域.任选一种文法可以都通过编译,但程序可能会改变.*/

不负相思意

这是“对象”和“类”的区别。可以这样理解:如果一个方法或变量声明为static,那它就是属于这个“类”的,可以被这个类的所有对象使用;而如果不是static的,那么它就是属于这个类的具体某个“对象”的。showtest方法是static的,所以它属于TestClass“类”,它不可以随便调用x,因为x不是静态的,必须隶属于某个具体的“对象”。tc就是所要的对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java