我用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中空引用的静态字段
我知道静态方法是在类级别上.所以我知道我不需要创建实例来调用静态方法.但我也知道我可以调用静态方法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) 是否可以在静态方法中返回一个类?我会解释...
我有:
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.只需使用它静态方法.
这可能吗?
我已经了解到,如果我们希望调用另一个类的静态方法,那么你必须在调用静态方法时编写类名.在下面的程序中,我在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)