1. 程式人生 > >Java學習筆記:知識總結

Java學習筆記:知識總結

字節數 都是 eem 信息 hashmap 想要 trees 賦值 基本數據

概述

1991年由sun公司開發的名稱為Oak的語言,1994年更名為Java。

JDK:Java Development Kit,Java的開發和運行環境,Java的開發工具和JRE。

JRE:Java Runtime Environment,Java程序的運行環境,Java運行的所需的類庫和JVM(Java虛擬機)。

Java常用命令:javac 是負責編譯的部分,當執行javac時,會啟動java的編譯器程序。對指定擴展名的.java文件進行編譯,生成了jvm可以識別的字節碼文件,即class文件,也就是java的運行程序。java 負責運行的部分,會啟動jvm加載運行時所需的類庫,並對class文件進行執行。一個文件要被執行,必須要有一個執行的起始點,這個起始點就是main函數。

語法基礎

數據類型:基本數據類型(四類八種) 引用數據類型(數組 類 接口)

基本數據類型:整數 byte short int long 小數 float double 字符 char 布爾 boolean,所占字節數分別為 1 2 4 8 4 8 2 1

數據度量單位:比特(位),bit 是計算機晶體管的一種狀態(通電與斷電)就是0與1,真與假,是計算機最基本的傳輸單位;字節 Byte 是計算機信息技術用於計量存儲容量的一種計量單位,1Byte = 8bit ,1KB = 1024 Byte;字符 一個字符是一個單位的字形、類字形單位或符號的基本信息,UTF-8編碼中,一個英文字母占1Byte,一個漢字占3-4Byte。

Java程序在運行時,需要在內存中分配空間,為了提高效率,就對數據進行了不同的空間劃分,具體分為5種內存空間:

寄存器(程序計數器):保證線程切換後能恢復到原來的執行位置;

本地方法區:為虛擬機執行使用到的Native方法服務;

棧(虛擬機棧):存儲的都是局部變量,方法被調用時,創建棧幀,只要數據運算完成所在的區域結束,該數據就會被釋放;

堆:用於存儲數組和對象,也就是實體。每個實體都有內存首地址值,堆內存中的變量都有默認初始化值,因為數據類型不同,值也不一樣;

