一道关于java 类初始化 成员初始化的笔试题的解析
代码如下:

java笔试题public class Mapplication {
private static int n;
private static Mapplication m1 = new Mapplication("m1");
private static Mapplication m2 = new Mapplication("m2");
private static int i = print("i");
private int j = print("j");
{
print("控制块");
}
static{
print("静态块");
}
public Mapplication(String s){
System.out.println(s+""+"i="+i+" n="+n);
i++;
n++;
}
public static int print(String s){
System.out.println(s+""+"i="+i+" n="+n);
n++;
return ++i;
}
public static void main(String[] args) {
Mapplication m = new Mapplication("init");
}
}
程序执行结果如下:

java笔试题结果j i=0 n=0
控制块 i=1 n=1
m1 i=2 n=2
j i=3 n=3
控制块 i=4 n=4
m2 i=5 n=5
i i=6 n=6
静态块 i=7 n=7
j i=8 n=8
控制块 i=9 n=9
init i=10 n=10
此笔试题考查:
JAVA的静态变量、静态方法、静态类
关于这个知识点参考如下博文:
1、JAVA的静态变量、静态方法、静态类,
http://blog.csdn.net/zhandoushi1982/article/details/8453522
2、Java类变量和成员变量初始化过程,
http://www.cnblogs.com/lmtoo/archive/2012/04/08/2437918.html
那么分析程序可知:
静态都是用来修饰类的内部成员的。比如静态方法、静态成员变量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。
编译器转换成class文件后,会转换成类似下面的代码:

个人理解public class Mapplication {
private static int n;
private static Mapplication m1 = new Mapplication("m1");
private static Mapplication m2 = new Mapplication("m2");
private static int i = print("i");
static{
print("静态块");
}
public Mapplication(String s){
private int j = print("j");
{
print("控制块");
}
System.out.println(s+""+"i="+i+" n="+n);
i++;
n++;
}
public static int print(String s){
System.out.println(s+""+"i="+i+" n="+n);
n++;
return ++i;
}
public static void main(String[] args) {
Mapplication m = new Mapplication("init");
}
}
首先: 初始化n=0;
初始化m1, 打印 j i=0 n=0 打印 控制块 i=1 n=1 打印 m1 i=2 n=2
初始化m2, 打印 j i=3 n=3 打印 控制块 i=4 n=4 打印 m2 i=5 n=5
初始化i,打印 i i=6 n=6
初始化 静态块, 打印 静态块 i=7 n=7
静态部分初始化结束,开始执行main函数中m对象的实例化,
初始化m,打印 j i=8 n=8 打印 控制块 i=9 n=9 打印 init i=10 n=10
黑体部分即为 程序输出结果。
注:作者有限,文中若有不对之处,请批评指正。
一道关于java 类初始化 成员初始化的笔试题的解析的更多相关文章
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...
- java类的成员初始化顺序和初始化块知识
java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...
- Java 类的成员初始化顺序
做个简单笔录,就当是重温下基础知识. 1.先看代码: package com.test; public class Test { public static void main(String[] ar ...
- Java中的成员初始化顺序和内存分配过程
Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...
- Java类和对象初始化
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...
- C++类的成员初始化
C++类的成员初始化 学到一个类的成员初始化,目前已知的用途是给类内部的const类型变量进行赋值. 首先,如果像这么干,编译器会报错. class MyClass{ public: Myclass( ...
- Java类及成员
Java类及成员 类 类是对一类事物的的描述,是抽象的概念上的定义:类是创建对象的模板: public class TestClass { public static void main(String ...
- java类中成员的初始化顺序(一)
类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 ...
- C#类的成员初始化顺序
首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program { static void Main(string[] args) { Driv ...
随机推荐
- Sass&Compass学习笔记(一)
1.sass中可以使用变量 变量名以$符号开头,可包含所有可用作CSS类名的字符,包括下划线和中划线. 可见,中划线也是可以作为命名的字符,这是与很多其他语言的不同之处.变量的使用实例: $compa ...
- 如何通过session控制单点登录
web服务器为每一个浏览器实例对应一个session.这个session有自己的一个独立id,这个id保存在浏览器的cookie中(这个cookie貌似随着这个浏览器实例的关闭而清除),访问web服务 ...
- DHT11温湿度传感器
一.硬件介绍 RH是相对湿度,是用零点温度来定义的,一般,RH在45%~65%之间最为合适. 注:NTC为热敏电阻,输出为:单总线数字信号,单线双向串行通讯. 注:上拉电阻情况下,配置为开漏输出,可以 ...
- js与flash结合使用
最近,做个了一个falsh和js 通信的小东西. flash负责接收参数和返回结果.js负责处理信息,接收返回结果,将结果返回到服务器端. 听着很复杂,做起来页面还是很简单的.用的技术还是不少的,fl ...
- Objective-C 类的继承、方法的重写和重载
一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序.Objec ...
- 单点登录系统构建之二——SSO原理及CAS架构
基本概念 SSO(Single Sign On)单点登录,是在多个应用系统中,用户只需要登录一次就能访问所有相互信任的应用系统.它包括将这次的主要登录映射到其他应用中用户同一个用户的登录机制. SSO ...
- R语言AMORE包实现BP神经网络——German数据集
library(AMORE)data<-read.table('G:\\dataguru\\ML\\ML09\\基于BP网络的个人信贷信用评估\\基于BP网络的个人信贷信用评估\\german. ...
- 【第三篇】说说javascript处理时间戳
在做datagrid的时候,从数据库读出来的数据是/Date(1437705873240)/大概是这种形式,这个就是时间戳 我们需要把/Data和/去掉,才可以转成我们要的格式. 上代码 { fiel ...
- UVa 129 Krypton Factor【回溯】
学习的紫书的回溯,理解起来还是好困难的说啊= = #include<iostream> #include<cstdio> #include<cstring> #in ...
- VC++菜单
2.1 如何动态添加和删除菜单项 AppendMenu InsertMenu DeleteMenu ////////////////////////////////////////////////// ...