文档章节

java类初始化顺序-阿里笔试题

一缕清风
 一缕清风
发布于 2016/07/12 18:38
字数 549
阅读 10
收藏 0

原文链接

阿里笔试题之写出程序输出结果:

[java]  view plain copy
  1. package com.patrick.bishi;  
  2.   
  3. public class TestVar {  
  4.     public static int k = 0;  
  5.     public static TestVar t1 = new TestVar("t1");  
  6.     public static TestVar t2 = new TestVar("t2");  
  7.     public static int i = print("i");  
  8.     public static int n = 99;  
  9.     public int j = print("j");  
  10.     {  
  11.         print("构造");  
  12.     }  
  13.     static {  
  14.         print("静态");  
  15.     }  
  16.   
  17.     public TestVar(String str) {  
  18.         System.out.println((++k) + ":" + str + "    i=" + i + " n=" + n);  
  19.         ++i;  
  20.         ++n;  
  21.     }  
  22.   
  23.     public static int print(String str) {  
  24.         System.out.println((++k) + ":" + str + "    i=" + i + " n=" + n);  
  25.         ++n;  
  26.         return ++i;  
  27.     }  
  28.   
  29.     public static void main(String[] args) {  
  30.         TestVar t = new TestVar("init");  
  31.     }  
  32. }  
结果:

[java]  view plain copy
  1. 1:j i=0 n=0  
  2. 2:构造    i=1 n=1  
  3. 3:t1    i=2 n=2  
  4. 4:j i=3 n=3  
  5. 5:构造    i=4 n=4  
  6. 6:t2    i=5 n=5  
  7. 7:i i=6 n=6  
  8. 8:静态    i=7 n=99  
  9. 9:j i=8 n=100  
  10. 10:构造   i=9 n=101  
  11. 11:init i=10    n=102  

分析:

        初始化一个类(main方法执行之前),主要是对静态成员变量的初始化,过程分为两步:1)按照静态成员变量的定义顺序在类内部声明成员变量;2)按类中成员变量的初始化顺序初始化。

        本例中,先声明成员变量k,t1,t2,i,n,此时,k=i=n=0;t1=t2=null,然后按顺序初始化这几个成员变量,k复制0,t1初始化,执行构造函数,构造函数执行需要先对对象的成员属性先进行初始化,因此执行 j 的初始化,再执行对象的代码块,再是构造函数本身,同理t2初始化,接下来再是 i 和  n 的初始化,然后到main方法中的对象 t 的初始化,对象的初始化同理t1的初始化。

参考http://www.cnblogs.com/lmtoo/archive/2012/04/08/2437918.html,得到此例转换成class的类似代码:

[java]  view plain copy
  1. package com.patrick.bishi;  
  2.   
  3. public class TestVarClass {  
  4.   
  5.     public static int k = 0;  
  6.     public static TestVarClass t1 = null;  
  7.     public static TestVarClass t2 = null;  
  8.     public static int i = 0;  
  9.     public static int n = 0;  
  10.     static {  
  11.         k = 0;  
  12.         t1 = new TestVarClass("t1");  
  13.         t2 = new TestVarClass("t2");  
  14.         i = print("i");  
  15.         n = 99;  
  16.         print("静态");  
  17.     }  
  18.   
  19.     int j = 0;  
  20.   
  21.     public TestVarClass(String str) {  
  22.         j = 0;  
  23.         {  
  24.             j = print("j");  
  25.             print("构造");  
  26.         }  
  27.         System.out.println((++k) + ":" + str + "    i=" + i + " n=" + n);  
  28.         ++i;  
  29.         ++n;  
  30.     }  
  31.   
  32.     public static int print(String str) {  
  33.         System.out.println((++k) + ":" + str + "    i=" + i + " n=" + n);  
  34.         ++n;  
  35.         return ++i;  
  36.     }  
  37.   
  38.     public static void main(String[] args) {  
  39.         TestVarClass t = new TestVarClass("init");  
  40.     }  
  41.   
  42. }  

本文转载自:http://blog.csdn.net/baokx/article/details/18555219

一缕清风
粉丝 5
博文 128
码字总数 3410
作品 0
东城
私信 提问
2017阿里,百度,京东java面试+笔试大合集,2018的你会吗?

2017阿里,百度,京东java面试+笔试大合集 1、阿里 面试(一二面合集) 1、介绍一下你自己。 2、介绍一下你认为做的最好的一个项目。 3、请用五分钟的时间把你做的项目的流程图画一下。 4、项...

Java小铺
2018/09/14
169
0
(已拿offer)腾讯实习生笔试到面试总结(附带华为阿里面试经历)

导读:快到暑假了,有不少读者还是学生,想找一份实习,好的公司,只能说是好的起点,不能代表全部。公司强大,不代表个人一定强大,小公司同样也有大牛,不羡慕,不虚浮,脚踏实地,今天,分...

我最喜欢三大框架
06/12
11
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? 题目解析:这道题主要考察的是java面向对象...

一看就喷亏的小猿
04/21
26
0
面试季,Java中的static关键字解析

点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识...

方志朋
03/10
0
0
让人疑惑的Java代码,竟成大多公司面试题热门

小编今天给大家看的这个笔试题 当年可是火遍大江南北 不妨你先看看到底会不会 这是关于一段令人疑惑的Java代码 下面我们来看一下Java代码 执行一下:会是什么呢 一个是true,一个是false,这...

OSC_Lucy
2017/07/11
4.8K
16

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
696
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
74
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
73
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部