代码如下:
public class TestSquence {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String temp = TQExample2.s_a;
TQExample2 test = new TQExample2(); }}
class TQExample2 {
public static String s_a = "静态变量:直接赋值";
public String n_b = "非静态变量:直接赋值"; public final int nf_i;
public final String nf_s = "我是final对象,直接赋值";
static {
System.out.println(s_a); s_a = "静态变量:静态块赋值";
} public TQExample2() {
System.out.println(s_a);
System.out.println(n_b);
//静态变量
s_a = "静态变量:构造器赋值";
//非静态变量
n_b = "非静态变量:构造器赋值";
//final变量
nf_i = 1;//注释这行然后在外面打印它看看看看,会对java的自动赋值有一个更具体的感性认识.
//nf_s = "我是final对象,构造器赋值";//这行是错误的,建议你试试.
System.out.println(s_a);
System.out.println(n_b);
System.out.println(nf_s);
}
}这样输出的结果是:静态变量:直接赋值
静态变量:静态块赋值
非静态变量:直接赋值
静态变量:构造器赋值
非静态变量:构造器赋值
我是final对象,直接赋值如果我把main()方法中的TQExample2 test = new TQExample2();注释掉,输出结果变成了:静态变量:直接赋值这我就不明白了,
没有System.out.println();怎么还会输出内容呢?
我知道是直接调用了TQExample2中的静态变量s_a,但是也没有输出啊?
各位大侠能给我解释一下String temp = TQExample2.s_a;这句代码和为什么输出那样的结果吗?class
public class TestSquence {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String temp = TQExample2.s_a;
TQExample2 test = new TQExample2(); }}
class TQExample2 {
public static String s_a = "静态变量:直接赋值";
public String n_b = "非静态变量:直接赋值"; public final int nf_i;
public final String nf_s = "我是final对象,直接赋值";
static {
System.out.println(s_a); s_a = "静态变量:静态块赋值";
} public TQExample2() {
System.out.println(s_a);
System.out.println(n_b);
//静态变量
s_a = "静态变量:构造器赋值";
//非静态变量
n_b = "非静态变量:构造器赋值";
//final变量
nf_i = 1;//注释这行然后在外面打印它看看看看,会对java的自动赋值有一个更具体的感性认识.
//nf_s = "我是final对象,构造器赋值";//这行是错误的,建议你试试.
System.out.println(s_a);
System.out.println(n_b);
System.out.println(nf_s);
}
}这样输出的结果是:静态变量:直接赋值
静态变量:静态块赋值
非静态变量:直接赋值
静态变量:构造器赋值
非静态变量:构造器赋值
我是final对象,直接赋值如果我把main()方法中的TQExample2 test = new TQExample2();注释掉,输出结果变成了:静态变量:直接赋值这我就不明白了,
没有System.out.println();怎么还会输出内容呢?
我知道是直接调用了TQExample2中的静态变量s_a,但是也没有输出啊?
各位大侠能给我解释一下String temp = TQExample2.s_a;这句代码和为什么输出那样的结果吗?class
解决方案 »
- 仿造WindowAdapter写了一个程序,为啥不成功呢
- 用getResource方法返回的路径中多了一个!符号。
- 问一个关于printf输出格式的问题
- 求教关于Buff的操作
- 关于字符串取值的问题
- 自己做了一个Java正则表达式测试工具,与各位共享
- java或者OOP的初学者一定要进来看看!!!(转)
- 本人初学JAVA,问一个很菜的Assertions问题,望各位前辈指教,谢谢~
- 按照如下方法定义一个表格,我该如何动态的修改表格(如添加行和列,applet)
- 另一道关于数组的排序——冒泡问题
- 递归问题(我自己没看出来)结果应该是6,为什么运行结果是9
- 求助,转换字符串,什么时间需要用tostring(),什么时间需要new String()
static {
System.out.println(s_a); s_a = "静态变量:静态块赋值";
}
是静态代码块,当我运行 java application时,这个静态代码块就执行了,它是主动执行的。但这个输出结果与String temp = TQExample2.s_a;这段代码是有关系的,
如果我把这段代码也去掉,控制台就不会打印出任何内容。所以我又迷糊了,求各位大神指导
System.out.println("Hello!");
}
JVM会自动的加载TQExample2 这个类,既然加载这个类就会执行静态代码块:
static {
System.out.println(s_a); s_a = "静态变量:静态块赋值";
}
所以就会输出:静态变量:直接赋值如果没有这句String temp = TQExample2.s_a;代码,jvm就不会加载TQExample2 这个类,也就不会执行上面的代码块,便不会输出结果了。各位大神,我这样理解对吗?求指导
对于函数来说,不能被复写
对于变量来说,一旦被final修饰,该变量就成为了常量执行循序:a,静态代码块(给类初始化的) 最先执行
b,属性执行(变量)
c,构造代码块(给对象初始化)
d,构造函数(给对应的对象初始化)
静态代码块中代码的执行与实例的创建无关,是在类加载的时候就执行的(在Main方法之前),而且是主动执行的(不需要调用)
静态代码块一般用于类中变量的初始化
“String temp = TQExample2.s_a;这句话执行时就会执行静态代码块”是什么意思?
我可不可以这样理解:
String temp = TQExample2.s_a;这句话执行时,JVM就会加载类TQExample2,加载这个类的话,静态代码块自然就会主动的执行了。
这样理解对吗?
类的初始化和jvm加载类是同一个概念吗?
类的初始化是不是就是类的实例化,即new一个实例(创建对象),对吗?