方法區:存儲被虛擬機加載的類信息,常量,靜態常量,靜態方法等。(參考文檔https://www.cnblogs.com/LoganChen/p/6824366.html)

面向對象

面向對象的三大特性:封裝 繼承 多態。

關鍵字 static 是一個修飾符,用於修飾成員(成員變量和成員函數)。特點:可以實現對象中的共性數據的對象共享,被靜態修飾的成員可以直接被類名所調用,靜態隨著類的加載而加載。靜態方法只能訪問靜態成員,不可以訪問非靜態成員,原因是靜態方法加載時,優先於對象,所以無法訪問對象中的成員。靜態方法中不能使用this super關鍵字,因為this代表對象,而靜態在時,有可能沒有對象,所以this無法使用。主函數是靜態的。

成員變量和靜態變量的區別:成員變量屬於對象,也稱實例變量;靜態變量屬於類,也稱為類變量;成員變量存在於堆內存中;靜態變量存在方法區中;成員變量隨著對象創建而存在,隨著對象被回收而消失;靜態變量隨著類加載而存在,隨著類的消失而消失;成員變量只能被對象所調用,靜態變量可以被對象調用,也可以被類名調用。所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。靜態的生命周期很長。

靜態代碼塊:就是一個有靜態關鍵字標示的一個代碼塊區域。定義在類中。可以完成類的初始化,靜態代碼塊隨著類的加載而執行,而且只執行一次(new多個對象時就只執行一次),如果和主函數在同一類,優先於主函數執行。

靜態代碼塊、構造代碼塊、構造函數同時存在時的執行順序:靜態代碼塊 〉 構造代碼塊 〉 構造函數。

關鍵字 final 是一個修飾符,可以修飾類(修飾後不可以被繼承)、變量(修飾後是一個常量,只能賦值一次)、方法(不可以被重載)。

內部類:直接將A類定義在B類中,A類就稱為內部類。內部類可以直接訪問外部類的成員,而外部類想要訪問內部類,必須要建立內部類對象。

匿名內部類:沒有名字的內部類,就是內部類的簡化形式。一般只用一次就可以用這種形式。匿名內部類其實就是一個匿名之類對象。想要定義匿名內部類:內部類必須繼承一個類或者實現接口。

匿名內部類的格式:new 父類名或接口名 ( ) { 定義之類成員或者覆蓋父類方法 }.方法名( );

異常

異常:程序在運行時候出現的不正常情況。Error:錯誤,需要修正程序解決;Exception:異常,可以有針對性處理方式。

線程

進程:正在進行中的程序。其實進程就是一個應用程序運行時的內存分配空間。

線程:進程中一個程序執行控制單元,一條執行路徑。進程負責的是應用程序的空間標示,線程負責的是應用程序的執行順序。

隨機性原理:因為cpu的快速切換,哪個線程獲取到了cpu的執行權,哪個線程就執行。

線程的五種狀態:

新建狀態(New):線程對象被創建;

就緒狀態(Runnable):可執行狀態,隨時可被cpu調度執行;

運行狀態(Running):線程獲取cpu權限進行執行;

阻塞狀態(Blocked):阻塞狀態是線程因為某種原因放棄cpu使用權,暫時停止運行,直到線程進入就緒狀態,才有機會轉到運行狀態;

消亡狀態(Dead):線程執行完成了或者因異常退出了run()方法,該線程結束生命周期。

字符串

Java中,字符串一但被初始化,就不可以被改變,存放在方法區的常量池中。

StringBuffer 字符串緩沖區:構造一個其中不帶字符的字符串緩沖區,初始容量為16個字符char,是一個長度可變的且可以存儲任意類型數據的容器,since 1.0。

StringBuilder 字符串緩沖區:和StringBuffer類似,用在字符串緩沖區被單個線程是用的時候,二者區別,StringBuilder效率高,線程不安全,since 1.6。

集合

集合是用於存儲數據的容器。

集合和數組的區別:數組固定長度,集合可變長度;數組可以存儲基本數據類型 或 引用數據類型,集合只能存儲引用數據類型;數組存儲的元素必須是同一類型,集合存儲的元素可以是不同數據類型。

數據結構:就是容器中存儲數據的方式。

Collection :List 有序(ArrayList LinkedList Vector) 和 Set 無序(HashSet LinkedHashSet TreeSet)。

Iterator 叠代器:是一個接口,作用:用於取集合中的元素。

Map:Hashtable 底層是哈希表數據結構,線程安全,不可存null鍵,null值 since 1.0;HashMap:底層是哈希表數據結構,線程不安全,不可以存null鍵,null值 since 1.2;TreeMap:底層是二叉樹結構,可以對Map集合中的鍵進行指定順序的排序 since 1.2。

IO流

流可以理解為數據的流動,就是一個數據流。IO流最終要以對象來體現,對象都存在IO包中。

流的分類:輸入流和輸出流;因處理的數據不同又可以分為字節流和字符流。

字節流:處理字節數據的流對象。設備上的數據無論是圖片或者dvd,文字,它們都以二進制存儲的。二進制的最終都是以一個8位為數據單元進行體現,所以計算機中的最小數據單元就是字節。意味著,字節流可以處理設備上的所有數據,所以字節流一樣可以處理字符數據。

那麽為什麽要有字符流呢?因為字符每個國家都不一樣,所以涉及到了字符編碼問題,那麽GBK編碼的中文用unicode編碼解析是有問題的,所以需要獲取中文字節數據的同時指定的編碼表才可以解析正確數據。為了方便於文字的解析,所以將字節流和編碼表封裝成對象,這個對象就是字符流。只要操作字符數據,優先考慮使用字符流體系。

流的體系因為功能不同,但是有共性內容,不斷抽取,形成繼承體系。該體系一共有四個基類,而且都是抽象類。

字節流:InputStream OutputStream 字符流:Reader Writer

在這四個系統中,它們的子類,都有一個共性特點:子類名後綴都是父類名,前綴名都是這個子類的功能名稱。

close( )和flush( )的區別:
flush( ):將緩沖區的數據刷到目的地中後,流可以使用。
close( ):將緩沖區的數據刷到目的地中後,流就關閉了,該方法主要用於結束調用的底層資源。這個動作一定做。

End

Java學習筆記:知識總結