虚拟机从加载、编译、运行一个类的过程+异常
先看加载,再看执行,得到输出结果。
当运行一个子类程序时,JVM首先会先完成加载:
class A { public A() { System.out.println("class A"); } { System.out.println("I'm A class"); } static { System.out.println("class A static"); } } public class B extends A { public B() { System.out.println("class B"); } { System.out.println("I'm B class"); } static { System.out.println("class B static"); } public static void main(String[] args) { new B(); } }
class A static class B static I'm A class class A I'm B class class B
异常:
都是Throwable的子类:
1.Exception(异常) :是程序本身可以处理的异常。
3.检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。
以下代码执行后输出结果为( )
public
class
Test
{
public
static
Test t1 =
new
Test();
{
System.out.println(
"blockA"
);
}
static
{
System.out.println(
"blockB"
);
}
public
static
void
main(String[] args)
{
Test t2 =
new
Test();
}
}
2.因而,整体的执行顺序为
{
System.out.println("blockB"); //(2)
blockA blockB blockA
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法
发表评论: