百題大全

TuxedoLinux發表於2018-06-01

Java百題大全-獵羽版

轉載請註明連結:http://blog.csdn.net/feather_wch/article/details/78733436

獵羽版Java百題大全,目標是收錄Java的22個分類中所有知識點。希望對希望掌握Java的人有一定幫助。因為都是本人一點點積累總結而來,難免會有錯誤和疏漏,希望能不吝惜賜教,非常感謝!

0-最基本知識點-10題


1、java特點

是一次編譯到處執行

2、JDK組成

包括jre(java執行環境),類庫(3600多種,常用160多),工具(javac.exe,java.exe)

3、java程式碼編譯到執行流程:

1.編寫原始檔 2.javac生成位元組碼檔案 3.直譯器將其載入到java虛擬機器中執行(jvm)

4、下面基本型別是否使用正確

int a = 1.2; × 
int a = (int)1.2; √

float f = 3.4; ×  解析:3.4字面為double 
float f = 3.4f; √

int a = 3;
int b = a + 3.4; × 解析:a自動轉為高精度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5、System.exit(-1)是什麼?

-1 終止當前執行的java虛擬機器
非0 異常中止

6、封裝體現在哪裡?

  1. 將具體實現保護在類內部
  2. 訪問控制修飾符
  3. 包的功能

7、包的功能

  1. 同名類區分開
  2. 方便管理
  3. 控制訪問範圍-使用方法:
    package com.xiaoqiang;
    import com.xiaoqiang;

8、繼承要點

  1. 子類最多繼承一個父類
  2. jdk所有類為object子類
  3. 方法過載:子類不能縮小父類方法的訪問範圍

9、final 作用:功能(常量)

  1. 方法不希望被overide
  2. 變數不希望被改變
  3. final class不能被繼承

10、this

  1. this用於指明具體的object
  2. this只能用在非靜態方法中。

1-物件導論-4題


1、OOP是什麼?

Object-oriented programming(OOP)物件導向程式設計。

2、 抽象是什麼?

例如:組合語言就是底層機器的抽象,C語言是組合語言的抽象,C語言的抽象還是需要我們關注計算機的結構,而不是試圖解決的問題的結構。C語言就是典型的程式導向程式設計。OOP使得程式設計師不侷限於具體的問題。

3、 OOP五大基礎特性

  • Everything is an object.
  • Program is abundle of objects,物件通過傳送訊息告訴彼此應該做什麼。
  • Each object has its own memory made up of other objects(暫譯:每個物件都有自己的記憶體由其他物件組成):你創造的物件可以由其他物件組成,這樣將複雜內容隱藏在簡單物件背後,就可以將複雜內容構建程式序中。
  • 每個object物件都有一個type型別:每個物件都是一個class(類)的例項(instance)
  • 所有的特殊型別物件都可以接受相同的訊息(messages)——例如circle物件也是shape物件,因此circle物件一定能接受shape的訊息。這種可替換性也是OOP非常有用的概念

4、什麼是物件?

一個物件擁有state、behavior和identity(身份)。也就是擁有內部資料、方法和區別於其他任何物件(可以說,每個物件擁有唯一的記憶體地址)。

2-一切都是物件-11題

1、java和C++的聯絡

相比於C++,java是更純的OOP語言。C++和java都是混合語言,但是C++對於混合重視更多,因為C++是向下相容C語言的,使得一些C++的方面更加複雜。

2、記憶體有哪幾部分?具體作用?

  1. register暫存器:最快的記憶體,無法控制。在處理其中,數量非常有限。
  2. stack:在RAM中,通過棧指標來分配和釋放記憶體。這是僅次於暫存器的最快記憶體。基本資料型別,物件的引用等程式中所有內容在其生命週期裡都位於stack中。
  3. heap:一般目的的記憶體池,也位於RAM中。儲存了所有物件。不需要程式設計師控制資源釋放,但是它會比stack消耗更多的功夫在資源排程和回收上。
  4. 常量記憶體(constant storage):存放常量,有些常量在嵌入式系統中也會被選擇性放到ROM中。
  5. Non-Ram Storage(非RAM記憶體):存放在程式之外的資料,比如資料庫之類。

