且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

一道 Java 面试题分析 | 学习笔记

更新时间:2022-06-26 14:46:53

开发者学堂课程【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 代码块一定也优先于构造方法执行;

在子类对象实例化的时候一定会默认先去指定父类中的构造方法;程序的执行是由父到子的顺序来完成的

 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 测试的时候往往会使用到,另外对于面试而言,这些基本的概念必须非常扎实。