代码如下:

  1. java笔试题public class Mapplication {
  2. private static int n;
  3. private static Mapplication m1 = new Mapplication("m1");
  4. private static Mapplication m2 = new Mapplication("m2");
  5.  
  6. private static int i = print("i");
  7.  
  8. private int j = print("j");
  9.  
  10. {
  11. print("控制块");
  12. }
  13.  
  14. static{
  15. print("静态块");
  16. }
  17.  
  18. public Mapplication(String s){
  19. System.out.println(s+""+"i="+i+" n="+n);
  20. i++;
  21. n++;
  22. }
  23.  
  24. public static int print(String s){
  25. System.out.println(s+""+"i="+i+" n="+n);
  26. n++;
  27. return ++i;
  28. }
  29.  
  30. public static void main(String[] args) {
  31. Mapplication m = new Mapplication("init");
  32. }
  33. }

程序执行结果如下:

  1. java笔试题结果j i=0 n=0
  2. 控制块 i=1 n=1
  3. m1 i=2 n=2
  4. j i=3 n=3
  5. 控制块 i=4 n=4
  6. m2 i=5 n=5
  7. i i=6 n=6
  8. 静态块 i=7 n=7
  9. j i=8 n=8
  10. 控制块 i=9 n=9
  11. 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文件后,会转换成类似下面的代码:

  1. 个人理解public class Mapplication {
  2. private static int n;
  3. private static Mapplication m1 = new Mapplication("m1");
  4. private static Mapplication m2 = new Mapplication("m2");
  5. private static int i = print("i");
  6. static{
  7. print("静态块");
  8. }
  9.  
  10. public Mapplication(String s){
  11.  
  12. private int j = print("j");
  13.  
  14. {
  15. print("控制块");
  16. }
  17.  
  18. System.out.println(s+""+"i="+i+" n="+n);
  19. i++;
  20. n++;
  21. }
  22.  
  23. public static int print(String s){
  24. System.out.println(s+""+"i="+i+" n="+n);
  25. n++;
  26. return ++i;
  27. }
  28.  
  29. public static void main(String[] args) {
  30. Mapplication m = new Mapplication("init");
  31. }
  32. }

首先: 初始化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 类初始化 成员初始化的笔试题的解析的更多相关文章

  1. Java类的成员初始化顺序

    Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...

  2. java类的成员初始化顺序和初始化块知识

    java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...

  3. Java 类的成员初始化顺序

    做个简单笔录,就当是重温下基础知识. 1.先看代码: package com.test; public class Test { public static void main(String[] ar ...

  4. Java中的成员初始化顺序和内存分配过程

    Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...

  5. Java类和对象初始化

    类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...

  6. C++类的成员初始化

    C++类的成员初始化 学到一个类的成员初始化,目前已知的用途是给类内部的const类型变量进行赋值. 首先,如果像这么干,编译器会报错. class MyClass{ public: Myclass( ...

  7. Java类及成员

    Java类及成员 类 类是对一类事物的的描述,是抽象的概念上的定义:类是创建对象的模板: public class TestClass { public static void main(String ...

  8. java类中成员的初始化顺序(一)

    类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 ...

  9. C#类的成员初始化顺序

    首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program {     static void Main(string[] args)     {         Driv ...

随机推荐

  1. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  2. python列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  3. [原]Water Water Union-Find Set &amp; Min-Spanning Tree Problems&#39; Set~Orz【updating...】

    [HDU] 1213 - How Many Tables [基础并查集,求父节点个数] 1856 -More is better [基础并查集,注意内存,HDU数据水了,不用离散化,注意路径压缩的方式 ...

  4. poj-3616 Milking Time (区间dp)

    http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...

  5. Unix/Linux 关机命令

    关机命令 AIX shutdown now Solaris init 5 Redhat shutdown now Centos shutdown now

  6. uDig 简介

    uDig是一个 open source (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和GeoTools(一个开源的Java GIS工具包)上的桌面GIS(地理信息系统) ...

  7. cocos2d-x 开启深度测试验 实现 遮挡

    CCDirector::sharedDirector()->setDepthTest(true); spr->setVertexZ(xxx);

  8. LA 3983 Robotruck

    这道题感觉挺吃力的,还用到了我不熟悉的优先队列 题目中的推导也都看明白了,总之以后还要多体会才是 这里用优先对列的原因就是因为要维护一个滑动区间的最小值,比如在区间里2在1的前面,2在离开这个滑动区间 ...

  9. Python [Leetcode 141]Linked List Cycle

    题目描述: Given a linked list, determine if it has a cycle in it. 解题思路: 快的指针和慢的指针 代码如下: # Definition for ...

  10. js判断是否是pc

    //判断是否是pc function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("An ...