Java基本知識點

Java基礎知識java

一、關鍵字算法

二、標識符windows

3、基本類型和引用類型數組

4publicdefaultprotectedprivate緩存

5staticFinalabstract安全

6、構造方法:服務器

7this super網絡

8== equalsapp

9、字符容器(StringStringBufferStringBuilder函數

10File(Java 文件操做)

11、流  

12、經常使用類(內部類、匿名類、抽象類)

13、字符問題

14、三大特性(封裝、繼承、多態)

15、繼承(extends

16、接口(implements

17、重寫和重載

18、數組

19、泛型

20、枚舉

21、語法基礎

22hashcodeequals  (MD5的計算是目前最普遍的哈希算法)

23、類的加載執行、初始化

24、網絡通訊(Socket

25、調用方法的參數傳遞問題

26public static void main(String[]  args){}

27system.out.print():  類名.成員變量.靜態方法

 // 陌生單詞:compile編譯、deprecation過期、PermGen永久代(方法區)、Heap堆內存

 

準備明年開始找工做,全部刷了牛客app上的900多道Java相關的筆試題,

整理了答案下面的 精華知識,以備不時之需。若有不合理之處,萬望知會。

 

 

 

1、關鍵字

修飾符:  abstractclassfinalprivateprotectedpublicstatic7

數據類型:booleanbytechardoublefloatintlongshortvoid9

語句組成:breakcasecatchcontinuedefaultdoelseextendsfinally forifimplementsimportinstanceofinterfacenewpackage returnsuperswitchsychronizedthisthrowthrowstrywhile26

特殊含義關鍵字:assertconstgotoenumnativestrictfptransientvolatile7

assert: 斷言,用於調試,多被junit代替,IDE默認不開啓。

const:預留關鍵字。

goto:預留關鍵字。

enum: 枚舉。

native: 本地方法。

strictfp: 精確浮點,可用於類、接口、方法。

transient: 免除變量序列化。

volatile: 被設計用來修飾被不一樣線程訪問和修改的變量

java關鍵字:truefalsesizeofnullserilizable

 

 

2、標識符

  標識符是用來標識類名、變量名、方法名、類型名、數組名及文件名的有效字符序列。

一、標識符由字母、數字、下劃線、美圓符號組成,長度不受限制。

二、第一個字符不能爲數字。

三、標識符不能是關鍵字。

四、標識符不能是truefalsenull(字面常量)

 

 

3、基本類型和引用類型

Java中基本類型有四類八種,也稱爲原生類、內置類。其他的都屬於引用類型

整數:(byteshortintlong)       引用類型:(ByteShortIntegerLong)

浮點:(floatdouble)   引用類型:(FloatDouble)

字符型:(char2)   引用類型:(Character)

邏輯型:(bolean1)   引用類型:(Boolean)

nume(枚舉)是基本類型

String是基本類型

  一個字符常量表示一個字符或一個轉義字符,被一列ASCII單引號包裹。

 數組不管是定義實例變量仍是局部變量,若沒有初始化,都會被自動初始化。

   char[] ch = new char[3];  //默認空格

   int []  arr = new int[2];  //默認0

   String[] string = new String[2];  //默認null

 

Byte類型引用包裝類默認爲null,byte的默認值爲0byte[-128,127]

char類型存儲unicode碼,佔兩個字節16位,默認值爲’’,默認使用GBK編碼,可存中文漢字。UTF-8一個漢字佔3個字節,GBK佔兩個字節。

java中的小數類型默認值爲double.

 

包裝類型:Integer a=1; a=2; 在方法內===>等於從新new一個a對象,

 在方法外===>等於改變a的指向地址,

包裝類對象作基本操做(拆比較、計算)會拆箱,再也不是引用傳遞。

引用類型通常有 數組(數組是一種對象,有行爲,大小一旦肯定,不能改變)、類、接口。

a = Integer.parseInt(「1024」);==>parseIntString對象類型轉換爲 int

b= Integer.ValueOf(「1024」).intValue(); ===>ValueOfString轉換爲Integer類型,(JDK支持裝箱拆箱)intValue(); Integer類型轉化爲int類型。

 

Integer i01 = 59;會調用IntegervalueOf方法,判斷是否在[-128,127]之間,返回引用或新建對象。

int i02 = 59;基本類型,存儲在棧中。

Integer i03 = Integer.valueOf(59);直接返回引用(IntegerCache中的對象引用)

Integer i04 = new Integer(59); 直接建立一個新的對象

i01 == i02; ===>Integer會拆箱成int,作值之間比較  true

i02 == i04; ====>Integer會拆箱成int,作值之間比較 true

 

4publicdefaultprotectedprivate

   訪問權限

 

5staticFinalabstract

  static : 在編譯器就肯定了函數和地址,不存在多態狀況

靜態方法屬於類,靜態方法在對象實例建立前已經存在了,它的使用不依賴對象是否被建立,當咱們經過實例來調用方法時,實際上仍是把實例對象轉換成類去調用方法,這裏的null沒有意義。((TestClass)  null).testMethod();能夠寫成TestClass t = null; t.testMethod(); null能夠被強制轉換成任意類型對象。(空指針能夠操做 類變量和類方法)

靜態方法不能引用非靜態變量。不能調用類的對象方法,在類方法中不能使用thissuper。但能夠new對象,有了對象就能夠實現實例的成員變量和方法。

static修飾的爲類變量和類方法,在類初始化時加載完成,能夠被成員方法調用或訪問。

 

 

Final: 能夠用來修飾類、變量、方法、引用。類不能被繼承,方法不能被重寫,能夠繼承和重載。變量經修飾變爲常量,引用不能變,在編譯期就肯定,變爲宏變量。

final修飾的對象引用不能變,即地址不可變,但地址中的值可變。 p.name = 」aaa」; p.name=」bbb」;但對於String(只讀類型的引用???)特殊,final String str=」aaa」; str=」bbb」; //編譯不經過,引用被改變。

final修飾方法:聲明final就是防止功能被修改。

final修飾局部變量能夠在聲明時初始化,也能夠在第一次使用時經過方法或表達式賦值,

final修飾的成員變量能夠在類方法、聲明、初始化塊中賦值,==>沒有默認值,聲明同時賦值。

 

 

6、構造方法:

  構造方法能夠被publicprivateProtected修飾,不能被繼承。

 

7this super

  this: 表示某個對象,this能夠出如今實例方法和構造方法中,但不可出如今類方法中。

  this出如今構造方法中,表明當前對象,通常省略。

  this出如今實例方法中,表明正在調用當前方法的對象,成員變量和局部變量重名時出現,多出如今set方法中,對象的成員變量。

 

 super:子類一旦隱藏了繼承的成員變量,那麼子類建立的對象就再也不擁有該變量,該變量就歸super關鍵字所擁有。

在子類的構造函數中默認有super();

父類沒有無參構造時,需在子類的構造方法中顯式調用super(「xxx」);

  只有在重寫了父類的方法以後,再調用父類的方法須要使用super調用。  

父類靜態方法不能被子類重寫,只是被隱藏,也須要使用super調用。

 

8== equals

   == 比較類型和值(也能夠說是比較地址)

 

   equals 底層也採用 == 作比較,但String中重寫了Object中的此方法,用於比較字符串的內容。

  Objectequals的源碼,沒有重寫equals時,底層直接用「==」作判斷。而String中重寫了方法。

  public boolean equals(Object obj){

     return (this==obj);

}

重寫後的equals方法:

  public static boolean equals(String str1, String str2) {

       return str1 == null ? str2 == null : str1.equals(str2);

  }

 

9、字符容器(StringStringBufferStringBuilder

  String傳遞是引用傳遞,StringBuffer是引用傳遞===>可改變內容,不可改變引用地址。

 String s = new String(「xyz」);  分常量池和堆。

xyz可能存在於兩個地方,編譯期遇到」xyz」,檢測到常量池沒有xyz存在,就在常量池中建立一個xyz常量。

 new String(「xyz」)會在執行時,在堆中建立一個實例。

 

 

10File(Java 文件操做)

1)File類是對文件總體或者文件屬性操做的類,例如:建立文件,刪除文件等,文件內容用IO流操做。

2)能用文本文檔打開的都是文本文件(文本打開亂碼都不是文本文件),用特殊應用打開的都是二進制文件。

3)輸出過程到達文件或流的末尾,會拋出EOFException,正常狀況異常 會被處理返回特殊值(read()會返回-1)

11、流  

字節流繼承於InputStreamOutputStream

字符流繼承 InputStreamReader/OutputStreamWriter    

 

 

1)InputStreamReader的構造函數:

 InputStreamReader(InputStream  in): 建立一個使用默認字符集的InputStreamReader.

InputStreamReader(InputStream in,Charset cs):建立使用給定字符集的InputStreamReader

InputStreamReader(InputStream in,CharsetDecoder dec):建立使用給定解碼字符集的InputSt..

InputStreamReader(InputStream in,String charsetName):建立使用給定字符集的InputStream..

BufferedReader的構造函數:

BufferedReader(Reader in):建立使用默認大小輸入緩衝區的緩衝字符輸入流

BufferedReader(Reader in,int size):建立使用指定大小輸入緩衝區的緩衝字符輸入流

 

Writer的構造函數:

Protected ... Writer( ):建立一個字符流writer,其做用是同步到writer自身,

Protected...Writer(Object  lock):建立一個字符流writer,做用是同步到給定的對象

 

管道流:管道其實是一個大小固定的緩衝區,管程對於管道兩端的進程而言,就是一個文件,但它不是普通文件,它單獨構成一種文件系統,而且只存在內存中,相似於半雙工通訊。管道的內存大小一般是內存上的一頁,它的大小並不受磁盤容量大小的限制。當管道空時,進程讀操做會堵塞,管道滿時,寫操做會堵塞。

PipedInputStream的構造函數:

PipedInputStream():建立一個還沒有鏈接的PipedInputStream.

PipedInputStream(int pipeSize):建立還沒有鏈接的PipedInputStream,並指定管道緩衝區的大小

PipedInputStream(PipedOutStream src):建立PipedInputStream,鏈接到管道輸出流src

PipedInputStream(PipedOutputStream sc,int pipeSize):建立PipedInputSt...,指定大小,鏈接src

 

 

12、經常使用類(內部類、匿名類、抽象類)

對於局部類、方法、變量,只針對特定區域有效,訪問權限無效。

 

外部類的修飾符能夠爲 public  和 默認缺省修飾符(default)。由於外部類在包中,只有包可見和包不可見。

  外部類中的內部類能夠看作是外部類的成員變量。

 

內部類:(常規內部類、靜態內部類、局部內部類、匿名內部類)

  常規內部類:沒有用static修飾且定義在外部類類體中,可直接訪問外部類成員變量、方法。

  靜態內部類:與靜態內部方法類似,只能訪問外部類的static成員,可經過對象引用訪問外部類的成員變量。(實例變量、方法)

局部內部類:存在於方法體或語句塊中(包括方法、局部塊、靜態初始化塊)不能加任何修飾符,只對局部有做用。

匿名內部類:定義一個類的同時建立一個沒有名字的類稱爲匿名內部類,只用一次。

 

靜態內部類才能夠定義static方法,

內部類權限修飾符能夠爲publicprotected(同包子類)、默認(同包)private(同類有效),因此說一個java文件能夠有多個public修飾的類。

爲何使用內部類?每一個內部類都能獨立的繼承一個(接口)實現,不管是外部類是否已繼承。最大的優勢就是它可以很是好的解決多重繼承的問題。

1)內部類能夠有多個實例,且每一個實例有本身的狀態信息,相互獨立。

