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

  问题及解析如下:

/**
* 加载方法不等于执行方法,初始化变量则会赋值
* 类加载顺序应为 加载静态方法-初始化静态变量-执行静态代码块
* 实例化时 先加载非静态方法-实例化非静态变量-执行构造代码块-执行构造函数
* @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. UVa 679 Dropping Balls (例题 6-6)

    传送门:https://uva.onlinejudge.org/external/6/p679.pdf 题意:在一颗结点带开关的完全二叉树上扔球,初始时开关为关闭状态,树的深度为D(1 <= D ...

  2. HDU 2544 最短路(初涉SPFA算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

  3. 【NOIP2007提高组】字符串展开

    [题外话]这道题纯粹考验耐心,某些经常调程序调到摔键盘的人可以尝试 [题外话2]除了考耐心以外完全没有什么难点 [题外话3]也许会稍微恶心一点? [题外话4]其实我是在别人军训的时候滚来更博客的简直2 ...

  4. POJ 1789 Truck History(Prim+邻接矩阵)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

  5. hdu_5858_Hard problem(数学题)

    题目链接:hdu_5858_Hard problem 题意: 让你求阴影部分面积 题解: 推推公式就行 #include<stdio.h> #include<math.h> # ...

  6. 导入excel表格的数据--->到mysql中

    01下载excel类,将Classes文件夹放入ThinkPHP\Extend\Vendor\位置 下载地址 http://phpexcel.codeplex.com/releases/view/26 ...

  7. MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决

    博客写了10篇了~有很多朋友私信问了一些问题,而且很多问题 大家问的都一样 这里说说这些常见问题的解决办法.如果大家有更好的解决办法~也希望分享出来 问题大概为这几个 一.ef4.1 codeFirs ...

  8. [ An Ac a Day ^_^ ] hdu 1003 dp

    超时还有可能是数组开小了…… #include<stdio.h> #include<iostream> #include<algorithm> #include&l ...

  9. 常量指针(const X*)和指针常量(X* const)

    const X* 类型的指针(指向常量的指针),此指针的地址是一个变量,是可以修改的:但其所指向的内容是常量,是不可以修改的. 例如: 1: char name[5] = "lisi&quo ...

  10. MC- 挂单STOP交易

    using System; using System.Drawing; using System.Linq; using PowerLanguage.Function; using ATCenterP ...