📜  Java程序的输出| 构造函数

📅  最后修改于: 2020-04-03 08:40:49             🧑  作者: Mango

先决条件: Java构造函数
1)以下程序的输出是什么?

class Helper
{
    private int data;
    private Helper()
    {
        data = 5;
    }
}
public class Test
{
    public static void main(String[] args)
    {
        Helper help = new Helper();
        System.out.println(help.data);
    }
}

a)编译错误
b)5
c)运行时错误
d)这些都不是
答案:(a)

说明:私有构造函数不能被用来初始化类之外的对象,因为它已不再被外部类可见。

2)以下程序的输出是什么?

public class Test implements Runnable
{
    public void run()
    {
        System.out.printf(" 线程正在运行 ");
    }
    try
    {
        public Test()
        {
            Thread.sleep(5000);
        }
    }
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }
    public static void main(String[] args)
    {
        Test obj = new Test();
        Thread thread = new Thread(obj);
        thread.start();
        System.out.printf(" GFG ");
    }
}

a)GFG线程正在运行
b)线程正在运行GFG
c)编译错误
d)Runtimer错误
答案:(c)
说明:构造函数不能包含在try/catch块内。

3)以下程序的输出是什么?

class Temp
{
    private Temp(int data)
    {
        System.out.printf(" 构造函数被调用 ");
    }
    protected static Temp create(int data)
    {
        Temp obj = new Temp(data);
        return obj;
    }
    public void myMethod()
    {
        System.out.printf(" 方法被调用 ");
    }
}
public class Test
{
    public static void main(String[] args)
    {
        Temp obj = Temp.create(20);
        obj.myMethod();
    }
}

a)构造函数被调用 方法被调用
b)编译错误
c)运行时错误
d)以上都不是
答案:(a)
说明:将构造函数标记为私有时,从某个外部类创建该类的新对象的唯一方法是使用程序中上面定义的创建新对象的方法。create()方法负责从其他一些外部类创建Temp对象。创建对象后,可以从创建对象的类中调用其方法。

4)以下程序的输出是什么?

public class Test
{
    public Test()
    {
        System.out.printf("1");
        new Test(10);
        System.out.printf("5");
    }
    public Test(int temp)
    {
        System.out.printf("2");
        new Test(10, 20);
        System.out.printf("4");
    }
    public Test(int data, int temp)
    {
        System.out.printf("3");
    }
    public static void main(String[] args)
    {
        Test obj = new Test();
    }
}

a)12345
b)编译错误
c)15
d)运行时错误
答案:(a)
说明:构造函数可以链接和重载。调用Test()时,它将创建另一个调用构造函数Test(int temp)的Test对象。

5)以下程序的输出是什么?

class Base
{
    public static String s = " 父类 ";
    public Base()
    {
        System.out.printf("1");
    }
}
public class Derived extends Base
{
    public Derived()
    {
        System.out.printf("2");
        super();
    }
    public static void main(String[] args)
    {
        Derived obj = new Derived();
        System.out.printf(s);
    }
}

a)21父类
b)父类21
c)编译错误
d)12超级类
答案:(c)
说明:对父类的构造函数调用必须是派生类的构造函数中的第一条语句。