2)在單個外部類中,可讓多個內部類以不一樣方式來實現同一個接口,或者繼承同一個類。

3)建立內部類實例對象不依賴外部類。

4)內部類沒有使人迷惑的」 is--a 」關係,它就是一個獨立的實體。

5)內部類提供了更好的封裝,除了外部類,其餘類不可訪問。

 

 

匿名類:

匿名內部類:用在任何容許存在表達式的地方,只能用一次。

局部內部類:用在任何容許出現局部變量的地方,能夠在本身的定義域中屢次使用。

  

 

抽象類:通常使用Protected修飾

abstract不可與finalstaticprivate共存,由於須要被繼承,重寫方法。

抽象方法中不能有方法體,抽象類中能夠沒有抽象方法。

抽象類有構造方法,能夠給子類初始化,但不可實例化,(可用在匿名內部類??)

抽象類能夠實現接口,也能夠繼承自抽象類。

抽象類有構造方法,但不是用來實例化的,而是用來初始化的。

    抽象類能夠定義普通成員變量而接口不能夠,可是二者均可以定義靜態成員變量。

 

13、字符問題

  java語言使用Unicode字符集,而ASCII是國際上使用最普遍的字符編碼,BCD是一種數字壓縮存儲編碼Unicode(又稱統一碼、萬國碼、單一碼)是計算機學領域上的一項業界標準,包括字符集、編碼方案等,爲每種語言的每一個字符設定了統一而且惟一的二進制編碼,以知足跨語言,跨平臺的文本轉換。一個unicode(中英文同樣)佔兩個字節(16bit)

