博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java static 执行顺序
阅读量:5171 次
发布时间:2019-06-13

本文共 1214 字,大约阅读时间需要 4 分钟。

先加载类,然后再实例化类。

继承与static

面试题目如下:请写出程序执行完成之后的结果。

package extend;

public class X {

 Y y=new Y();
 static{
  System.out.println("tttt");
 }
 X(){
  System.out.println("X");
 }
 
 public static void main(String[] args) {
    new Z();

 }

}

class Y{

 Y(){
  System.out.println("Y");
 }
}

class Z extends X{

 Y y=new Y();
 static{
  System.out.println("tt");
 }
 Z(){
  System.out.println("Z");
 } 
}

先不告诉最后结果,我们先来分析下。一步一步推出结果。

1.首先分析一段程序的执行后的结果,我们得先找到程序的入口,然后才能着手分析。

     也就是main()方法。

2.我们发现main()方法在X类中,要执行main()方法,还得先将X类加载到内存中。

3.X类加载完成后,会做什么事情呢?别急,先来看看static的作用,不知道吧。告诉你:static就是在类被第一次加载的时候执行,以后就不再执行。

4.知道了static的作用,那么X类被加载,那么就会先执行X类的静态属性和静态语句块(static),执行先后顺序看谁在前面就先执行谁。只在此时执行,以后都不会。

5.所以一个输出结果为tttt,没问题了吧。

6.X类的static语句块执行完了,就该执行main()方法啦。

7.new Z();此方法被执行。

8.既然new Z();那么Z类就要被加载。因为Z类继承X类。所以必须先加载X类才行。因为X类已经被加载。所以此时不用再加载X类了。Z类加载好了就要执行Z类的static语句块

9.那么就会打印出tt了吧。

10.都加在完后就要实例化对象了。

11.实例化Z之前,还得先实例化X对吧。因为子类的构造方法都会调用父类的构造方法。

12.那就先实例化X类吧。

13.执行X方法前还得先初始化对不。也就是获取所有属性。那么X类的属性Y就会获取。

14.即X类的Y y=new Y();要被执行。也就是会打印Y。

15.接着执行System.out.println("X");

16.然后就是执行Z的构造方法

17.同样先获取Z的属性Y y=new Y();打印Y。

18.再执行System.out.println("Z");

整个过程就是这样了。现在知道结果了吧:

tttt

tt
Y
X
Y
Z

记住,面试有可能会标出一些语句的,让你选择这些语句的执行顺序。不过只要知道原理,就没什么难的了。

转载于:https://www.cnblogs.com/wwwfj/p/3349315.html

你可能感兴趣的文章
block
查看>>
作业三——改进目标
查看>>
【校园电子书城】测试及部署
查看>>
WAMP(Windows+Apache+Mysql+PHP)环境搭建
查看>>
golang调用c++的dll库文件
查看>>
知识点篇:7)企业标准体系制定要求
查看>>
php’s explode() 函数
查看>>
Spring AOP的实现思想之动态代理
查看>>
VSCode设置中文语言
查看>>
Kafka 几个实现细节
查看>>
UWP学习目录整理
查看>>
Centos7-安装Gradle4.10
查看>>
四则运算1
查看>>
Web API框架学习——消息管道(二)
查看>>
【转】请求处理机制其二:Django中间件的解析
查看>>
如何让Div层悬浮在Flash Object对象之上(转载)
查看>>
Visual Studio Code compile error - launch.json must be configured...
查看>>
【算法竞赛-入门经典】计算并输出1+2的值
查看>>
我们应该顶住压力
查看>>
对于大流量的网站,您采用什么样的方法来解决访问量问题?
查看>>