有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我们可以在java中通过临时变量调用静态方法吗

我们可以通过临时变量调用静态方法吗

有一个AA级

class AA {
    static void test() {
    }
}


class Main {
    public static void main(String[] args) {
        var  aa = AA;
        aa.test();   // Can we call static method via a  temp vairble ?
    }
}

为什么我有这个问题?因为我必须在重构工作中将所有实例调用样式修改为类静态样式。该方法以前是一个实例方法,使用局部变量调用,现在变成了一个静态方法或类。因此,我认为是否有方法只是修改变量。也许这太天真了

直接的,也许像这样,但不是正确的

Class<AA> aa = AA;
aa.test();   

我知道通过实例调用静态方法也不是一个好方法

我们知道在Java8中有一种引用函数的方法。那么,是否还有更多的元功能来引用文本类呢


共 (2) 个答案

  1. # 1 楼答案

    Can we call static method via a temp variable ?

    是的,你可以。(对编译错误进行模化!)

    但是你可能没有做你认为你正在做的事情。这是一个坏主意

    事实上,aa.test()实际上与写Variable.test()的意思完全相同。也就是说,在确定调用哪个方法和调用方法1时,aa的值及其实际类型被完全忽略

    调用其test()方法的类在编译时解析为Variable。Java不支持重写或动态调度static方法

    1-JLS声明对计算引用的表达式进行求值,但随后将丢弃结果引用


    通过实例变量调用static方法是错误的风格,应该避免

    考虑如下:

    class AA {
        static void test() {
            System.out.println("AA");
        }
    }
    
    class BB extends AA {
        static void test() {
            System.out.println("BB");
        }
    }
    
    
    class Main {
        public static void main(String[] args) {
            AA aa = new BB();
            aa.test();
        }
    }
    

    问:输出是什么

    答:输出为“AA”

  2. # 2 楼答案

    实际上,这不是从类调用静态方法的方式

    如果我们有AA级:

    class AA {
        public AA() {} 
    
        public static void test() {
            System.out.println("Test");
        }
    }
    

    我们可以这样调用测试方法:

    AA.test();
    

    不建议像这样从其实例调用静态方法:

    AA aa = new AA();
    aa.test();