以下是源程序,有点疑惑就是对其输出结果有点疑惑!!
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) {
System.out.println("Inside main()");
Cups.c1.f(99);
}}
上面程序的输出结果是:
Inside main()
Cup(1)
Cup(2)
f(99)
为什么会出现Cup(2)?为什么在调用Cups的静态方法c1的时候会将c2也一起调用,如结果显示的那样,既然c2也被调用,那它的那个方法f()为什么不跟着一起调用呢?以上是我这个小菜鸟提出的问题,希望高手提点提点。感激不尽。。
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) {
System.out.println("Inside main()");
Cups.c1.f(99);
}}
上面程序的输出结果是:
Inside main()
Cup(1)
Cup(2)
f(99)
为什么会出现Cup(2)?为什么在调用Cups的静态方法c1的时候会将c2也一起调用,如结果显示的那样,既然c2也被调用,那它的那个方法f()为什么不跟着一起调用呢?以上是我这个小菜鸟提出的问题,希望高手提点提点。感激不尽。。
就是静态块里面的都会被执行,而且是先被执行;
看下这个程序
public class Q8
{
int i = 20;
static {
Q8 a = new Q8();
System.out.println(a.i);
int i = 10;
System.out.println(i);
}
public static void main(String[] args)
{
System.out.println("dfdfd");
Q8 a = new Q8();
System.out.println(a.i);
}
}
执行结果是:
20
10
dfdfd
20
Press any key to continue...有点不理解的是为什么System.out.println("dfdfd");在中间执行
而你的那个程序System.out.println("Inside main()");是在最开始执行呢?
c1=new Cup(1);
c2=new Cup(2);
}
会在该类被访问的时候被调用
而你的那个程序System.out.println("Inside main()");是在最开始执行呢?===
LZ的事写成了两个类。你这里main函数所在的类就有静态块,在执行main之前就被执行了(访问了main也是访问了这个类啊)
c1=new Cup(1);
c2=new Cup(2);
}
里面的动作,他是类级别的,只要你使用了Cups类,static{
c1=new Cup(1);
c2=new Cup(2);
}里面的肯定会被执行,并不会因为你没有调用就不执行,它是自动的;