为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

温温酱 2022-12-07 17:13:45
比如有段程序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.} 
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

/*静态方法里面不能访问本类的非静态方法和非静态域.
原因:
静态方法和静态域属类所有.只能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改成静态域.

任选一种文法可以都通过编译,但程序可能会改变.
*/


查看完整回答
反对 回复 2022-12-10
?
不负相思意

TA贡献1777条经验 获得超10个赞

这是“对象”和“类”的区别。可以这样理解:如果一个方法或变量声明为static,那它就是属于这个“类”的,可以被这个类的所有对象使用;而如果不是static的,那么它就是属于这个类的具体某个“对象”的。
showtest方法是static的,所以它属于TestClass“类”,它不可以随便调用x,因为x不是静态的,必须隶属于某个具体的“对象”。tc就是所要的对象。

查看完整回答
反对 回复 2022-12-10
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号