Java笔试题总结1

JAVA笔试题
1、静态语句块、构造语句块和构造函数的执行顺序
静态语句块:在类加载的时候执行(从父类到子类)
静态语句块执行完,执行main方法
new对象,从上到下先执行构造代码块在执行构造器

package com.***.subject;

public class HelloA {
    public HelloA()
    {
        System.out.println("hello A");
    }
    {
        System.out.println("I'm A class");
    }
    static
    {
        System.out.println("static A");
    }
}

public class HelloB extends HelloA{

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

2、初始化顺序
当程序执行时,需要生成某个类的对象,java会检查是否加载了这个类,如果没有,则先执行类的加载在生成对象,如果已经加载则直接生成对象。

在类加载过程中

  • static变量和static代码快会按代码顺序加载。
  • 然后,其他变量和构造代码块会按顺序加载
  • 最后执行构造函数。
public class TestExtends{
    public static void main(String[] args){
        new Circle();
    }
}

class Draw{
    public Draw(String type){
        System.out.println(type + "1");
    }
}

class Shape{
    private Draw draw = new Draw("shape");
    {
        System.out.println("shape constructor block");
    }


    static
    {
        System.out.println("shape static block");
    }
    public Shape()
    {
        System.out.println("2");
    }
}

class Circle extends Shape
{
    private Draw draw = new Draw("circle");
    public Circle()
    {
        System.out.println("3");
    }
}

//输出为:
//shape static block
//shape1
//shape constructor block
//2
//circle1
//3

你可能感兴趣的:(Java笔试题总结1)