3、我們使用引用操作物件

4、 原始型別是什麼?有什麼用?

相比於物件,java提供了原始型別資料,這些資料不通過引用,直接擁有該資料,並且都被儲存在stack中。因此原始型別是非常高效的。

5、 原始型別資料有哪些?所佔大小是多少?

boolean
char 16bits
byte 8bits
short 16bits
int 32bits
long 64bits
float 32bits
double 64bits
void

6、Java中所有的數都是有符號的

7、 Java中需要高精度數的時候,用什麼物件?

BigInteger和BigDecimal,可以和int、float結合使用,只是需要使用方法而不是操作符。

8、class由什麼組成?

成員變數和成員方法

9、Java中如何處理陣列越界

Java會進行範圍判定,越界後會丟擲異常。

10、static的作用

  1. 表明特定的成員變數和方法不依賴於具體的物件。也會被稱為類資料和類方法(class data\class method)
  2. static指定的method可以通過object.method()和Class.method()呼叫,成員變數也相同。
  3. 靜態類方法不能訪問非靜態方法和變數
  4. 類的非靜態方法不能呼叫靜態方法

11、tags是什麼

提供作者、版本、是否廢棄等資訊
如@author等等

3-操作符-4題


1、!,~作用

!非,~按位取反

2、子面值是什麼?內容?

0x2f 十六進位制,float
0x2F float

0177 八進位制
200L long int
200l long in
200  int
0.1F float
0.1f float
0.1D double
0.1d double

1.39 e-43f = 1.39 x 10-43 //科學計數法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、位運算子

& 位與
| 位或
^ 位異或
~ 位取反
  • 1
  • 2
  • 3
  • 4

4、位移操作符

<< 補0
>> 補符號位0 or 1
>>> 0
  • 1
  • 2
  • 3

4-控制執行流程-2題


1、switch可以用於哪些資料型別

僅有五種:byte、short、int、char、enum

2、java中一共有哪些控制執行的方法

if-else
while
do-while
for
return
break
switch
continue
goto: 只是保留字,還沒有使用。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5-初始化與清理

6-訪問許可權-1題


1、public、private、protected、預設的區別

修飾符 同類 同包 子類 不同包
public
protected  
預設    
private      

7-複用類

8-多型-3題


1、什麼是多型?

一個引用(型別)在不同情況的多種狀態

2、抽象類?

形如:abstract class Animal(){};
1. 不一定有抽象方法
2. 不能被例項化
3. 子類必須實現抽象方法
4. 可以有變數
5. 抽象方法不能被實現

3、介面與抽象類區別

  1. 介面是對繼承的一種補充
  2. 去掉介面不會影響其餘程式碼?
  3. 介面能繼承介面,不能繼承類

9-介面-7題


1、介面的作用

  1. 介面中變數為 static,final int a = 0。常用作全域性變數。例如:Usb.a
  2. 介面可以繼承介面
  3. 體現了多型,以及高內聚低耦合的特點

2、介面和抽象類的區別

  1. interface所有方法不能實現。是更為抽象的抽象類。
  2. 類能implements 多個介面,但只能繼承一個父類

3、介面是否會繼承?

子類會繼承父類關於介面的實現

4、 抽象類abstract

  • 一個class包含abstract方法,該class也必須為abstract類
  • 不能例項化abstract類
  • 一個具體類繼承抽象類,必須實現抽象類的所有抽象方法
  • 抽象類可以繼承抽象類,並且可以不實現其中的抽象方法
  • 抽象類可以不包含任何抽象方法。

5、 Interface

  • 在兩個類之間建立一種協議“protocol”
  • 能實現多重繼承
  • 介面可以有成員變數,但是會隱含的加上static和final
  • 介面的方法methods必須為public

