Jim*_*mmy 16 java 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)
das*_*ght 14
通过实例调用静态方法不需要实例存在.只要编译器能够确定变量的类型,它就会在评估sc表达式并丢弃结果后静态地进行等效调用:
System.out.println(SampleClass.getSumStatic(4,5));
Run Code Online (Sandbox Code Playgroud)
从Java语言规范:
第15.12.1节
❖如果表单是
Primary.NonWildTypeArgumentsopt Identifier,则方法的名称是标识符.设T为主表达式的类型.如果T是类或接口类型,则要搜索的类或接口是T,如果T是类型变量,则是T的上限.第15.12.4.1节:
- 如果涉及包含主节点的MethodInvocation的第二个制作,则有两个子句:
❖如果调用模式是静态的,则没有目标引用.计算表达式Primary,但结果将被丢弃.
| 归档时间: |
|
| 查看次数: |
745 次 |
| 最近记录: |