天梯180420

天梯180420

1. 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

package NowCoder;

class Test {

    public static void hello() {

        System.out.println("hello");

    }

}

public class MyApplication {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Test test=null;

        test.hello();

    }

}

A. 能编译通过,并正确运行

B. 因为使用了未初始化的变量,所以不能编译通过

C. 以错误的方式访问了静态方法

D. 能编译通过,但因变量为null,不能正常运行

 

2. 下面程序的输出是什么?

package algorithms.com.guan.javajicu;

public class TestDemo

{

    public static String output = ””;

    public static void foo(inti)

    {

        try

        {

            if (i == 1)

            {

                throw new Exception();

            }

        }

        catch (Exception e)

        {

            output += 2;

            return ;

        } finally

        {

            output += 3;

        }

        output += 4;

    }

    public static void main(String[] args)

    {

        foo(0);

        foo(1);

        System.out.println(output);

    }

}

A. 342

B. 3423

C. 34234

D. 323

 

3. Test.main() 函数执行后的输出是()

 

 

A. 11 17 34

B. 22 74 74

C. 6 7 7

D. 22 34 17

 

4. TextField 的事件监听器接口是()

A. ActionListener

B. ChangeListener

C. ItemListener

D. WindowListener

5. What will be printed when you execute the following code?

class C {

    C() {

        System.out.print("C");

    }

}

class A {

    C c = new C();

    A() {

        this("A");

        System.out.print("A");

    }

    A(String s) {

        System.out.print(s);

    }

}

class Test extends A {

    Test() {

        super("B");

        System.out.print("B");

    }

    public static void main(String[] args) {

        new Test();

    }

}

A. BB

B. CBB

C. BAB

D. None of the above

 

 

 

// --------------------------分割线-------------------------

A

B

D

A

B

 

 

 

答案解析:

1.

A就相当于Test.hello()

类方法不依附与对象。所以可以正常运行

2.

finally是无论是否抛出异常必定执行的语句.

执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += 2;

前面说过finally是必执行的,即使return也会执行output += 3

由于catch代码块中有return语句,最后一个output += 4”不会执行。

3.

这道题主要搞清两个点:1. super()构造器中调用的方法会执行子类覆写的;2.trycatch中有return value的会先将value存储起来 执行完finally中的代码后 再return value finally中改变value无影响)

具体过程:

new B()

执行B的构造函数,第一行是super(5);

此时执行的是A的构造函数,A的构造函数调用的是setValue()方法,由于B重写了A的这个方法,

所以!!!执行的是BsetValue()方法。

即传入的参数是2*5=10

此时,因为super,所以调用的是父类的 setValue()方法,即value=10

第一行执行完毕。

第二行是 setValue(getValue()-3);

B没有getValue()方法,故执行父类的此方法,

try返回的是value=10+1=11,保存在临时栈中

finally中调用this的方法,这个this指的是B的对象,又重写,故就是BsetValue()方法

value=2*11=22,第一个打印到屏幕上的数字

接下来参数 getValue()-3=11-3=8

传入BsetValue()方法

此时value=2*8=16

至此,new B()执行结束

new B(). getValue()

B没有 getValue(),故执行AgetValue()

try返回16+1=17,保存到临时栈中

finally调用BsetValue()方法

value=17*2=34,第二个打印到屏幕上面的数字

最后主函数打印返回值,也就是try保存到临时栈的17

4.

5.

考验 类的初始化顺序问题。

1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;

2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;

3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;

4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值