非常简单且易错的java Demo

来源:互联网 发布:如何安装管家婆软件 编辑:程序博客网 时间:2024/05/16 00:35

1 . 以下程序可以正常运行吗:

public class NULL {    public static void haha(){        System.out.println("haha");    }    public static void main(String[] args) {        ((NULL)null).haha();    }}

能正常运行,输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。

2. 下面程序的运行结果是什么?

class HelloA {    public HelloA() {        System.out.println("HelloA");    }        { System.out.println("I'm A class"); }        static { System.out.println("static A"); }}public class HelloB extends HelloA {    public HelloB() {        System.out.println("HelloB");    }        { System.out.println("I'm B class"); }        static { System.out.println("static B"); }        public static void main(String[] args) {      new HelloB();    }}

运行结果是:

static Astatic BI'm A classHelloAI'm B classHelloB

静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序

对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。


0 0