class Cup{
Cup(int er){
System.out.println("Cup("+er+")");
}
void f(int er){
System.out.println("f("+er+")");
}
}
class Cups{
static Cup c1;
static Cup c2;
static {
c1 = new Cup(1);
c2 = new Cup(2);
}
Cups(){
System.out.println("Cups()");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Inside main()");
Cups.c1.f(99);
}
static Cups x = new Cups();
static Cups y = new Cups();
}
希望高手解释一下程序运行顺序和static{}的用法?
Cup(int er){
System.out.println("Cup("+er+")");
}
void f(int er){
System.out.println("f("+er+")");
}
}
class Cups{
static Cup c1;
static Cup c2;
static {
c1 = new Cup(1);
c2 = new Cup(2);
}
Cups(){
System.out.println("Cups()");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Inside main()");
Cups.c1.f(99);
}
static Cups x = new Cups();
static Cups y = new Cups();
}
希望高手解释一下程序运行顺序和static{}的用法?
解决方案 »
- 这样限制了text的输入,就不能输入string型的数据?
- 点击“文件”——“打开”或“保存”,出现一个“请选择文件“或”另存为”的框,不选择文件,然后直接关闭,会抛出空指针异常,这个怎么处理??
- c如何调用返回值为String的java函数
- 关于Frame中paint的坐标值设定的问题
- 求助:Exception in thread "main" java.lang.NoSuchMethodError:main是什么错误呀?谢谢!在线等……
- 请教高手,java中如何为一个数组重新分配堆内存
- JAVA flush()代表的意思是什么
- 急求一条查询日期的语句!!!先谢谢了
- 求JAVA的具体应用
- 各位大哥,学java入门,要多长的时间呀,介绍一下好书吧
- 求解!编译和运行没错。一按按钮就出现问题了。
- Map之间的对比如何做?
这个顺序有点复制 你自己多加一些System.out.println(1);System.out.println(2);来测试一下到底先执行的是什么
运行结果:
Cup(1)
Cup(2)
Cups()
Cups()
Inside main()
f(99)
说明在执行main()方法中的语句之前,它是先执行所有的静态变量的创建。
class Cup{
Cup(int er){
System.out.println("Cup("+er+")");
}
void f(int er){
System.out.println("f("+er+")");
}
}
class Cups{
static Cup c1;
static Cup c2;
static {
System.out.println("c1 = new Cup(1)");
c1 = new Cup(1);
System.out.println("c1 = new Cup(2)");
c2 = new Cup(2);
}
Cups(){
System.out.println("Cups()");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Inside main()");
Cups.c1.f(99);
}
static Cups x = new Cups();
static Cups y = new Cups();
}
输出结果。。
c1 = new Cup(1)
Cup(1)
c1 = new Cup(2)
Cup(2)
Cups()
Cups()
Inside main()
f(99)静态块先初始化吧。。多加几个system.out就看出来了。。
一起学习了。
所有先会到这里
1.static Cups x = new Cups();
2.static Cups y = new Cups();
先加载上面的第第一步static Cups,这时候会加载Cups类,此时的Cups中也存在静态代码块,所有又去加载Cups中的静态代码,就会进入下面
3.static Cup c1;
4.static Cup c2;
5.static {
6.c1 = new Cup(1);
7.c2 = new Cup(2);
}
依次3,4,5,6到这来的时候就会new Cup(1),创建Cup对象,调用其被重载的构造方法,
Cup(int er){
System.out.println("Cup("+er+")");
}
打印Cup(1),
完成后进入第七步,跟上面一样,此时打印Cup(2)
此时Cups中的静态代码加载完毕,返回到第一步,此时new Cups(),调用cups()的构造方法
Cups(){
8.System.out.println("Cups()");
}
即进入第八步,打印Cups()
完成后进入第二步,static Cups y = new Cups();此时Cups中的静态代码在之前第一次已经加载过,所以不会再次加载,而是继续new Cups(),就又打印出Cups(),完成后进入main()方法
System.out.println("Inside main()");
Cups.c1.f(99);
打印Inside main()
然后调用Cups.c1.f(99),打印f(99)
所以结果是:
Cup(1)
Cup(2)
Cups()
Cups()
Inside main()
f(99)
主要的就是在main方法执行前会加载所有的静态代码,并且只加载一次。
static Cups y = new Cups();
这在mian下面,执行mian就 调用这个。
然后执行Cups 里面静态变量要记住,静态变量只初始化一次,而且是类调用的。你有认真看think in java。
我每天就看几页 ,积累一个多月也看了170多页了。。