標籤:java
註:本文是博主根據自身學習java語言的經曆,結合互連網上各論壇、網站對java知識點的總結,所做的一次學習筆記記錄。主要記錄java程式設計語言的一些易忽視的基礎知識點,以及筆試面試時常被問到的細節。本人常期用c/c++編程,java方面水平有限,高手勿噴,歡迎評論指正。
----------
1 方法出現的順序不會影響編譯過程,程式運行時都是從main函數開始的。
2 Java語言的資料類型是強型別,意味著每一個變數都必須明確聲明資料類型。
3 基本類型
布爾類型:boolean 佔1位元組
字元類型:char 佔2位元組
整型:byte 佔1位元組 short 佔2位元組 int 佔4位元組 long 佔8位元組
浮點型:float 佔4位元組 double 佔8位元組
4 char型採取的是是Unicode全球統一編碼,支援任何世界上官方的語言中的字元。
5 因為java中採取Unicode字元集,所以任何的Unicode中的字元都可以作為標識符的名稱,但考慮字元集的支援問題推薦還是使用英文字母命名。
6 原碼,反碼,補碼
原碼:將數字轉換為二進位,第一位為符號位,正數為0,負數為1。
反碼:正數的反碼和原碼相同,負數的反碼將原碼符號位之外的位逐位取反。
補碼:正數的補碼和原碼相同,負數的補碼將反碼加1。
最後強調一點,電腦儲存資料用補碼形式來儲存。
7字串不是基本類型,String是java.lang包中的一個類,是參考型別的,8種基本類型中沒有一個是String類型。
8 String s = “”;和String s = null;的區別:第一個表示s被賦值,指向了一個字串對象,第二個表示s沒有指向任何對象執行個體,是真空。
9 判斷字串內容相同用equals方法判斷,==只能判斷引用是否相同。
10 提供使用者輸入使用javav.util.Scanner類
Scannersc=new Scanner(System.in);
X=sc.nextInt();
Y=sc.nextDouble();
Z=sc.next();
T=sc.next().charAt(0);
11 以下建立數組對象都是合法的:
int[] a = new int[3];
int[] a = {1,2,3};
int[] a = new int[] {1,2,3};
12 得到數組長度用length屬性,得到字串長度才有length()方法。
13 java.util.Arrays類提供了很多關於數組的實用方法。
14 類之間的3種關係:依賴關係(uses-a)、聚集關係(has-a)、繼承關係(is-a)。
15 一個java源檔案可以寫多個類,但必須只能有一個公有類,並且檔案名稱和公有類的類名相同。
16 類中有屬性(資料域),方法,構造器(構造方法)。
17 一個構造器調用另外一個構造器需要用this()文法調用,需要注意的是調用語句必須是構造器中的第一句。
18 執行個體成員和靜態成員的區別
執行個體成員:是屬於對象執行個體的,用對象.成員名稱文法調用
靜態成員:和對象執行個體無關,是屬於類本身的,用類名.成員名稱文法調用
19 靜態初始化塊statci{}的執行時機是在類被載入的時候,僅執行一次。
20 包實際上就是物理上的檔案夾,可以把類放到不同的包中。
21把一個類放到包中,需要在類中需要加上包聲明package語句,必須寫在源檔案的第一句。
22 當使用的類和當前類並不在同一個包中的時候,用import語句匯入。
23 java中java.lang包中的類是自動匯入的。
24完整類名:頂層包名.子包名.類名。
25局部變數和全域變數的區別
區別 |
局部變數 |
全域變數 |
聲明位置 |
方法或塊內部 |
方法外類內部 |
存取權限修飾符 |
沒有存取權限 |
有存取權限 |
預設值 |
沒有預設值 |
有預設值 |
使用形式 |
直接使用 |
對象調用 |
範圍 |
在方法或語句塊內部 |
整個類 |
生命週期 |
進入方法或語句塊建立退出方法或語句塊銷毀 |
隨著對象的建立而建立隨著對象的銷毀而銷毀 |
26 超類中申明為private時,用super調用超類的建構函式,super方法的代碼必須位於子類建構函式的第一行。
27 子類可以繼承父類的資料域(屬性),方法,但構造器不能繼承。
28 多態:存在具有相同名稱的不同方法。
29 重寫:子類的方法具有與超類中相同的方法名,但是具有不同的行為。
30 私人成員能被子類繼承,但是由於存取權限的控制,在子類中不能直接使用父類的私人成員。
31 Object是所有類的根類,任何類如果沒有寫顯式的繼承語句,預設都是直接繼承Object類的。
32 java中是單繼承,一個子類只能有一個父類。
33 存取權限修飾符有有四種:
private:私人,只能在被類中被訪問
default:預設,只能被同一個包中的類訪問
protected:受保護的,只能被同一個包中的類和不同包中的子類訪問
public:公有,可以被任何類訪問
34 覆蓋方法的規則
方法名相同
方法的參數類型,個數,順序至少有一項不同
方法的傳回型別和修飾符均不受限制
35 this和super作用
this:本身代表當前的對象引用,可以用this.成員名稱調用當前對象的屬性和方法,如果屬性和局部變數重名,可以用this.屬性名稱和局部變數區分開。也可以用this()文法調用本類重載構造器。
super:本身是一個特殊關鍵字,可以用super.成員名稱調用從父類繼承的屬性和方法,也可以用super()文法調用父類構造器。
36 多態對象只能使用父類的成員,但如果多態對象使用了被子類覆蓋的方法,則會動態綁定使用子類的成員,稱為虛擬方法調用。
37 instanceof操作符是作什麼用處的?
可以判斷一個對象的類型是否是某一個類的類型或子類,也可以判斷這個對象的類型是否是一個介面的實作類別。
38 toString方法在列印語句中傳入參考型別的對象或者對象和字串作串連時會自動被調用。
39 覆蓋equals方法和hashCode方法必須保證當兩個對象equals比較為true的時候,返回的hashCode相同,當比較為false的時候,返回的hashCode不同。
40 java中有8個封裝類,正好對應8種基礎資料型別 (Elementary Data Type)。
分別是:BooleanByte Short Integer Long Character Float Double
41 裝箱和拆箱
裝箱指的是把基本類型封裝成封裝類的參考型別
拆箱指的是把封裝類形式的參考型別轉換為基本類型
Integer intObj = 10;//自動裝箱
int i = intObj + 5;//自動拆箱
42 final修飾符
final修飾符可以修飾類,方法,變數
final類為最終類,不能被子類繼承
final方法為最終方法,不能被子類覆蓋
final變數為常量,只能賦一次值
43 abstract修飾符
abstract修飾符可以修飾類和方法。
abstract類為抽象類別,是不能建立對象的。
public abstract class Employee{};
abstract方法為抽象方法,只有方法的聲明,沒有具體的實現。
需要注意的是:
有抽象方法的類一定是抽象類別,抽象類別不一定有抽象方法,抽象類別也有構造器,但不能建立對象執行個體。
44 abstract不能和private,static,final一起使用。
45 可以在非抽象方法中調用抽象方法,模板方法設計模式就是典型的這種調用。
46泛型的主要特點是型別參數化,後期綁定資料類型。
47泛型不支援基本類型,只支援參考型別。
48 介面中的成員中資料域必須是(public static final修飾)公有靜態常量,方法必須是(public abstract修飾)公有抽象,沒有構造方法。
49 介面和類之間是實現關係,一個類用implements語句實現了某介面,這個類被稱為介面的實作類別,一個類可以實現多個介面,一個類實現了某介面,必須覆蓋這個介面中的所以方法,否則這個類必須是個抽象類別。
50 內部類可以分成,執行個體內部類:聲明在方法外邊沒有static修飾符;靜態內部類:聲明在方法外邊有static修飾符;局部內部類:聲明在方法裡邊。
如何在執行個體內部類中訪問外部類的成員?
在執行個體內部類中可以直接使用外部類的成員,不需要建立外部類的對象執行個體,但是如果在內部類中的成員名稱屏蔽隱藏了外部類的成員(即外部類和內部類的成員名相同),則需要用”外部類名.this.成員名”訪問外部類成員
51 異常處理
異常的對象的根類是Throwable類,Throwable類分成Error類和Excepion類兩個分支
Error類表示嚴重錯誤,Exception類表示可以在程式中處理的錯誤。
52 Exception類分成運行時異常和非運行時異常(已檢查異常),運行時異常編譯不檢查,在運行時才會發生異常;已檢查異常編譯時間就會作檢查,不處理異常則通不過編譯。
53 處理異常代碼finally語句在任何時候都會執行,不管有沒有發生異常。
54 覆蓋方法不能比父類方法拋出更多異常。
55 字串String是不可變類,一經建立就不能修改其內容了。
字串的常用方法有:
charAt方法:可以返回指定位置的字元。
substring方法:可以截取子字串。
length方法:返回字串長度。
indexOf方法:尋找子串的位置。
lastIndexOf方法:反向搜尋子串的位置。
replaceAll方法:替換字串。
split方法:分解字串。
toLowerCase, toUpperCase方法:字串大小寫轉換。
56 StringBuffer是可變類,String是不可變類,StringBuffer類是安全執行緒的,StringBuilder類是線程不安全的。
57 Set集合和List集合共同的父介面是Collection集合。
Set: Collection的子介面,不記錄元素的儲存順序,且不允許有重複元素。
List: Collection的子介面,記錄元素的儲存順序,且允許有重複元素。
58 ArrayList和LinkedList有什麼不同
ArrayList 的內部實現是基於內部數組Object[],所以從概念上講它更像數組。
LinkedList的內部實現是基於一組串連的記錄,所以它更象一個鏈表結構,所以它們在效能上有很大的差別。
ArrayList 隨機訪問比較塊,但插入和刪除元素比較慢,LinkedList但插入和刪除元素比較快,但隨機訪問比較慢。
59 HashTable是安全執行緒的,HashMap是線程不安全的
60 Vector是安全執行緒的ArrayList是線程不安全的
61 FileInputStream檔案輸入位元組流,FileOutputStream檔案輸出位元組流,FileReader檔案輸入字元流,FileWriter檔案輸出字元流。如果是純文字檔案應該用字元流,如果是二進位檔案應該用位元組流。
62 線程有有四種狀態,分別是:新生狀態,可運行狀態,阻塞狀態,死亡狀態。
63 線程的同步需要用什麼方法
舊的方法是用synchronized關鍵字
新的方法是用ReentrantLock類的lock和unlock方法
******************
hao_09
時間:2015/8/8
文章地址:http://blog.csdn.net/lsh_2013/article/details/47361779
******************
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java基礎知識點總結