问以下程序打印出什么内容:

  问题及解析如下:

/**
* 加载方法不等于执行方法,初始化变量则会赋值
* 类加载顺序应为 加载静态方法-初始化静态变量-执行静态代码块
* 实例化时 先加载非静态方法-实例化非静态变量-执行构造代码块-执行构造函数
* @author panteng
*
*/
public class StaticTest {
/**第一个加载*/
public static int k = 0;
/**第二个加载,因为是new一个实例,
* 首先初始化j 打印出 1:j i=0 n=0
* 执行构造块 打印出 2:构造快 i=1 n=1
* 执行构造方法 打印出 3:t1 i=2 n=2
* 实例化完成
*/
public static StaticTest t1 = new StaticTest("t1");
/**第三个加载 过程同上
* 首先初始化j 打印出 4:j i=3 n=3
* 执行构造块 打印出 5:构造快 i=4 n=4
* 执行构造方法 打印出 6:t2 i=5 n=5
*/
public static StaticTest t2 = new StaticTest("t2");
/**第四个加载
* 打印出 7:i i=6 n=6
*/
public static int i = print("i");
/**
* 第五个加载
*/
public static int n = 99;
/**
* 此变量在类加载的时候并不初始化,在实例化类的时候初始化
*/
public int j = print("j"); {
print("构造快");
}
/**
* 第六个加载 此时,n已经被初始化 所以打印出
* 8:静态块 i=7 n=99
*/
static{
print("静态块");
}
//-----------以上属于类加载---------------------
/**
* 实例化过程:
* 首先加载非静态方法集;
* 初始化非静态变量:9:j i=8 n=100
* 执行构造块:10:构造快 i=9 n=101
* 执行构造方法:11:init i=10 n=102
* 实例化完成
*/ /**
* 执行构造函数 实例化完成
* @param str
*/
public StaticTest(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++n;
++i;
}
/**
* 这个应该是最先加载 但是,加载不等于执行
* 因为如果不加载此函数,静态变量是无法初始化的
* @param str
* @return
*/
public static int print(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
return ++n;
} public static void main(String[] args) {
/**首先加载类,然后实例化:
* 类加载过程:
* 首先加载所有的静态方法,但不执行;
* 然后按照静态变量的顺序开始初始化
* 静态变量初始化完毕后执行静态构造块(不执行构造块)
* 此时类加载完毕
* 实例化过程:
* 加载非静态方法
* 初始化非静态变量
* 执行构造代码块
* 执行构造函数
* 此时实例化完毕
*/
StaticTest t = new StaticTest("init");
} }

Java 类的加载过程(阿里面试题)的更多相关文章

  1. Java类的加载过程-重点!!

    java类的加载过程有以下几步共同完成: 加载->连接->初始化.连接又分为验证.准备.解析 一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以 ...

  2. JAVA - 类的加载过程

    JAVA - 类的加载过程 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化. 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象 ...

  3. Java类的加载过程与ClassLoader的理解及测试

    当程序准备运行某个类,但该类还未被加载到内存中时,会经过以下三个步骤进行类的加载: 类的加载(Load)→类的连接(Link)→类的初始化(Initialize) 加载:类经过javac.exe编译的 ...

  4. java类的加载过程

    1.类的加载顺序 (1)JVM在首次加载类时会对  静态初始化块.静态成员变量. 静态方法进行一次初始化. (2)只有在调用new方法时才会创建类的实例. (3)对象创建过程: 首先执行父类(如果有) ...

  5. Java类的加载、链接和初始化

    一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...

  6. java类从加载、连接到初始化过程

    类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理解java其它机制将有重要作用. 每个类编译后产生一个Class对象,存储在.class文件中,JV ...

  7. java 反射,类的加载过程以及Classloader类加载器

    首先自定义一个类Person package reflection; public class Person { private String name; public int age; public ...

  8. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  9. JVM——类的加载过程

    附一张图方便理解,一个类的执行过程 类的加载过程,简明的来说 类装饰器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: 装载:查 ...

随机推荐

  1. 难以记住的sql语句

    天,把这篇文章转移到这里,增强一下记忆,找起来也更方便. 导出: mysqldump -u username -p password -h hname dbname tblname > file ...

  2. KMP详解之二

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

  3. 【Apache KafKa系列之一】KafKa安装部署

    kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的 ...

  4. 【LeetCode】26. Remove Duplicates from Sorted Array

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  5. 用VMware vSphere Client客户端登陆vsphere5提示错误

    客户端无法向服务器发送完整请求(基础连接已关闭:发送时发生错误) 可能原因:5.1以上的vsphere client都不支持winxp

  6. hdu_5874_Friends and Enemies(公式题)

    题目链接:hdu_5874_Friends and Enemies 题意: 有nn个人, mm种颜色的石头, 人两两之间要么是朋友, 要么是敌人. 每个人可以携带若干种石头或者不带, 要求朋友之间至少 ...

  7. Logistic Regression:银行贷款申请审批实例

    问题定义 这是一个贷款的审批问题,假设你是一个银行的贷款审批员,现在有客户需要一定额度的贷款,他们填写了个人的信息(信息在datas.txt中给出),你需要根据他们的信息,建立一个分类模型,判断是否可 ...

  8. CodeForces 605A Sorting Railway Cars 思维

    早起一水…… 题意看着和蓝桥杯B组的大题第二道貌似一个意思…… 不过还是有亮瞎双眼的超短代码…… 总的意思呢…… 就是最长增长子序列且增长差距为1的的…… 然后n-最大长度…… 这都怎么想的…… 希望 ...

  9. VS2010编译错误 LNK 2019 unresolved external symbol错误解决办法

    Link错误有很多种,主要是没有在连接中加入lib文件路径,或者lib配置正确,传参错误 一个solution里面多个project之间引用其他project函数会出现这个错误,由于包含了头文件而没处 ...

  10. updateMany

    db.tblDaily.updateMany( {"Comments.ViewCount":0}, {$addToSet:{"Comments.$.CommentDate ...