黑马程序员技术交流社区

标题: 看程序写结果!很有意思哦! [打印本页]

作者: harborbest    时间: 2013-4-28 14:33
标题: 看程序写结果!很有意思哦!
本帖最后由 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. }
复制代码
请说出理由!

作者: java冬冬    时间: 2013-4-28 15:07
运次该程序,打印出的结果为:
   
由于Null.greet是一个静态方法,而在静态方法的调用中,
表达式的值所引用的对象的运行期类型在确定哪一个方法将被调用时并不起任何作用,
如果对象有标识的话,其标识也不起任何作用。
在上面的代码中,没有任何对象,但是这并不会造成任何区别。
静态方法调用的限定表达式是可以计算的,但是它的值将被忽略。
没有任何要求其值为非空的限制。
上面的代码就不会抛出NullPointerExceptioin异常。{:soso_e152:}
作者: chihkitou    时间: 2013-4-28 15:37
结果输出 Hello World
有static 和没有static修饰方法或者变量,在加载的时候先后顺序是不一样的。一个非static的变量可以调用static的变量或者方法。
作者: 刘胜寒    时间: 2013-4-28 16:45
有什么 惊喜啊

作者: 金辉    时间: 2013-4-28 18:27
null本身不是对象,也不是Objcet的实例null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例
作者: 金辉    时间: 2013-4-28 18:29
可以用以下代码验证
    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类型
作者: 黄玉昆    时间: 2013-4-29 23:58
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 符立波    时间: 2013-4-30 10:50
有点意思......




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2