开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:一道 Java 面试题分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/528
一道 Java 面试题分析
内容介绍
一、Java基础面试题
一、Java基础面试题
在回答本道习题的时候需要考虑到以下的几个点:
代码块:
代码块它一共分为四种代码块(普通代码块、构造块、static 代码块、同步块);。
- static 代码块优先于构造方法执行,而且优先于主方法执行;
-构造块优先于构造方法执行,所以 static 代码块一定也优先于构造方法执行;
在子类对象实例化的时候一定会默认先去指定父类中的构造方法,而后再执行子类自己的构造方法;
class A {
static {
System.out.printIn("1"");
}
public A() {
System.out.println("2");
}
}
。
class B extends A {
static {
System.out.println("A"');
}
public BO{ //
隐藏super()
System.out.println("B");
}
}
class Demo {
public static void main(String args]){
Aa=newB ( );
a= newB ( };
}
}
l- static 代码块优先于构造方法执行,而且优先于主方法执行;
|-构造块优先于构造方法执行,所以 static 代码块一定也优先于构造方法执行;
l 在子类对象实例化的时候一定会默认先去指定父类中的构造方法;程序的执行是由父到子的顺序来完成的
package com.yootk.test;
class A{
static {
system.out.println("1");
}
public A() {
system.out.println("2");
}
}
public class TestMyDemo {
public static void main(String[] args) {
Aa = new A() ; //
声明并实例化新的对象
a = new A() ; //
重新开辟新的对象
}
}
范例:存在有子类
package com. yootk.test;
class A {.
static {
system.out.println( "1");o
}
public A( ) {
system.out.println( "2");
}
}
class B extends A {
static{
system.out.println( "A");
}
public B(){
System.out.println("B");
}
}
public class TestMyDemo {
public static void main(String[] args
) {
A a = new B;//
声明并实例化新的对象
a = new A;//
重新开辟新的对象
}
}
1、语句“A a = new B() ; ll/声明并实例化新的对象”。
1→static {system.out.println( "1");}
A→static{System.out.println("A");}
2→ publicA(){System.out.println("2");}
B→ public B() {System.out.println( "B");}
2、语句“a = new B( ) ;”
2→ publicA(){System.out.println("2");}
B→ public B() iSystem.out.print1n("B"); }
实际上在开发之中代码块的确出现较少,在使用 junit 测试的时候往往会使用到,另外对于面试而言,这些基本的概念必须非常扎实。