UTF-8UTF-16UTF-32都是將Unicode裝換到程序數據的編碼方案。

JVM使用UTF-16保存字符。

  編碼(Unicode)就是一個編號(數字)到字符的一種映射關係,一對一的映射表。

  編碼格式(UTF-8)就是序列化或存儲編碼中的那個編碼的一種」格式」。

 

中文漢字在java(Unicode)中佔兩個字節,在utf-8中佔三個字節,在gbk中佔兩個字節。

 

標準ASCII 只使用7bit,擴展的ASCII 使用8bit,ASCII 中包括一些不可打印字符,0-31分配給不可打印字符,

ANSI一般使用0x00--0x7f範圍的一個字節來表示1個英文字符,即擴展的ASCII編碼。表明本地編碼格式。

  簡體中文windows中,ANSI表明GBK,GB2312 是國標。

  繁體中文  ANSI表明 Big5

  日文中   ANSI 表明shift_JIS

 

14、三大特性(封裝、繼承、多態)

  

 

 

1五、繼承(extends

  繼承:基類和派生類是父子關係,超類和子類也是父子關係,父類中類方法不會被繼承,屬於super關鍵字所擁有。

 

16、接口(implements

   接口變量用public static final修飾,爲常量。方法沒有方法體,爲抽象方法。

   接口的方法修飾符爲 public  abstract,接口是通用的,不設訪問權限。  

接口中沒有構造函數,

   接口沒有構造函數,因此不能實例化,

 

17、重寫和重載

  多態包括重載和重寫,

重載是方法的多態,調用方法時經過傳遞給方法的不一樣參數(參數個數、參數類型)來肯定具體使用哪一個方法。(向上轉型,編譯看左邊,決定哪些方法編譯,運行看實際類型選擇)

方法名一致,返回值類型和訪問權限沒有要求。

重載選擇執行方法時,是參考傳入參數的實際類型,而不是靜態類型(特別注意上轉型)

 

重寫存在於子父類中,遵循兩同兩小一大原則,

方法名、參數相同。

返回值類型、拋出異常要小。

訪問權限要大。

對於成員變量,編譯和運行都參考左邊。

對於成員函數(非靜態):編譯看左邊,運行看右邊。

對於靜態函數:編譯和運行都看左邊。

 

18、數組

19、泛型

  泛型防止代碼編寫出錯,在編譯期,泛型會被擦除,並不會影響運行速度。

 

20、枚舉

  枚舉是JDK1.5新增的特性,它是一種新的類型,表示特定的數據片斷,類型安全,是特殊類,擁有成員變量和方法。 (寫一個根據輸入輸出星期程序) 

全部的枚舉值都是類靜態常量,在初始化時會對全部的枚舉值對象進行一次初始化。

 

21、語法基礎

1if(x=y)==>會出錯,發生類型強轉異常。(mismatch)

2int x=1;float y=2;  x/y=1.0/2.0=0.5==>發生自動轉型,byte-short-char-int-long-float-double

3public class A extends B implements C{}  ===>先繼承再實現

4package在程序文件的第一句,且沒有註釋。

5float f = 1.0f;  f必須有。

6int a[] = null;  a[0] = 1;  拋出NullPointException

7<< 左移,乘以2n次方, << 無符號左移,末尾補0,  >>> 無符號左移

8instanceOf運算符用來判斷一個變量所引用的對象的實際類型,(重點考察上轉型看實際)

9、強制轉int型,會向下取整。 int(5.7) = 5

10、包裝類相關:

  兩種不一樣類型的引用不能進行」==」比較,例如:IntegerDouble

  s.equals(q);在進行equals比較以前,會對q調用Integer.valueOf;進行自動裝箱,因爲IntegerCache中已經存在q,因此,直接建立了一個新的Integer實例,但值也是q,知足條件,返回真。

   包裝類也重寫equals,沒有常量池,Integer  s = new Integer(q)Integer t = new Integer(q);強制在堆內存建立 q 對象實例。

11String str1 = new String(「hello」);   //正常建立對象保存在堆區

    String str2 =  「Hello」;    //建立的字符串,保存在字符串常量區

12、當使用Integer賦值的時候,java編譯器會將其翻譯成調用ValueOf()方法,好比 Integer i = 127,對於-128127之間的數,Java會對其進行緩存,超過這個範圍則新建一個對象。

13、求數組的長度(容量)length

求字符串的長度:length()

求集合的長度:size().

   

22hashcodeequals  (MD5的計算是目前最普遍的哈希算法)

哈希又稱散列,經過散列算法將任意長度的輸入變成固定長度的輸出,又稱散列值,是一種壓縮映射,散列值可能相同。

1) 若是兩個對象相等,那麼他們必定有相同的哈希值。  

2) 若是兩個對象哈希值相等,它們不必定相等。須要用equals判斷。

 

