日期:2014-05-20  浏览次数:20611 次

请问类的问题!
Java code

public class Test {
    
    Test(){
        A a = new A();
        a.get();
        A.getb();
    }
    
    private static void geta(){
        System.out.println("getA()!!!!");
    }
    [color=#FF0000]/*为什么静态的类必须为类部类?????*/[/color]
    private static class A{
        
        public void get(){
            geta();          [color=#FF0000]//非静态的调用了静态方法!!!!!!!!!![/color]
        }
        public static void getb(){
            geta();
        }
    }
    
    public static void main(String[] args){
        Test t = new Test();
    }

}




------解决方案--------------------
1,可以理解为内部类是外部类的一种特殊的成员.
2,当实例化内部类时外部类一定已经实例化.可以认为是外部类的实例调用了哪个方法.
------解决方案--------------------
第一:/*为什么静态的类必须为类部类?????*/
[为什么静态的类必须为内部类]这个意思吗?那样的话,你这句话是错误的,静态类也可以是外部类!

第二:非静态的调用静态方法是很正常的,非静态已经说明了实力化已经结束,调用静态方法是理所当然的。

------解决方案--------------------
Java code
private static class A{          //这里已经定义A为静态类了
        
        public void get(){
            geta();          [color=#FF0000]//非静态的调用了静态方法!!!!!!!!!![/color]
        }
        public static void getb(){
            geta();
        }
    }
    
    public static void main(String[] args){
        Test t = new Test();
    }

}

------解决方案--------------------
楼上的?外部类可以为static?
难道你的意思是static class class_name{}
这样好像不可以吧。。。

------解决方案--------------------
非静态的可以调用静态方法或非静态方法,而静态方法只能调用静态方法或静态变量,不能调用非静态方法或非静态变量
------解决方案--------------------
1.为什么静态的类必须为类部类?
因为静态域仅存在于类中,是在类的名字空间下的独立于类的数据块。
2.非静态的调用了静态方法?
这是可以的,但是反之静态方法内是不可以调用非静态方法的。
------解决方案--------------------
支持楼上的观点
------解决方案--------------------
1:静态类可以把它当做是一个内部"函数"来理解,类为静态类实例化后所有用到这个类的其它类都会引用到相同的类函数,也是不符合复用原则的.
2:非静态的可以调用静态方法.但是静态的函数不可以调用非静态方法.因为既然叫"非静态"方法,那么肯定是经常会变动的,如果静态函数里面调用了此方法,而静态函数针对于所有其它需要用到此静态函数的方法就不能保证其固定性和准确性了.
从另外一种角度来讲就是静态函数内存地址是固定了,非静态地址每当NEW一个类时里面的变量地址都会与另外NEW的类不同,如果静态函数需要调用非静态类里面的变量或是函数就没有办法确定需要去方法哪段内存地址,就会引起非法访问内存错误,所以JAVA在编译时就提前做也这方面的游戏规则.呵呵 ....我是这样理解的.