我用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) 可能重复:
如何在空引用上调用(静态)方法不会抛出NullPointerException?
Java中空引用的静态字段
我尝试了这个旧视频的代码:
class Impossible {
public static void main(String[] args) {
Thread t = null;
System.out.println(t.currentThread().getName());
}
}
Run Code Online (Sandbox Code Playgroud)
输出: main
嗯,那到底是什么?!有没有java.lang.Thread违反任何NullPointerException规则?
但是我最感兴趣的是:如何使该变量表现为抛出NullPointerException?
代码是:
interface I {
int i = 0;
void display();
}
class A implements I {
I i1;
public static void main(String[] args) {
A a = new A();
a.display();
}
public void display() {
System.out.println(i1); //1
System.out.println(i1.i); //2
}
}
Run Code Online (Sandbox Code Playgroud)
代码的输出是
null
0
Run Code Online (Sandbox Code Playgroud)
但是当地址i是null,那么在第二个i1.i如何返回一个值?如何使用null引用指向变量?
在下面的代码中,我们获得i了null引用的值,尽管a NPE不存在.
public class Test {
static int i = 10;
Test getTest() {
return null;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println(t.getTest());
System.out.println(t.getTest().i);
}
}
Run Code Online (Sandbox Code Playgroud)
产量
null
10
Run Code Online (Sandbox Code Playgroud) 我很想知道你如何解释我在这个测验中发现的这个任务?即使getFoo方法返回null,输出仍然是Getting Object JavaQuiz.我认为应该是NullPointerException.
public class Foo {
static String name = " JavaQuiz";
static Foo getFoo() {
System.out.print("Getting Object");
return null;
}
public static void main(String[] args) {
System.out.println(getFoo().name);
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
Java中空引用的静态字段
我是Java新手.我知道是否有任何对象指向,如果我们尝试对该对象执行任何操作,JVM会抛出Nullpointer异常.但在我的情况下,没有Nullpointer例外请帮助我?以下是我的代码
public class Employee
{
public static String empName = "John"
public static void main(String args[])
{
Employee emp = new Employee();
emp = null;
System.out.println(emp.empName);
}
}
Run Code Online (Sandbox Code Playgroud)
它打印John作为输出,即使emp对象是指向null.但我期待一个nullpointer异常.