当前位置: 首页 > 面试题库 >

为什么我没有得到NullPointerException?

段干麒
2023-03-14
问题内容

我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如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
    }
}

问题答案:

通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估sc表达式并丢弃结果后静态进行等效调用:

System.out.println(SampleClass.getSumStatic(4,5));

根据Java语言规范:

第15.12.1节

❖如果格式为Primary.NonWildTypeArgumentsopt Identifier,则方法的名称为标识符。令T为主要表达式的类型。如果T为类或接口类型,则要搜索的类或接口为T;如果T为类型变量,则为T的上限。

第15.12.4.1节:

  1. 如果涉及MethodInvocation的第二个生成,其中包括一个Primary,则有两个子情况:

❖如果调用模式是静态的,则没有目标引用。对表达式Primary求值,但是结果将被丢弃。



 类似资料:
  • 问题内容: 我正在编写一个简单的项目,一个使用Swing编写的业务应用程序,它使用Hibernate作为后端。我来自Spring,这为我提供了使用hibernate和事务的简便方法。无论如何,我设法让Hibernate工作。昨天,在编写一些代码从数据库中删除bean的同时,我得到了以下信息: 删除代码很简单: 我的是: 其他详细信息:仅在关闭应用程序时,我才会在代码中关闭hibernate会话。这

  • 我正在尝试获取href的值,因为我需要在查询字符串中传递一个变量 我必须打开一个弹出窗口,其中“MySecondPage”应该以查询字符串中的值打开,但这个.href返回空值,我不知道为什么它不能工作,就像它在itemtemplate(gridview)中工作一样,我使用了table并用angularJS Repeat。 这是我的弹出功能:

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 我有一个arraylist,其中添加了以下数字。 然后我使用下面的代码遍历列表并在打印前求和。 它正在打印出一个值6。有人知道发生了什么吗?或者有人能解释我在这里做错了什么吗?感谢您的时间,如果有什么我可以补充澄清的,请不要犹豫。

  • 我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件