A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© harborbest 中级黑马   /  2013-4-28 14:33  /  1512 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 harborbest 于 2013-4-30 10:47 编辑
  1. public class Null {

  2. public static void greet() {
  3. System.out.println("Hello World");
  4. }

  5. @SuppressWarnings("static-access")
  6. public static void main(String[] args) {
  7. ((Null) null).greet();
  8. }

  9. }
复制代码
请说出理由!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
运次该程序,打印出的结果为:
   
由于Null.greet是一个静态方法,而在静态方法的调用中,
表达式的值所引用的对象的运行期类型在确定哪一个方法将被调用时并不起任何作用,
如果对象有标识的话,其标识也不起任何作用。
在上面的代码中,没有任何对象,但是这并不会造成任何区别。
静态方法调用的限定表达式是可以计算的,但是它的值将被忽略。
没有任何要求其值为非空的限制。
上面的代码就不会抛出NullPointerExceptioin异常。{:soso_e152:}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
结果输出 Hello World
有static 和没有static修饰方法或者变量,在加载的时候先后顺序是不一样的。一个非static的变量可以调用static的变量或者方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
有什么 惊喜啊
回复 使用道具 举报
null本身不是对象,也不是Objcet的实例null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例
回复 使用道具 举报
可以用以下代码验证
    if (null instanceof java.lang.Object) {
    System.out.println("null 属于java.lang.Object类型");
}
else {
    System.out.println("null不属于 java.lang.Object类型");
}
结果会输出:null不属于java.lang.Object类型

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-29 23:58:21
7#
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
有点意思......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马