1. 準備
- IDE(使用開源的eclipse)
https://www.eclipse.org/downloads/ - 下載jdk + 配置環境變量
(JDK是java開發工具包,這個安裝好以後,就可以運行Java了)
https://www.oracle.com/technetwork/java/javase/downloads/index.html
ps:在安裝過程中還要安裝JRE,JRE是Java運行環境, 安裝它,才能使Eclipse,Jbulilder等IDE工具可以正常使用。安裝完jdk之後,會彈出jre的安裝界面。
2. 理解
2.1
- java:這個可執行程序其實就是JVM,運行Java程序,就是啓動JVM,然後讓JVM執行指定的編譯後的代碼;
命令行:編譯(javac xxx.java)運行(java xxx)【xxx爲你命名java主類】 - javac:這是Java的編譯器,它用於把Java源碼文件(.java)編譯爲Java字節碼文件(.class);
- jar:用於把一組.class文件打包成一個.jar文件,便於發佈;
- javadoc:用於從Java源碼中自動提取註釋並生成文檔;
- jdb:Java調試器,用於開發階段的運行調試;
- javap: 反編譯,將類文件還原回方法和變量;
- appletviwer : Java解釋器, 用來解釋已經轉換成Bytecode的java小應用程序;
2.2 java版本
(1)Java標準版(J2SE, Java Standard Edition)
定位在個人計算機上的應用。這個版本是Java平臺的核心,它提供了非常豐富的API來開發一般個人計算機上的應用程序,包括用戶接口AWT及Swing,網絡功能與國際化、圖像處理能力以及輸入輸出支持等。在互聯網上大放異彩的Applet也屬於這個版本。
ps:是用於創建典型的桌面與工作站應用的Java平臺。從配置上來說,只要安裝JDK(Java Development Kit),就建立了一個J2SE開發和運行平臺。
(2)Java企業版(J2EE, Java Enterprise Edition)
定位在服務器端的應用。相關技術有EJB 、JDBC、、Servlet、JSP、XML、email及transaction、Struts、Spring、Hibernate以及Ajax等等。
(3)Java微型版(J2ME, Java Micro Edition )
定位在消費性電子產品的應用上。這個版本的應用層面相當廣泛,比如呼機、智能卡、手機、PDA,機頂盒。會是未來Java平臺發展的重點項目。
2.3 java的特點
(1)Java是健壯的
Java的代碼 具有可靠性。Java丟棄了容易引起錯誤的數據類型,如指針等。並且在Java編譯過程中,對很多可能發生的錯誤進行了防範。並可進行實時異常處理。
(2)Java是安全的
Java執行多種安全機制用以保護系統不受惡意程序的破壞。
(3) Java是可移植的
Java的字節碼可以直接移植到不同的操作系統上運行。
(4)Java的效率
Java的效率不如C++快,但足以滿足大多數交互應用程序的要求。實時編譯技術。
(5)Java是多線程的
多線程技術常用於用戶圖形界面和網絡中。
(6)Java動態的
不需要重新編譯就可以加入新類。增強了軟件更新的能力。
3. get語法知識
“基本類型”和“引用類型”的區別主要在於基本數據類型是分配在棧上的,而引用類型是分配在堆上的。
3.1 基本數據類型
- 整數類型:byte,short,int,long
(1) byte:-128 ~ 127 (1byte = 8bit)
(2) short: -32768 ~ 32767
(3) int: -2147483648 ~ 2147483647
(4) long: -9223372036854775808 ~ 9223372036854775807 - 浮點數類型:float,double
浮點數的運算常常會存在誤差,應特別注意,特別是在進行比較兩個浮點數的時候,最好將差的絕對值與一個很小的數比較。
ps:浮點數0.1在計算機中就無法精確表示,因爲十進制的0.1換算成二進制是一個無限循環小數。
- 字符類型:char
char類型除了可表示標準的ASCII外,還可以表示一個Unicode字符
\uxxx 表示一個Unicode編碼的字符(通常用unicode編碼的字符可以驗證漢字)
ps:java採用utf-16
字符集(https://blog.csdn.net/qq_33414271/article/details/78519159 )
理論上第三個應該是ok的,這裏先填個坑。
- 布爾類型:boolean
3.2 引用數據類型(待擴充)
-
類
(1)包裝類:將基本數值類型處理爲對象。
(由於效率的原因Java中的基本數據類型不作爲對象使用。
然而,許多Java中的方法需要對象作爲參數。
(例如,集合類ArrayList x = new ArrayList(); x.add(17); )
Java提供了一個方法,可將基本數據類型併入對象或包裝成對象。)
Boolean:
Character:
Short:
Byte:
Integer:
1)字符串轉數值Integer.parseInt()/Integer.valueOf()
數值轉字符串Integer.toString()/String.valueOf()/String.format("%d",i)
2)BigInteger的應用
https://blog.csdn.net/qq_42677329/article/details/89395088
Long:
Double:
ps:- 每一個包裝類覆蓋了Object類中定義的toString, equals, 和 hashCode方法。
- 因爲所有的數值包裝類實現了 Comparable 接口, 所以這些類中都實現了compareTo方法。
- 等於‘==’和‘!=’運算符兩端作用於包裝類時,是引用比較。一律使用equals進行值比較。
- 包裝類沒有無參構造方法
所有包裝類對象一旦創建,其內部的值就不可以再改變了。 - JDK 允許基本數據類型和包裝類之間的自動轉換。
(2)String類
區別於類StringBuffer和StringBuilder :可變字符串類,創建該類的對象後,可以隨意修改,變更字符串的內容。在多線程共享操作中使用StringBuffer,否則使用StringBuilder,效率更高。
正則的使用 :導入java.util.regex.Matcher;java.util.regex.Pattern
(https://www.runoob.com/java/java-regular-expressions.html )
get:
.代表任何字符
代表0個或多個
\d代表數字:[0-9],使用時應該是[\\d]
[\d][02468]
構造方法 :
ps:-
String繼承Object,實現Comparable接口。它重寫了父類的某些方法,包括equals()方法,hashCode(),toString()等方法。
-
實現了Comparable接口的compareTo()方法
-
對String而言,==用來比較引用是否相等,equals用來比較內容是否相等。
(3)Math類
Math.PI 常量π
Math.random() 獲得0-1範圍內的一個隨機數
Math.sin(x)
Math.pow(a,b) 返回a的b次方
Math.sqrt(x)
Math.max(a,b)
ps:當利用隨機數時候若要用int類型的強制轉換時,注意是(int)(Math.random()*10),若寫成(int) Math.random()10,後者是先強制轉換再10,故任何時候這個結果都是0.
(4)Date類
- 比較日期
1.getTime() 方法獲取兩個日期
2.before(),after() 和 equals()
3.compareTo() 方法
Calender類
- 接口
- 數組
(1)數組的複製
用循環語句逐個複製數組的元素
使用System類中的靜態方法arraycopy
使用clone方法複製數組
(2)其他操作 import java.util.Arrays;
排序:sort()
填充:fill()
複製:copyof ()
比較:equals ()
查找:binarySearch () - 枚舉
- 註解
4. 方法的訪問修飾符
-
public :不僅允許跨類訪問,而且允許跨包訪問。
-
default :即不加任何訪問修飾符(稱爲”默認訪問方式”),允許在同一個包中訪問。
-
protect : 允許在任何子類中或在同一個包中訪問,相當於protect 或 default。
-
private : 只允許本類成員訪問。
-
static :用static修飾的方法稱爲靜態方法,該方法是屬於類的。使用靜態方法可以在不創建類對象的情況下,直接使用類名調用。注意,靜態方法中不能直接使用非靜態成員。
-
final :使用該關鍵字定義的方法被稱爲最終方法,它不能在子類重寫(override,動態綁定),但能重載(overload,靜態綁定)。
ps :
1)這些訪問修飾符同樣可用來修飾成員變量。
2)重載:相同函數名但參數個數、參數類型不完全相同。
5.封裝、繼承、多態
1)子類也可叫做特殊類、派生類,基類也可叫做一般類、超類。
2)通過一個變量訪問對象的方法時(向對象發送消息),究竟訪問的是哪一個類中的方法(由於變量的多態性,編譯器不能確定),由該變量此時所引用的是哪一個類的對象來決定(運行時JVM確定實際類型)。(產生方法多態性)
3)繼承:extends 關鍵字
4) super關鍵字指向直接父類:
- 調用父類的構造方法 :super();或super(參數)
- 調用父類的方法 :super.方法名(參數)
6.抽象類
當一個類中包含了抽象的方法(關鍵字abstract),此類就被認爲是一個抽象類,此時該類就不能被實例化了。
將抽象類進行的更加徹底,即是接口(關鍵字interface),接口裏不能包含普通方法,接口裏所有的方法都是抽象方法。
接口的主要用途就是被實現類實現。一個類可以實現一個或是多個接口,繼承使用extends關鍵字,實現則使用implements關鍵字。
匿名類
7.泛型generic
泛型類、泛型接口、泛型方法。
好處:
①在編譯的時候檢查類型安全
②並且所有的強制轉換都是自動和隱式的
③提高代碼的重用率。
7.1泛型類通常是各種容器類set、map、List
- 泛型的類型參數只能是類類型
- 另:
- 傳入泛型實參和未傳入泛型實參時的寫法差異
- 泛型方法
- 用通配符?實現泛型數組
8.異常類
異常類繼承體系
-
Error:一般是指虛擬機相關的問題,如系統崩潰、虛擬機出錯誤、動態鏈接失敗等。這種錯誤無法恢復或不可能捕獲,將導致應用程序中斷。
-
Exception:由程序和外部環境引起的錯誤,這些錯誤能通過程序捕獲和處理。
9. IO
10、線程
get小知識(持續更)
- NaN表示Not a Number
- Infinity表示無窮大
- -Infinity表示負無窮大
- Java沒有給方法中的局部變量賦予默認值
- java支持內部類
- 獲取字符串的長度用length();而獲取集合的長度用size();獲取數組的長度用length;
- 懸空else時,else總是與最靠近的if 相匹配
- 一旦一個數組被創建,其長度就確定了,不能被修改
- Java類只能有一個直接的父類。但實際上, Java類可以有無限多個間接父類。
- this是消息[該方法]的接收對象[目標對象],而super則是this對象的父對象。
- String對象本質上就是一個字符數組(參見源碼)
- final修飾的類不能被繼承,final修飾的方法不能被重寫
- 接口中聲明的常量默認爲public static final,接口裏的方法總是使用public abstract修飾
- 進行異常捕獲的時候,一定要記住先捕獲小的異常,再捕獲大的異常
- Thread.sleep(1000*3); // 休眠3秒
- Java 的內存回收可以由 JVM 來自動完成。如果你手動使用finalize() 方法
- 有時候你希望運行一個程序時候再傳遞給它消息。這要靠傳遞命令行參數給main()函數實現。