String str1=
"abc"
;
String str2=
"abc"
;
String str3=
"ab"
+
"c"
;
String str4=
new
String(str2);
str1 ==
str3
str3通过编译优化,与str1引用自同一个对象
/str4因为是在堆中重新分配的另一个对象,所以它的引用与str1不同
str1 ==
str4
@SuppressWarnings("deprecation")
public class A {
{
System.out.println("A");
}
static{
System.out.println("X");
}
A(){
System.out.println("1");
}
}
public class B extends A {
String aaaString ="aa";
{
System.out.println("B");
}
static{
System.out.println("Y");
}
B(){
System.out.println("2");
}
public static void main(String[] args) {
A a = new B(); // XYA1B2
B b = new B(); // A1B2
}
}
static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,
它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,
JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次
类的初始化顺序:
父类静态语句块
子类静态语句块
父类普通语句块
父类构造方法
子类普通语句块
子类构造方法
public class A {
public A() {
p();
}
protected void p() {
System.out.println("A");
}
}
class B extends A {
@Override
protected void p() {
System.out.println("B");
}
public static void main(String[] args) {
new B();
}
}
分享到:
2011-04-18 16:25
浏览 520
评论