相关疑难解决方法(0)

为什么在null引用上调用(静态)方法不会抛出NullPointerException?

我用Java编写了这个程序

public class Why {

  public static void test() {
    System.out.println("Passed");
  }

  public static void main(String[] args) {
    Why NULL = null;
    NULL.test();
  }

}
Run Code Online (Sandbox Code Playgroud)

我读到调用一个null对象的方法导致NullPointerException,但上面的程序没有?为什么是这样?我不正确地理解某事吗?

java null static nullpointerexception

49
推荐指数
1
解决办法
9709
查看次数

为什么我没有得到NullPointerException?

可能重复:
Java中空引用的静态字段

我知道静态方法是在类级别上.所以我知道我不需要创建实例来调用静态方法.但我也知道我可以调用静态方法LIKE一个实例方法.这是我感到困惑的地方,因为我期待NullPointerException从null对象调用静态方法(如在调用实例方法中).我真的很感激为什么我错在NullPointerException这里期待一些解释.

以下是示例代码:

public class SampleClass {

    public static int getSumStatic(int x, int y){
        return x+y;
    }

    public int getDifferenceInstance(int x, int y){
        return x-y;
    }
}

public class TestClass {

    public static void main (String[] args){        
    SampleClass sc=null;

    System.out.println(SampleClass.getSumStatic(2, 2)); //as expected

    //I was expecting NullPointerException in the next line, since I am accessing null object
    System.out.println(sc.getSumStatic(4,5)); //static method , executes perfectly  

    System.out.println(sc.getDifferenceInstance(6,4));//throws NullPointerException
    }
}
Run Code Online (Sandbox Code Playgroud)

java nullpointerexception

16
推荐指数
1
解决办法
745
查看次数

Java:返回类(不是实例)

是否可以在静态方法中返回一个类?我会解释...

我有:

public class A { public static void blah(){} }
public class B { }
Run Code Online (Sandbox Code Playgroud)

我想在B女巫回归中创建一个静态方法A.所以你可以这样做:

A.blah();
Run Code Online (Sandbox Code Playgroud)

B.getA().blah();
Run Code Online (Sandbox Code Playgroud)

这样,无需创建实例A.只需使用它静态方法.

这可能吗?

java static class-design return-value

11
推荐指数
3
解决办法
3万
查看次数

通过对象实例访问静态方法

我已经了解到,如果我们希望调用另一个类的静态方法,那么你必须在调用静态方法时编写类名.在下面的程序中,我在Employee_Impl类中创建了Employee类的对象,并使用该对象,我仍然可以访问该count方法.count如果static只使用类名访问方法,为什么它允许我在对象中使用方法?这是否意味着可以使用对象和类名来访问静态方法?

Employee.java

public class Employee{
    static int counter = 0;
    static int count(){
        counter++;
        return counter;
    }
}
Run Code Online (Sandbox Code Playgroud)

Employee_Impl.java

class Employee_Impl
    public static void main(String args[]){
        Employee obj = new Employee();
        System.out.println(obj.count());
        System.out.println(Employee.count());
        System.out.println(obj.count());        
    }
}
Run Code Online (Sandbox Code Playgroud)

output

1
2
3
Run Code Online (Sandbox Code Playgroud)

java static-methods

3
推荐指数
2
解决办法
1287
查看次数