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改成静态域.
任选一种文法可以都通过编译,但程序可能会改变.
*/

TA贡献1777条经验 获得超10个赞
这是“对象”和“类”的区别。可以这样理解:如果一个方法或变量声明为static,那它就是属于这个“类”的,可以被这个类的所有对象使用;而如果不是static的,那么它就是属于这个类的具体某个“对象”的。
showtest方法是static的,所以它属于TestClass“类”,它不可以随便调用x,因为x不是静态的,必须隶属于某个具体的“对象”。tc就是所要的对象。
添加回答
举报