hash值: 具備等冪性(對象不變,作多少次計算hash值都不變)

對等性(equals計算兩個對象相等,而hash值必定對等)

互異性(若兩個對象equalsfalse,而hash值最好也不一樣)

hash值的計算通常採用 多個成員變量的hash值相加,或 加權值

對象的hash值作key

 

 

23、類的加載執行、初始化

類的加載順序:

父類靜態塊--子類靜態塊--父類初始化塊--父類構造方法--子類初始化塊--子類構造方法

靜態塊---main()---初始化構造塊-----構造方法

靜態域最早初始化,靜態域包括靜態變量和靜態方法,

new一個對象==初始化靜態塊+執行構造函數。

初始化父類靜態變量、靜態代碼塊,

初始化子類靜態變量、靜態代碼塊,

初始化父類普通成員變量、代碼塊、父類構造方法,

初始化子類普通成員變量、代碼塊、子類構造方法,

在繼承存在的狀況下,類的執行:

  父類靜態對象、父類靜態代碼塊

  子類靜態對象、子類靜態代碼塊

  父類非靜態對象、父類非靜態代碼塊、父類構造函數

  子類非靜態對象、子類非靜態代碼塊、子類構造函數

 

 

Java中對字段屬性是靜態綁定(編譯出錯),方法成員是動態綁定(運行出錯)

 

