1:實例化一個對象的時候,靜態變量,靜態初始化塊,普通變量,普通初始化快,構造函數的創建順序:
靜態初始化變量
靜態初始化方法
普通變量
普通初始化快
構造方法
2:當有繼承關係的時候:
父類靜態變量
父類靜態初始化塊
子類靜態變量
子類靜態初始化塊
父類普通變量
父類普通初始化塊
父類構造函數
子類普通變量
子類普通初始化塊
子類構造函數
3:靜態變量和靜態初始化快的先後順序是:
根據在類當中的聲明順序來定。
4:到底創建了幾個對象
String str = new String("abc");//創建了兩個對象
string a = "abc";//創建了一個對象
string b = "abc";
string c = "abc";//創建了一個對象
string d = "ab" + "cd";//創建了一個對象
string a = "ab";
string b ="cd";
string c = "abcd";
string e = a + "cd";//e != c
string d = "ab" + "cd";// d == c
public static final string A = "ab";
public static final string B = "cd";
string s = A + B;
string t = "abcd";//s == t;
public static final string A ;
public static final string B;
static{
A = "ab";
B = "cd";
}
string s = A + B;
string t = "abcd";//s != t;
string s = new string(new char[]{'a','b','c','d'});
string t = s.intern();// t != s,因爲這個時候t指向的是字符串池中的對象,而s 不是
5:變量的覆蓋
class Parent(){
int i = 10;
}
class child extends Parent (){
int i = 30;
public static void main(String[] args){
new Child();
Parent par = new Child();
Child child = new Child();
System.out.println(par.i + child.i);//值是40
//屬性的值取父類還是子類,不是由對象的類型來決定的,而是由我們定義的變量的類型來決定的;
//補充:方法是取子類的類型,這是多態。
//常量也可以被覆蓋
}
}
6:final,finally,finalize的區別
final修飾的變量只能被初始化一次,且必須被初始化,在初始化的時候有一個static變量和static方法快互斥的關係。
final修飾方法的時候表示該方法不能被子類重寫。
final修飾類的話表示該類不能被繼承,所以final不能和abstract一起使用。
finalize表示gc在進行垃圾回收的時候調用該方法。
7:string 和 char
一箇中文是一個字符,也就是兩個字節,一個char是兩個字節;一個英文字母是一個字節,所以:
char a = '中';//正確
byte b ='國';//錯誤
byte c = 'a';
System.out.println(c);//97,而不是a
判斷一個string str1在不同的編碼方式encodetype(如gbk,utf-16)下有幾個字節:
str1.getBytes(encodetype).length;
string s1 和stringbuffer sb1的聯繫:
stringbuffer sb1 = new stringbuffer(s1);//sb1.reverse().toString()
string str1 和 char c1的聯繫:
str1 = String.valueOf(c1);
string str1 和byte數組byte[] tmp的關係:
str1 = new String(tmp);
8:Date和Calendar(一個抽象類)
date類基本上只有一個getTime方法(1262256841918),system.out.println(date)打印的值是(Thu Dec 31 18:55:01 CST 2009)。
因爲Calendar是一個抽象類,所以不能被初始化,它有一個具體的子類實體類,GenerationCalendar,這個類可以通過new方法實例化,也可以通過Calendar.getInstance()來獲得。
calendar對象就有很多的屬性可以被我們的程序使用:
cal.DATE;
cal.DAY_OF_MONTH;
cal.DAY_OF_WEEK;
cal.DAY_OF_WEEK_IN_MONTH;
cal.DAY_OF_YEAR;
cal.DECEMBER;
cal.DST_OFFSET;
cal.AM_PM
cal.SECOND
cal.MILLISECOND
等等。
Date和Calendar之間的轉換:
Date d1 = cal.getTime();
9:基本數據類型:
double
float
long
double d1 = 7L;//正確
float f1 = 7L;//正確
long l1 = 2f;//錯誤
long l2 3d;//錯誤