Tag: 静态方法

为什么这段代码不会抛出NullPointerException

我刚刚与我的朋友讨论了使用类名调用静态方法,并尝试了这个代码,并期望它在运行时抛出NPE。但事实certificate它是dint。 我只是想了解执行顺序。 public class One { public static void method() { System.out.println(“in static one”); } } public class Two { static One o; public static void main(String[] args) { o.method(); // expected NPE here, as o is null } } 我知道静态方法应该用它们的类名调用,我甚至知道当我们用实例调用静态方法时IDE会给出编译器警告 。 但是我们也可以通过创建一个实例来调用它们,但是,我从来没有在这里创建过实例, o应该得到它的默认值null,因此调用o.method()应该在运行时抛出一个NPE,但事实并非如此。 你们能不能对这段代码中的执行顺序有所了解。

静态方法中的局部变量也是静态的吗?

我想知道如果我们在静态方法中声明它们,所有局部变量都会变为静态吗? 例如: public static void A(){ int x [] = {3,2}; changeX(x); for (int i = 0; i< x.length; i++){ System.out.println(x[i]); // this will print -1 and 1 } } private static void changeX(int[] x){ x[0] = -1; x[1] = 1; } 据我所知,Java总是按值传递,但为什么在我们进行changeX调用后X的状态发生了变化? 有人可以解释一下吗? 任何人都可以解释Java如何在内存分配方面处理静态变量? 如果我们将静态变量作为参数传递给函数会发生什么(我知道人们通常不这样做)

如何从其他活动中调用主要活动中的方法?

我想从其他活动中调用主要活动中的公共方法。 我怎样才能做到这一点? class MainActivity extends Activity { public void myMethod() {} } class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // How can I call myMethod() in MainActivity? } }

Java中的静态方法是否始终在编译时解决?

Java中的静态方法是否始终在编译时解决?

为什么实现类不能将覆盖方法定义为静态?

我很困惑为什么不允许以下内容: public interface MyInterface { MyInterface getInstance(String name); } public class MyImplementation implements MyInterface { public MyImplementation(String name) { } @Override public static MyInterface getInstance(String name) { // static is not allowed here return new MyImplementation(name) } } 我理解为什么接口中的方法不能是静态的,但为什么不能覆盖这个方法呢? 我希望所有类都实现getInstance(String name)方法,但是我目前仅限于只有在对象已经被实例化时才能调用该方法哪种方法失败了… *更新: *感谢您的回答,我现在明白了。 基本上我不应该试图使实用程序类(或工厂类)实现一个接口(或至少,不是这样)…

Java – 调用静态方法与手动内联 – 性能开销

我感兴趣的是我是否应该手动内联在一些性能敏感算法中称为100k-100万次的小方法。 首先,我认为,由于没有内联,我会产生一些开销,因为JVM必须确定是否内联此方法(甚至不能这样做)。 然而,前几天,我用静态方法的调用替换了这个手动内联代码,并看到了性能提升。 怎么可能? 这是否表明实际上没有开销,让JVM内联“意志”实际上提升了性能? 或者这很大程度上取决于平台/架构? (发生性能提升的示例是使用静态方法调用swap(int[] a, int i, int j) )替换数组交换( int t = a[i]; a[i] = a[j]; a[j] = t; )) swap(int[] a, int i, int j) 。另一个没有性能差异的例子是当我内联一个名为1000000次的10线程方法时。)

无法对非静态方法进行静态引用

到目前为止,我有以下代码: import java.util.Scanner; public class HallLanceMemoryCalculator { private double currentValue; public static int displayMenu(){ Scanner input=new Scanner(System.in); int choice=0; while(choice5){ System.out.println(“1.Add”); System.out.println(“2.Subtract”); System.out.println(“3.Multiply”); System.out.println(“4.Divide”); System.out.println(“5.Clear”); System.out.println(“What would you like to do?”); choice=input.nextInt(); } return choice; } public static double getOperand(String prompt){ Scanner input=new Scanner(System.in); System.out.println(“What is the second number?”); double secondNumber=input.nextDouble(); return secondNumber; } public […]

在类上调用静态方法?

比如说,我引用了一个具有静态方法的SomeType的Class对象。 有没有办法调用该方法无需首先实例化SomeType? 最好不要逃避强打字。 编辑:好的,我搞砸了。 interface Int{ void someMethod(); } class ImplOne implements Int{ public void someMethod() { // do something } } Class getInt(){ return ImplOne.class; } 在这种情况下,someMethod()无论如何都不能是静态的。