Java学习之神奇的初始化

原创 2004年07月06日 12:24:00
作者: yjwgeg
Friday, March 5 2004 9:50 AM

java在初始化的时候也有很多讲究,因为java中出现了类,所以在初始化的时候就有可能使用到创建新对象,所以,对于初始化的顺序要求的比较严格,请看下面一个程序,是thinking in java中的一个程序,被我稍加改编,这样可以更好的说明几个初始化的要点:

cn_336_280.swf cn_336_280.swf code;sz=1x1;ord=1430526204?

class Cup

{

       Cup(int marker)

       {

              System.out.println("Cup(" + marker + ")");

       }

       void f(int marker)

       {

              System.out.println("f(" + marker + ")");

       }

}

 

class Cups

{

       static Cup c1=new Cup(1);

       Cup c3=new Cup(3);

       static Cup c2= new Cup(2);

       Cups()

       {

              System.out.println("Cups()");

       }

       Cup c4=new Cup(4);

}

 

public class ExplicitStatic

{

       Cups c=new Cups();

       {

              System.out.println("Hello");

       }

       public static void main(String[] args)

       {

              System.out.println("Inside main()");

              Cups.c1.f(99);

              ExplicitStatic x=new ExplicitStatic();

       }

       static Cups x = new Cups();

}

大家可以手动执行一下这个程序,考虑一下结果是什么,然后参照下面的答案对照一下,看看是否正确:

 

Cup(1)

Cup(2)

Cup(3)

Cup(4)

Cups()

Inside main()

f(99)

Cup(3)

Cup(4)

Cups()

Hello

我总结了四个初始化的要点,如下:

1、              如果有static,即静态成员定义,首先初始化static的变量,如,在类Cups中c3在c2前面,可是在输出的结果中,你可以发现,c2是在c3前执行的,这就是因为,所有的static都在第一时间被初始化。

2、              Static只初始化一次,在第二次创建类的对象的时候,就不会去执行static的语句,如,在第二次执行new Cups()的时候,就只输出了Cup(3)和Cup(4),显然,static的两个创建对象的语句没有做。

3、              变量的初始化在方法前。如,在Cups类中,方法Cups()在语句Cup c4=new Cup(4)之前,可是输出结果的时候,打印的Cups()却在Cup(4)之后。

4、              在含有main的类中执行顺序是先做static,然后就是main,而不是像其它类一样,除了static就按顺序做下来。如,在main函数中,如果去掉语句ExplicitStatic x=new ExplicitStatic(),则Cups c=new Cups()和System.out.println("hello")都不会执行。另外,留个小问题,如果去掉了System.out.println("hello")外的括号会怎么样呢?

java学习之神奇初始化

  • 2010年04月23日 23:28
  • 2KB
  • 下载

NOIP2015 神奇的幻方 解题报告(水题模拟)

在线评测: http://codevs.cn/problem/4510/ 整体思路: 枚举一的位置,然后模拟就行了 失误之处: 数据<39,然后,我就把记录上一个点的数组...
  • qq_35772697
  • qq_35772697
  • 2016-08-27 13:43:51
  • 1148

一段神奇的代码

做一个优雅的程序员,好像是很多程序员的一大目标,何为优雅,如何优雅?下面是一段神奇的代码,什么编码风格,什么编程规范,统统丢到一边吧,化腐朽为神奇才是更加难能可贵的! #define M 0...
  • u011836061
  • u011836061
  • 2015-06-04 12:55:50
  • 1316

神奇算式 - 蓝桥杯(java版)

package lanqiao;/*标题:神奇算式由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。比如:210 x 6 = 1260 8 x 473 = 378427 x 81 ...
  • from_the_star
  • from_the_star
  • 2015-11-25 18:21:42
  • 1156

Python起步之eval函数

eval   功能:将字符串str当成有效的表达式来求值并返回计算结果。   语法: eval(source[, globals[, locals]]) -> value   参数:     sour...
  • m0_37338590
  • m0_37338590
  • 2017-07-19 12:20:46
  • 104

神奇数-Java-牛客模拟三

package 模拟三; import java.util.ArrayList; import java.util.Scanner; /** * 题目描述:给出一个区间[a, b],计算区间内“...
  • qq_30507287
  • qq_30507287
  • 2017-05-26 21:38:15
  • 681

1114神奇的口袋

语法: replace() find()
  • qq_18698003
  • qq_18698003
  • 2017-01-30 11:35:21
  • 241

神奇的数字“9”

先看 9 的九九乘法表: 1×9=91\times 9 = 9 2×9=182\times 9=18 3×9=273\times 9=27 4×9=364\times 9=36 5×9=455\t...
  • lanchunhui
  • lanchunhui
  • 2016-06-24 12:08:46
  • 293

python中的eval

eval将字符串作为执行命令 题目:https://www.hackerrank.com/challenges/py-set-discard-remove-pop 代码如下: n = int(inpu...
  • wuli2496
  • wuli2496
  • 2016-12-30 15:30:07
  • 296

一段神奇的代码!

只要你在IE浏览器任意打开一个网站,然后在浏览器上输入如下代码神奇的代码,可随意修改复制页面内容! 神奇的代码 1神奇的代码1 javascript:R=0; x1=.1; y1=.05;...
  • zqtsx
  • zqtsx
  • 2013-03-24 14:16:30
  • 1404
收藏助手
不良信息举报
您举报文章:Java学习之神奇的初始化
举报原因:
原因补充:

(最多只允许输入30个字)