Java基础问题:为什么Java里的静态方法没办法调用动态方法和变量?

时间:2023-01-22 19:29:29
为什么Java里的静态方法没办法调用动态方法?
是不是因为静态方法和动态方法在内存中的位置不一样,静态方法的地址空间在加载类的时候就确定,而动态方法的地址空间在生成类实例的时候确定?如果真是这样的话,在定义方法是静态还是动态的时候该如何做抉择,两者的优缺点是什么?

8 个解决方案

#1


静态方法不需要实例,如果调用实例方法?

#2


同意楼上,静态方法实际上就是全局函数拉,他没有instance跟他关联的,那么他怎么去调用某个对象的动态方法呢,他们的区别主要就在于全局和局部函数的概念拉。

#3


静态时,一般通过 类名引用, 动态可以通过类实例化引用

#4


如果你想实现通用的功能性的方法,考虑采用静态方法:如Math类里的方法。
但如果你所有的类都是用静态方法,那你的程序就不会体现OO的思想了。

#5


静态方法又叫类方法。
但是不是kingofhawks说的:“区别主要就在于全局和局部函数的概念拉”
全局与局部的问题是封装的问题,说穿了就是private public portect 的问题

而静态、动态的问题是内存装载的问题,说穿了就是static的问题

学过c吗?原理一样的。但是也不能说静态方法没办法调用动态方法,看下面的例子。

public class A{
    /**这是一个非静态方法
    */
    public void method1(){

    }

    /**这是一个静态方法
    */
    public static void method2(){
        A myA = new A();
        myA.method1();//调用
    }
}

#6


静态方法属于类,普通方法属于对象

#7


反过来可以,这样想应该比较容易想的通

#8


因为表态的不需要实例化就可以用
而动态的是必须通过实例化对象以后,用对象去调用

#1


静态方法不需要实例,如果调用实例方法?

#2


同意楼上,静态方法实际上就是全局函数拉,他没有instance跟他关联的,那么他怎么去调用某个对象的动态方法呢,他们的区别主要就在于全局和局部函数的概念拉。

#3


静态时,一般通过 类名引用, 动态可以通过类实例化引用

#4


如果你想实现通用的功能性的方法,考虑采用静态方法:如Math类里的方法。
但如果你所有的类都是用静态方法,那你的程序就不会体现OO的思想了。

#5


静态方法又叫类方法。
但是不是kingofhawks说的:“区别主要就在于全局和局部函数的概念拉”
全局与局部的问题是封装的问题,说穿了就是private public portect 的问题

而静态、动态的问题是内存装载的问题,说穿了就是static的问题

学过c吗?原理一样的。但是也不能说静态方法没办法调用动态方法,看下面的例子。

public class A{
    /**这是一个非静态方法
    */
    public void method1(){

    }

    /**这是一个静态方法
    */
    public static void method2(){
        A myA = new A();
        myA.method1();//调用
    }
}

#6


静态方法属于类,普通方法属于对象

#7


反过来可以,这样想应该比较容易想的通

#8


因为表态的不需要实例化就可以用
而动态的是必须通过实例化对象以后,用对象去调用