tips:前端開發寫慣了弱類型語言,再來學強類型語言,真的是被各類修飾符、類型聲明給整的雲裏霧裏,並且java語法和javascript語言差異仍是很大的,因此作好筆記,把一些須要注意的地方記下來是很是重要的,接下來就開始學習java啦。javascript
1、基本語法:前端
一、大小寫敏感:Java是大小寫敏感的,這就意味着標識符Hello與hello是不一樣的。java
二、類名:對於全部的類來講,類名的首字母應該大寫。若是類名由若干單詞組成,那麼每一個單詞的首字母應該大寫,例如 MyFirstJavaClass 。數組
三、方法名:全部的方法名都應該以小寫字母開頭。若是方法名含有若干單詞,則後面的每一個單詞首字母大寫。安全
四、源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名做爲文件名保存(切記Java是大小寫敏感的),文件名的後綴爲.java。(若是文件名和類名不相同則會致使編譯錯誤)。多線程
五、主方法入口:全部的Java 程序由public static void main(String args[])方法開始執行。函數
備註一下:學習
5.一、public static void main(String args[]){}:爲java主函數,java虛擬機會自動尋找到main方法,而後開始執行後面的程序,java程序的規定的格式寫法;ui
5.二、public:可外部訪問;spa
5.三、static:標記爲靜態函數,將該函數存儲在靜態存儲區,不須要實例化(new)便可使用;
5.四、void:無返回值;
5.五、String args[]:可在命令行經過此參數給函數傳值,可在其餘類調用這個類的main函數時傳值。
public class MyFirstJavaProgram { /* 第一個Java程序. * 它將打印字符串 Hello World */ public static void main(String []args) { System.out.println("Hello World"); // 打印 Hello World } }
2、類(class)
一、局部變量
二、成員變量:定義在類中,方法體以外的變量,和局部變量略有不一樣。
三、類變量也聲明在類中,方法體以外,但必須聲明爲static類型。
四、構造方法:在建立一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類能夠有多個構造方法。
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 這個構造器僅有一個參數:name } }
3、類型
一、基本數據類型(內置基本類型,引用類型)
byte a = 100;—— byte數據類型是8位、有符號的,以二進制補碼錶示的整數;
short s = 1000;—— short數據類型是16位、有符號的以二進制補碼錶示的整數;
int a = 100000;—— int數據類型是32位、有符號的以二進制補碼錶示的整數;
long a = 100000L;—— long數據類型是64位、有符號的以二進制補碼錶示的整數;(後面加了L)
float f1 = 234.5f;—— float數據類型是單精度、32位、符合IEEE 754標準的浮點數;(小數,後面加了f)
double d1 = 123.4;—— double數據類型是雙精度、64位、符合IEEE 754標準的浮點數;(小數)
boolean one = true;—— boolean數據類型表示一位的信息;(true或false)
char letter = ‘A’;—— char類型是一個單一的16位Unicode字符;
Animal animal = new Animal(「giraffe」) ; —— 引用類型變量由類的構造函數建立,可使用它們訪問所引用的對象;
final double PI = 3.1415927;—— 常量指不能改變的量。 在Java中用final標誌,聲明方式和變量相似;
二、變量類型(局部變量,實例變量,類變量)
局部變量:
一、訪問修飾符不能用於局部變量;(局部變量自己只能局部調用,外部無法調用,因此不須要修飾符private ,public protend,可是能加final)
二、局部變量是在棧上分配的。(因爲進程的棧空間是有限的,因此要避免申請佔用空間過大的局部變量,以及避免函數嵌套層數過多。這些均可能引發棧空間不夠致使程序崩潰。)
實例變量:
一、實例變量聲明在一個類中,但在方法、構造方法和語句塊以外;
二、實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部可以經過這些方式獲取實例變量信息;
三、實例變量能夠聲明在使用前或者使用後;(有點類型js的變量提高)
四、訪問修飾符能夠修飾實例變量;
五、通常狀況下應該把實例變量設爲私有。經過使用訪問修飾符可使實例變量對子類可見;
六、實例變量具備默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值能夠在聲明時指定,也能夠在構造方法中指定;(局部變量沒有默認值哦!)
類變量(靜態變量):
一、以static關鍵字聲明,必須在方法、構造方法和語句塊以外。
二、不管一個類建立了多少個對象,類只擁有類變量的一份拷貝。
三、靜態變量除了被聲明爲常量外不多使用。常量是指聲明爲public/private,final和static類型的變量。常量初始化後不可改變。
四、靜態變量儲存在靜態存儲區。常常被聲明爲常量,不多單獨使用static聲明變量。
五、類變量被聲明爲public static final類型時,類變量名稱必須使用大寫字母。若是靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
4、修飾符
訪問修飾符(private、public、protected)
一、private —— 只能被所屬類訪問,而且類和接口不能聲明爲private。
二、public —— Java程序的main() 方法必須設置成公有的,不然,Java解釋器將不能運行該類。
三、protected —— 能被同一個包中的任何其餘類訪問,也可以被不一樣包中的子類訪問;不能修飾類和接口,方法和成員變量可以聲明爲protected,可是接口的成員變量和成員方法不能聲明爲protected。
非訪問修飾符(static、final、abstract、synchronized、volatile)
一、static —— 局部變量不能被聲明爲static變量;能夠直接使用classname.variablename和classname.methodname的方式訪問。
二、final —— final對象的引用不能改變,可是裏面的值能夠改變;final修飾符一般和static修飾符一塊兒使用來建立類常量;類中的Final方法能夠被子類繼承,可是不能被子類修改;final類不能被繼承。
三、abstract —— 抽象類不能用來實例化對象;一個類不能同時被abstract和final修飾;抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。抽象方法不能被聲明成final和static;任何繼承抽象類的子類必須實現父類的全部抽象方法,除非該子類也是抽象類;抽象方法的聲明以分號結尾,例如:public abstract sample();
例子:
public abstract class SuperClass{ abstract void m(); //抽象方法 } class SubClass extends SuperClass{ //實現抽象方法 void m(){ ......... } }
四、synchronized —— 方法同一時間只能被一個線程訪問。
五、transient —— java虛擬機(JVM)將跳過transient修飾的實例變量。
六、volatile —— volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。並且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任什麼時候刻,兩個不一樣的線程老是看到某個成員變量的同一個值。(看得有點暈)
5、運算符(感受全部語言都差很少,略)
6、包裝類或抽象類
Number類:內置數據類型,如:int、long、byte、double、float、short等對應了包裝類Integer、Long、Byte、Double、Float、Short等,它們都是抽象類Number的子類。(包裝類須要拆箱變成內置數據類型才能進行計算)
Math類:Math 的方法都被定義爲 static 形式,經過 Math 類能夠在主函數中直接調用。
Character類:對應了內置數據類型char。
String類:String類是不可改變的,因此你一旦建立了String對象,那它的值就沒法改變了。若是須要對字符串作不少修改,那麼應該選擇使用StringBuffer & StringBuilder類。輸出格式化數字可使用printf()和format()方法;
轉 換 符 | 說 明 | 示 例 |
---|---|---|
%s | 字符串類型 | 「mingrisoft」 |
%c | 字符類型 | ‘m’ |
%b | 布爾類型 | true |
%d | 整數類型(十進制) | 99 |
%x | 整數類型(十六進制) | FF |
%o | 整數類型(八進制) | 77 |
%f | 浮點類型 | 99.99 |
%a | 十六進制浮點類型 | FF.35AE |
%e | 指數類型 | 9.38e+5 |
%g | 通用浮點類型(f和e類型中較短的) | |
%h | 散列碼 | |
%% | 百分比類型 | % |
%n | 換行符 | |
%tx | 日期與時間類型(x表明不一樣的日期與時間轉換符 |
StringBuffer和StringBuilder類:StringBuilder相較於StringBuffer有速度優點,因此多數狀況下建議使用StringBuilder類。然而在應用程序要求線程安全的狀況下,則必須使用StringBuffer類。(線程安全就是多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其餘線程不能進行訪問直到該線程讀取完,其餘線程纔可以使用。不會出現數據不一致或者數據污染。線程不安全就是不提供數據訪問保護,有可能出現多個線程前後更改數據形成所獲得的數據是髒數據)。
數組:
//數組聲明
dataType[] arrayRefVar; // 首選的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首選方法
//數組建立
dataType[] arrayRefVar = new dataType[arraySize];
或
dataType[] arrayRefVar = {value0, value1, ..., valuek};
//foreach循環
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5}; // 打印全部數組元素
for (double element: myList) {
System.out.println(element);
}
}
}
Array類:能方便地操做數組,它提供的全部方法都是靜態的;(fill:給數組賦值,sort:對數組排序,equals:比較數組中元素值是否相等,binarySearch:對排序好的數組進行二分查找法查找數組元素)
7、異常處理
一、異常捕獲:使用try和catch關鍵字能夠捕獲異常;
try { // 程序代碼 }catch(ExceptionName e1) { //Catch 塊 }
二、throws/throw關鍵字:若是一個方法沒有捕獲一個檢查性異常,那麼該方法必須使用throws 關鍵字來聲明。throws關鍵字放在方法簽名的尾部;能夠聲明拋出多個異常,多個異常之間用逗號隔開。
import java.io.*; public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } //Remainder of class definition }
三、finally關鍵字:不管是否發生異常,finally代碼塊中的代碼總會被執行;
try{ // 程序代碼 }catch(異常類型1 異常的變量名1){ // 程序代碼 }catch(異常類型2 異常的變量名2){ // 程序代碼 }finally{ // 程序代碼 }
最後,把上面的這些學懂,再來看java代碼,已經不像開始時的那樣陌生了,固然,還有一些知識點比較難,須要花更多的時間去學習研究,學得越多,越以爲java的知識體量很大,不過總算是入門了,再接再礪!