java學習記錄貼

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()函數實現。
發佈了31 篇原創文章 · 獲贊 1 · 訪問量 5885
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章