6、介面作用:

  1. 解耦
  2. 多重繼承
  3. 可以用於宣告一組常量:介面中成員變數自動加上static和final。(這些資料會儲存在靜態儲存區域)

7、類繼承超類並且實現了另一個介面

class繼承class和實現interface,之前所有同名的方法,必須要可以通過引數區分,如果僅僅返回值不同,是無法區分會報錯的。因此,不同Interface最好method name不同

8、抽象的定義和作用以及實現方法

  1. 定義:將一類事物的共同特徵總結出來並且構造出一類事物的過程(資料抽象行為抽象,不會去關注屬性和行為內部具體的細節)
  2. 作用:1-隱藏具體實現方式 2-提供擴充套件的能力
  3. 實現方式抽象類和介面

9、抽象類的特點

  1. 抽象類類物件的抽象集合
  2. 抽象類用關鍵字abstract修飾,不能用final修飾抽象類
  3. 抽象方法不能用private、static、final或native修飾。
  4. 包含抽象方法的類一定要是抽象類
  5. 抽象類不一定要有抽象方法
  6. 抽象類不能被例項化

10、介面的特點

  1. 介面類行為方法的抽象集合
  2. 介面interface修飾
  3. 介面中所有方法都是抽象且公有的
  4. 介面中的屬性都是全域性變數=public static final(不用寫)
  5. 介面只能繼承介面
  6. 介面不能例項化-繼承介面的子類可以例項化

11、介面和抽象類的區別

  1. 抽象的層次: 1-抽象類抽象整個事務包括屬性和方法 2-介面是對行為的抽象
  2. 抽象類單繼承;介面多重繼承
  3. 抽象類方法和屬性可以抽象或者不抽象;介面中的必須抽象
  4. 抽象類的實現類可以改變其成員變數,介面的實現類不可以改變屬性=常量

12、子類繼承父類的訪問修飾符只能比父類的更大或者一致

10-內部類-4題


1、內部類和組合(Composition)的區別

2、內部類的作用

  • 程式碼隱藏機制:將class放置於其他class之間。
  • 內部類知道如何與周遭的class(surrounding class = 包含內部類的外部類)交流-【可以自由使用外部類的所有變數和方法】
  • 通過內部類寫的程式碼是簡潔清爽的

3、 內部類的一個特殊例項

如果你想在任何外部類的非靜態方法以外的方法中獲得內部類的物件,都需要呼叫外部類名+.點+內部類名。而且需要在外部類中額外建立一個返回該內部類的方法。

public class Test {

    class C{//內部類
    }   
    public C getNewC() {//返回內部類的方法
        return new C();
    }

