Java问题记录
1.构造方法中创建自身对象,但在类中没有声明任何一个标识符,为什么会导致栈溢出,而不是类似堆溢出?
public class Test7 {
public static void main(String[] args) {
new Test7();
}
Test7() {
new Test7();
}
}
2.在类中定义成员变量为自身静态对象,为什么只会调用构造函数一次,不会重复 new 对象(静态自身对象不会再调用构造方法,在创建对象),静态对象保存在方法区,底层细节是什么?
public class Test6 {
Test6() {
System.out.println("123");
str = "xcv";
show();
}
private static final Test6 t = new Test6();
private String str = "abc";
//自身对象作为静态成员变量,不会重复new 对象(不会重复调用构造方法),
// 只会在最初创建的时候调用一次;
public void show() {
System.out.println(str);
}
public static void main(String[] args) {
// Test6.t.show();
// t.show();
}
}
3.在使用三元运算符的时候,要注意自动类型提升的问题
public class Ternary{
public void test() {
Object obj = true ? new Integer(1): new Double(2.0);
//obj的值为1.0(类型为double),这里涉及到自动类型提升,编译器会自动将返回的值
//的类型设置为接收变量的类型,这里因为是Object所以:两边是什么型
//均可,但若接收变量为一个明确的类,则:两个的类型不同可能会导致异常
}
}