一、+兩邊有字符串的話,則另外的先轉換爲字符串再鏈接。java
int c = 12;數組
System.out.println(「c=」 + c);佈局
二、若是a=2,b=a++,先賦值再運算,b爲2,a爲3;b=++a,先運算再賦值,b爲3,a爲3.this
一、 if、else、else if、for後須要執行的若是隻有一句,可省略大括號。(不過最好不要省了,危險)spa
二、 switch後面的括號中只能放int的變量,byte short之類能夠轉換成int的能夠放;線程
switch不加break會穿透。case至關於一個入口,進入以後則下面的語句都會執行,除非加了break。orm
一、 成員變量(即對象的數據)默認有初始值(數組也有),局部變量沒有初始值,必須對其賦值後才能用。對象
一、方法重載(overload)只能是方法的參數不一樣(參數類型不一樣或個數不一樣),返回值狀況要相同。繼承
void max(int a, int b){}與void max(double a,double b){}是,接口
void max(int a, int b){}與int max(int a,int b){}不是,且會出錯。
一、 import是後面接類,不是包。
二、 *只能代替類,不能代替包,好比import com.*,只能指代com中的類,不能指代com.io中的類,import com.io中的類只能用com.io.*。
三、 關於包,只有絕對包(絕對路徑),沒有相對包(相對路徑)的說法。
四、 子類的構造過程當中必須調用基類的構造方法;
子類的構造方法中用super(argument_list)調用基類構造方法,且必須在構造方法中的第一行,this(argument_list)可調用子類本身的構造方法。
若是沒寫super(argument_list),則默認調用無參數的基類構造方法。
一、 Object中的equals方法只有當兩個引用指向同一對象時才返回true。
c1 |
c2 |
第一個對象 |
第二個對象 |
上面的c1.equals(c2)將返回false,c1c2指向一個對象才返回true。
一般要重寫toString()和equals()方法。字符串類(String)的equals()方法已經重寫,即兩個字符串同樣即返回true。
二、 對象轉型。
Person a = new Person(); Student b = new Student();(學生extends人)
能夠a = new Student(),但a不可訪問學生獨有的數據及方法;
Student c = (Student)a;這時a強制轉換爲學生後,可訪問學生獨有的數據及方法。
棧中的引用和堆中new的對象,兩者的類型是獨立的,基類引用能夠指向子類對象,反之不行。但基類只能訪問此對象地址中繼承自基類的數據。
instanceof前面實際上是引用所指對象,探測此對象的類型,而不是此引用的類型。
當須要使用子類數據時,就須要將引用強制轉換爲子類引用。
一、 動態綁定,接上一條。當基類引用a指向子類對象時,a.方法 可調取子類重寫的方法。(只有重寫的方法才能動態綁定)。
二、 基類中的抽象(abstract)方法是專門用來給子類重寫的。類中有抽象方法,則此類必須爲抽象類。抽象類不能new出來(不能實例化),不過能夠建立這種類型的引用,指向其非抽象的子類。
三、 final關鍵字。變量不能改變其值,方法不能被重寫,類不能被繼承。
四、 接口(interface)。其中數據必須是public static final的(寫不寫都行,不寫也默認是這個),方法都是抽象的,不寫abstract。
五、 接口能夠像基類同樣進行對象轉型和引用指向子類。規則相同。接口互相之間能夠繼承(extends)。
六、 方法拋出異常須要兩個操做:a、方法名後面寫throws exception;b、方法裏寫throw new exception()(即將對應類型的異常拋出)。
a、 throw new exception()——throws exception——catch至關於一個通道;
b、 throw new exception()拋出的異常必須在throws中有,不然會說此異常未處理;
c、 throws exception能夠寫任意類型異常,只要包含方法裏throw的異常就ok,寫了throws,必須寫catch(不必定在本層catch),無論方法裏有沒有throw;
d、 寫了throws的異常類型,必需要配套寫catch,若是方法後面沒有當即catch,他的上層總有一塊要catch。
e、 throw的類 < throws的類 = catch(包含上層的catch)的類;
七、 重寫方法須要拋出與原方法一致的異常類型或不拋異常。
一、 java的數組也是引用類型(只有8種基礎數據類型不是引用類型),數組的值存在堆中,引用存在棧中。也要new。
二、 數組的值會初始化,按成員變量的規則進行初始化。
三、 對引用類型(即對象)構成的數組,爲下面的形式。數組的值中保存引用,而不是對象,數組的值做爲引用再指向實際的對象:
Date[] days; days = new Date[2]; 循環:days[i] = new Date(2004,4,i +1);
Date[] days;在棧中生成數組的引用;
days = new Date[2];將堆中數組的值賦值爲Date類的引用;
days[i] = new Date(2004,4,i +1);在堆中生成對象,並用數組中保存的引用指向他們。
四、 引用類型構成的數組,初始化的值爲null;
一、 比較字符串時。equals方法比較值是否相等,「==」比較兩個對象地址是否相同,便是否指向同一對象。
String a="1234";
String b="1234";
String c = new String("1234");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(c));
輸出爲true false true。
說明不用new的時候,字符串是共用的。
一、 二維數組在java中是「數組的數組」。聲明方法:
int a[][] = {{1,2};{2,3};{3,4,5}};
或:
int a[][] = new int[3][5];
或:
int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[5];
只有前一箇中括號要先聲明出來(或者同時聲明),後一個才能再聲明。
int a[][] = new int[][]是不行的。
一、 valueOf(String s)方法,各基礎類型包裝類有,返回字符串的該類型數據。(例如int a = Integer.valueOf(「123」),若是無法轉成對應數據的話,好比「zcx」不能轉成int,則throws NumberFormatException);反過來也有各基礎類型到字符串的valueOf()
toString()方法,各種均有,返回對象對應的字符串。通常要將其重寫。
二、 向數組中填值,必須先指定數組的長度,或者直接用{a,b,c}的方法一次所有指定;不能一個一個的填。
一、 定義文件的路徑時,建議採用兩種方式:String directory = 「mydir1」 + separator + 「mydir2」;或String directory = 「mydir1/mydir2」;
一、 容器。在 容器.remove(something) 時,something會與容器中全部對象進行equals,
equals爲true的被remove。因此加入容器的對象,有必要將equals重寫,且有必要使equals的兩個對象的hashCode相等(將hashCode也重寫)。
一、 I/O流。輸出時,先flush再關閉。不然可能數據還未寫完輸出管道就被關了(在用內存緩衝區的時候)。
一、 io的類,Reader,Writer,InputStream,Outputstream。這是最基本的四類。他們不能直接用,要用他們的子類。子類中,OutputStreamWriter和InputStreamReader能夠將字節流轉換爲字符流,剩下的方法,不能在字節流和字符流間轉換。(看相關類的構造方法)
一、 synchronized(this)以及synchronized屬性的方法,鎖定的是不一樣線程中運行此方法時的當前對象。僅當有兩個線程同時運行相同對象的此方法時,出現互斥。此對象的其餘方法不受影響,能夠與其同時執行(訪問此方法中正在處理的值)。
這樣就會出錯,因此加了synchronized(this)以及synchronized屬性的方法中,處理的值,此值出現的方法都應該加synchronized。也就是,多個方法中都對某個值有操做時(rwx看狀況),這些方法都應該加synchronized。
其實,加鎖並非必定在方法的層面上,synchronized(this)括住的內容纔是真正互斥的,此方法中沒被括住的語句執行時並不加鎖。
二、 某一線程新開另外一個線程時(以及放鎖時),此線程的下一語句和另外一線程的第一句不必定誰先執行
(不一樣機器差別)。因此有時要用到sleep。
一、 佈局管理器起做用時,組件大小和位置由佈局管理器安排,setLocation(),setSize(),setBounds()都將不起做用;若想起做用,需setLayout(null)
二、 事件監聽:繼承ActionListener接口的類中重寫actionPerformed方法;main中new出其對象a,而後b.addActionListener(a)(b爲按鈕之類的對象)。
main中:Button b = new Button(「Press me」);
Monitor a = new Monitor();
b.addActionListener(a);
新類:class Monitor implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("a button has been pressed!");
}
一、 持有引用:一個類A中須要另外一個類B中的某個成員變量;能夠在這個類A的構造方法中傳入類B,在構造方法中將類B做爲A的一個成員變量,便可訪問B中的成員變量。
class B …
class A{
B b = null; #將類B做爲A的成員變量
public A(B someone){ #在構造方法中將某個B類對象傳入A的成員變量b中
this.b = someone;
}
}
想要new A時,A a = new A(someone); someone爲某個B類對象。(其實把A類寫成內部類結構更好)
一、java類在編譯時,會直接初始化靜態變量;在實例化時,纔會按前後順序初始化非靜態變量,而後調用構造方法。