對象的初始化方式(實例化對象)

1)new時初始化 :調用構造函數,分配內存空間,

2)靜態工廠newInstance  

3)反射Class.forName():使用構造方法

4)clone方式:clone只是複製拷貝(深拷貝須要new,淺拷貝不須要,原來的對象的改變不反應在拷貝對象上)

5)反序列化:readObject是從文件中還原對象

 

24、網絡通訊(Socket

  服務器端:ServerSocket server = new ServerSocket(端口號)

 服務器端的經常使用方法:

  ServerSocket(int port)accept()close()getInetAddress()getLocalPort()

  客戶端: Socket soc = new Socket(ip地址,端口號);  

 客戶端的經常使用方法:

   Socket(InetAddress address, int  port)Socket(String  host, int port)close()  

 

25、調用方法的參數傳遞問題

26public static void main(String[]  args){}

   main方法中的變量也是局部變量,

 

27system.out.print():  類名.成員變量.靜態方法

  systemjava.lang的一個類,outsystem內的一個成員變量,這個變量是java.io.PrintStream類的對象。println()java.io.PrintStream類的方法,因此能夠調用類.成員變量.println()方法。

 

// 陌生單詞:compile編譯、deprecation過期、PermGen永久代(方法區)Heap堆內存

相關文章
相關標籤/搜索