    public static void main(String[] args) {
        Test test = new Test();
        Test.C c = test.getNewC(); //在外部類的靜態方法中獲得物件
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4、內部類會擁有外部類的連結link(可能會導致記憶體洩露!)

一個內部類的物件會擁有其外部類的連結/引用/link,這樣能用來訪問該外部類的物件的成員。

5、內部類和靜態內部類的區別

  • 使用方法不同
static class Outer {
    class Inner {}
    static class StaticInner {}
}

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.StaticInner inner0 = new Outer.StaticInner();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • Oracle說法:一個被稱為靜態巢狀類,一個被稱為內部類。
    巢狀就是指兩者沒太大關係,靜態內部類可以完全獨立存在,但是就是借用外部類的殼來隱藏自己。

  • 靜態內部類起到了一種註釋的效果。A.B表明B類與A相關。且降低包的深度,方便類的使用

11-集合-7題

1、集合有哪些?

LinkedList、ArrayList、HashMap、HashSet、HashTable、Vector等

2、集合的包

java.util.*

3、集合的區別

 
Hashtable
HashMap
Vector
ArrayList

4、要求執行緒安全用什麼?

Vector、hashtable

5、沒有執行緒安全要求用什麼?

ArrayList、LinkedList、HashMap

6、有鍵值對?

HashMap、HashTable

7、資料量很大且要求執行緒安全

Vector

12-異常-15題

1、Throwable和三大異常子類

Throwable是所有異常和錯誤的超類。包含三個異常子類。
1. Error
2. Exception
3. RuntimeException:如NullPointerException等異常都自動由java丟擲

2、4種finally不會被執行的情況

1.system.exit()
2.執行緒異常
3.finally異常
4.CPU關閉

3、為什麼需要異常處理?

工程師最理想狀態是在編譯時就能發現所有錯誤,但是不是所有的錯誤都可以被找到。這些錯誤需要在執行時被處理,這就需要異常處理機制。
異常作用:在合適層級修復問題,以完成預期功能,並提高系統的健壯性、安全性。

4、 異常處理的優點

1.提高系統的穩健性。
2.減少處理錯誤的程式碼的複雜度。
3.不需要再在方法呼叫中去處理,而是直接在exception handler去處理。

5、 為什麼要throw exception

當前異常的環境無法處理該異常,就需要將問題提交給更高層去處理。
丟擲異常也可以看做一種return機制,當丟擲異常時,其所處的方法就會退出。

6、丟擲異常時的流程

  1. exception物件會被建立,如同其他java物件被new建立一樣,建立在堆heap中。
  2. 當前異常的路徑會停止,並且異常物件的引用會被當前context丟擲。
  3. 此時,異常處理機制(exception-handling mechanism)會接管,並且開始尋找合適的地方去繼續執行程式。
  4. 合適的地方-exception handler,異常處理,會進行問題修復。

7、 try-catch和switch區別

try-catch由上至下匹配異常型別,一旦匹配到就會進入相應的catch進行處理,處理完成後不會繼續向下匹配。而switch必須通過break來停止流程。

8、 自定義異常

class SimpleException extends Exception{},一般都不需要自己實現內容,直接繼承Exception即可。一個異常最重要的部分就是類名。

9、 catch中rethrow異常

catch(exception e){
  throw e;
}
  • 1
  • 2
  • 3

這裡再次丟擲的異常e,本身型別是其初始的型別,而不會變成Exception型別。這種特性被稱為-exception chaining,異常鏈

10、finally作用

  1. 執行無論異常與否都必須執行的程式碼。
  2. 可以用於檔案、網路連線等內容的清理工作。
  3. 在涉及到break和continue的部分,finally也一定會執行(在java中都可以消除goto的需求)

11、 finally和return

  1. 在finally之前的任何return都不會影響finally塊的執行。

12、 finally缺陷:會丟失異常

1.finally中丟擲異常可能會導致丟失異常

try {
    try {
            //丟擲異常a
    } finally {
            //丟擲異常b
    }
} catch (Exception e) {
     //獲得異常b, 而異常a丟失
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.finally中return

try { 
      throw new RuntimeException(); 
} finally { 
      //在finally中return,會導致本該丟擲的異常卻丟失了
   return; 
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

13、exception 限制

子類重寫的方法,丟擲的異常不能比superclass該方法丟擲的異常範圍大。
子類重寫的方法,丟擲的異常要在superclass該方法丟擲的異常範圍之內。
子類構造器中,可以丟擲任何範圍的異常,而不會受到限制。

14、Constructors(構造器)中產生異常,如何關閉需要清理的資源,如檔案?

絕對不能在finally中清理資源。
1. 這樣會導致無論異常與否資源都會被清理
2. 而且前面的異常可能會導致需要被清理的資源本質上也沒建立。

15、不知道如何處理某些異常:將其轉換為系統處理的異常

throw new RuntimeException(e); //不知道如何處理,直接轉換為Runtime異常丟擲。

13-String-1題

1、String比較

astr.equals(bstr) 比較物件是否相等
== 僅僅是比較首地址

14-型別資訊

15-泛型-13題

1、多元組tuple是什麼?作用?

將一組物件包裝到一個物件中。用於一些methods需要返回多個物件的時候。

2、在同時有需要兩個、三個等更多返回物件的時候怎麼處理?

實現TwoTuple,然後Three、Four層層繼承(類似於裝飾者模型)

3、泛型的典型應用:stack、List等資料結構

4、泛型介面的定義和作用

public interface Generator…
泛型介面常被用於各種類的生產器中。

5、泛型方法定義

泛型方法需要將泛型引數列表,放置於返回值前(public <T> void genericMethod(T a))

6、泛型方法和泛型類的區別

  1. 泛型類需要在例項化時指定引數的型別
  2. 泛型方法不需要指明,編譯器會自動識別。

7、泛型方法可以和可變引數完美配合

8、泛型的邊界限制

class Colored<T extends MyColor>,T必須為MyColor的子類

9、泛型邊界限制同時有類和介面

<T extends MyClass & MyInterface>要先類後介面

10、泛型限制在泛型方法中的使用

public <T extends Number> T showKeyName(Generic<T> container){...}需要在泛型列表中進行限制,而不能在引數中限制。

11、泛型萬用字元

?表示是所有型別的超類

12、靜態方法與泛型

如果靜態方法要使用泛型,則必須將靜態方法變成泛型方法。

13、泛型陣列:Java終不能建立一個確切的泛型型別的陣列

List<String>[] ls = new ArrayList<String>[10];  × 不可以
List<?>[] ls = new ArrayList<?>[10];   √ 可以
List<String>[] ls = new ArrayList[10]; √ 可以
  • 1
  • 2
  • 3

16-陣列-2題

1、基本資料型別陣列

int a[] = {1,2,3}; 
int a[] = new int[3]; 
int []a = new int[3]; 
  • 1
  • 2
  • 3

2、物件陣列定義

物件陣列僅僅存放引用,定義陣列後還需要給每個元素new一個物件。

17-容器

18-I/O

19-列舉

20-註解-7題

1、註解作用

為原始碼檔案提供後設資料

2、註解原則

註解不能干擾程式的執行,無論增加或者刪除註解,程式碼都能執行。

3、註解的分類:

標準註解(沒有元素的註解)
元註解(負責註解其他註解)

4、元註解的作用:

編寫文件、程式碼分析、編譯檢查

5、提取註解

java.lang.reflect.Field有getDeclaredFields()、field.isAnnotationPresent、field.getAnnotation..等方法能夠提取註解(參考下面例項)

6、標準註解有哪些?作用

@Override, 表明一個過載自父類的方法,避免出現方法名錯誤或者引數寫錯。
@Deprecated, 當該元素被使用的時候產生警告。
@SuppressWarnings, 鎮壓/關閉掉不合適的編譯器警告。

7、元註解有哪些?作用

@Target 表明該註解用在哪裡
@Retention 註解資訊持續多久(會被編譯器丟棄,還是執行時還存在,等等)
@Documented 在javadocs中包含該註解
@Inherited 允許子類基礎父類的註解

21-併發

22-反射-5題

1、Java中識別物件和類資訊的兩種方法?

傳統RTTI(它假定我們在編譯時已經知道了所有的型別資訊);反射機制(它允許我們在執行時發現和使用類的資訊)

2、RTTI(RunTime Type Information)是什麼?

允許你在程式執行的時候發現和使用型別資訊。會在所有類第一次使用的時候,將class物件(儲存在.class檔案)動態及再到JVM。都必須在編譯時已知。

3、 反射機制實現方法

class類和reflect類庫對反射進行了支援,通過裡面的Field、Method和Constructor等類,能夠確定物件資訊,而在編譯時不需要知道類的任何事情。但是反射的.class檔案在執行的時候也必須是已知的,.class檔案可以在本地也可以通過網路獲得。

4、 反射和RTTI的本質區別

RTTI:編譯器在編譯時開啟和檢查.class檔案
反射:執行時開啟和檢查.class檔案

5、JVM載入物件的方法

類的資訊會存在方法區,類載入器會通過方法區的類資訊,在堆Heap上建立一個類物件(Class物件),這個類物件是唯一的,後續的New等操作都是通過這個唯一的類物件作為模板去進行new等操作。

相關文章