静态块问题
public class test{
static{
i=1;
}
static int i=0;
public static void main(String args[]){
System.out.println("i="+i);
}
}
编译成功不.输出多少.为什么.
public class test{
static int i=0;
static{
i=1;
}
public static void main(String args[]){
System.out.println("i="+i);
}
}
编译成功不.输出多少.为什么.
关于静态变量.静态块.不静态块.常量.构造方法有人能讲的清楚些吗
[解决办法]
static{
i=1;
}
static int i=0; ~~~~~~~~~先使用后定义
static int i=0; ~~~~~~~~~~~main本来就是静态的
static{
i=1;
public static void main(String args[]){
System.out.println("i="+i);
}
[解决办法]
运行一下下面的程序,就会对这些的执行顺序了解了。
public class Test { public static void main(String[] args) { ABC abc = new ABC(); }}class ABC { private String str1 = getString("非静态成员变量1"); private String str2 = getString("非静态成员变量2"); private static String stra = getString("静态成员变量a"); private static String strb = getString("静态成员变量b"); { System.out.println("非静态块1"); } { System.out.println("非静态块2"); } static { System.out.println("静态块1"); } static { System.out.println("静态块2"); } public ABC() { System.out.println("构造方法"); } private static String getString(String type) { System.out.println(type); return type; } }
[解决办法]
第一个问是输出0
第二个是1
1.所有静态的(无论其是变量还是块)都按顺序执行.
2.所有的非静态的块都在静态的(无论其是变量还是块)后执行.
3.所有的块(无论是静态的还是非静态的)都在构造之前执行.
测试代码:(仅供参考)
public class TestStaticMode
{
public TestStaticMode()
{
System.out.println("in structure");
}
static int i = 0;
{
System.out.println("in first no static i=" + i);
}
static {
i = 1;
System.out.println("in static i=" + i);
}
{
System.out.println("in second no static i=" + i);
}
public static void main(String args[])
{
TestStaticMode testStaticMode = new TestStaticMode();
System.out.println("i=" + i);
}
}
输出为:
in static i=1
in first no static i=1
in second no static i=1
mytest
i=1
[解决办法]
静态块:是指一个对象被构造时,最先被初始化的实例成员,这里指的是对象的实例变量。静态方法是无法访问的,以上的main方法是无法访问静态块的变量。
静态变量:是指一个类被装载时,被装载的变量,它对所有的类来说,只有一个,该变量是可以静态方法所访问的,以上的main方法就是访问这个静态变量。
[解决办法]
public class test{ static{ i=1; } static int i=0; public static void main(String args[]){ System.out.println("i="+i); } }
[解决办法]
可以进行多练习就好了!
------解决方案--------------------
弄清楚最基本东西会理解了
[解决办法]
类中可以包含静态代码块,它不存在任何方法体中,Java虚拟机加载类的时候会执行这些代码块,假如类中包含多个静态代码块的话,将按照他们出现的顺序执行这些代码块.
再举个例子:
public class Test {
static int i = 5;
static {
System.out.println("i=" + i++);
}
static {
System.out.println("i=" + i++);
}
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
System.out.println("i=" + i);
}
}
输出结果
i=5
i=6
i=7
至于静态常量和静态变量,后者在类中的值是可以改变的,前者一旦定义了就不能够再被改变.静态变量可以在类中被直接访问,或者通过类名被访问.
我也刚学java,以上是我的理解,希望对你有所帮助,帮顶了!
[解决办法]
1啊!!!!!!!!!
[解决办法]
下面我做个总结.
1.静态块和静态方法是按顺序执行.不管类是否实例化都会执行,静态块内必需是静态变量,静态块和静态方法都且只执行一次
2.非静态块,非静态变量比静态块,静态变量后执行,非静态块是在类实例化时执行,且实例一次非静态块都会执行一次.
非静态块也是按顺序执行,非静态变量也是一样,在实例化时执行,他们优先级比构造方法高
3.构造方法最后执行.