閱讀231 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java必備基礎知識點(超全)

Java基礎

1、 簡述Java的基本曆史

java起源於SUN公司的一個GREEN的項目,其原先目的是:為家用消費電子產品發送一個信息的分布式代碼係統,通過發送信息控製電視機、冰箱等

 

2、 簡單寫出Java特點,寫出5個以上,越多越好

簡單的、麵向對象的、分布式的、安全的、穩定的、與平台無關的、可解釋的、多線的、動態的語言。

 

3、 什麼是Java?

JAVA:一種編程語言

          一種開發環境

          一種應用環境

          一種部署環境

 

4、 請寫出Java的版本分類,以及每種版本的應用方向

三種版本:

   JME:是麵向內存有限的移動終端為消費性產品設計的;

   JSE: 是SUN公司針對桌麵開發和低端商務計算方案開發的版本。為筆記本電腦、PC機設計的;

   JEE: 是一種利用JAVA 2平台來簡化企業解決方案的開發、部署和管理相關的複雜問題的體係結構。 為企業級的、服務器端的高端應用而設計的;

 

5、 描述Java技術的主要特性

java虛擬機

   垃圾回收

   代碼安全性

如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

 

6、 描述 Java虛擬機的功能

1)通過 ClassLoader 尋找和裝載 class 文件

2)解釋字節碼成為指令並執行,提供 class 文件的運行環境

3)進行運行期間垃圾回收

4)提供與硬件交互的平台

 

7、 簡述Java代碼安全性

1編譯時的錯誤檢驗

2類裝載檢查,把本機上的類和網絡資源類相分離,在調入類的時候進行檢查,因而可以限製任何“特洛伊木馬”的應用

3字節碼校驗

4沙箱機製,限定訪問權限

 

8、 描述Java垃圾回收機製

Java 編程語言解除了程序員釋放內存的責任。它可提供一種係統級線程以跟蹤每一次內存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查並釋放那些可被釋放的內存。垃圾收集在 Java 技術程序的生命周期中自動進行,它解除了釋放內存的要求,這樣能夠有效避免內存漏洞和內存泄露(內存泄露就是程序運行期間,所占用的內存一直往上漲, 很容易造成係統資源耗盡而降低性能或崩潰 。

垃圾回收有以下特點:

1垃圾回收是一個自動的係統行為,程序員不能控製垃圾回收的功能和行為。

2有一些跟垃圾回收相關的方法,比如:System.gc( ) ,調用這些方法,僅僅是在通知垃圾回收程序,至於垃圾回收程序運不運行,什麼時候運行,都是無法控製的。

3程序員可以通過設置對象為 null,來標示某個對象不再被需要了, 這隻是表示這個對象可以被回收了,並不是馬上被回收。

 

9、 簡述Java代碼的運行過程

   (1編寫代碼

(2)編譯

(3)類裝載   通過類裝載器裝載CLASS文件

(4)校驗代碼   由字節碼校驗

(5)解釋   由解釋器將字節碼轉換成機器碼

(6)運行

 

10、 簡述如何搭建Java開發環境

首先下載安裝JDK 然後配置環境 

    (1配置PATH,  操作係統運行環境的路徑

2配置CLASSPATH  JAVA運行應用程序時所需要的類包的路徑

    (3配置JAVA_HOME   供需要運行JAVA的程序使用

 

11、 簡述classpathpathJAVA_HOME的意義和配置方法

path          操作係統運行環境的路徑

classpath      JAVA運行應用程序時所需要的類包的路徑

JAVA_HOME  供需要運行JAVA的程序使用

 

12、 請描述:一個完整的Java文件的代碼分幾個部分,每部分都起什麼作用,大致的寫法

package 當前類所在位置 

   import  當前類運行時所需要的包或類

   public class 類名 {

        屬性定義;

        方法定義:

        構造方法定義;

        public static void main(String args []) 例外{   程序入口

          語句;

        }

}

   //注釋 

13、 Java代碼的注釋有幾種?分別舉例說明

1  //  單行注解

   (2)  /*     */ 塊注釋

   (3)  /* *

         *  文檔注釋

           */

 

14、 什麼是Java代碼的語句,什麼是Java代碼的塊,舉例說明

語句 是一行以分號終止的代碼,例:int a;

塊 是以{ }為邊界的一些語句的集合 例:public void tt( ){}

 

15、 什麼是標示符?

標識符:是賦予變量、類、方法的名稱。

//標識符是標識變量、類或方法的有效字符序列

 

16、 標示符定義的規則?

(1) 首字母隻能以字母、下劃線、$開頭,其後可以跟字母‘下劃線、$和數字配置CLASSPATH 

(2) 表示符不能是關鍵字

(3) 標識符區分大小寫

 

17、 什麼是關鍵字?

關鍵字就是編程語言與機器語言的編碼約定

 

18、 truefalsenullsizeofgotoconst那些是Java關鍵字

true false null    JAVA的關鍵字

 

19、 Java的基本數據類型有幾種?分別是?

short int long  boolean float double char byte

/*布爾類型(boolean)

字符型(char)

數值類型

定點類型 字節型(byte)

短整型(short)

整型(int)

長整型(long)

浮點類型    單精度(float)

雙精度(double)

20、 請寫出每種基本類型的默認值?取值範圍?分別給出一個定義的例子

默認值            取值範圍             示例

   字節型 :  0                -2^7----2^7-1          byte b=10;

   字符型 :  ' \u0000'            0----2^16-1    char c=’c’ ;

   short  :    0                 -2^15----2^15-1        short s=10;

   int    :    0                 -2^31----2^31-1        int i=10;

   long   :    0                -2^63----2^63-1          long o=10L;

   float  :     0.0f               -2^31----2^31-1        float f=10.0F

   double :    0.0d              -2^63----2^63-1         double d=10.0;

   boolean:    false              true\false              boolean flag=true;

 

21、 在基本類型中,如果不明確指定,整數型的默認是什麼類型?帶小數的默認是什麼類型?

整數類型 默認為  int

帶小數的默認為   double

boolean的默認值   false

 

22、 如何定義float類型和long

float f = 1.2f

    long  l = 1.2L

 

23、 什麼是變量?

變量是用來引用一塊內存區域或一個值,用標識符來表示,可以通過操作變量來操作變量所對應的內存區域或值塊的值。

 

24、 變量的定義規則?

(1) 以字母、$、下劃線開頭,其後可以跟字母、下劃線、$和數字;

(2) 首字母小寫,中間單詞用大寫字母隔開;

(3) 名稱具有一定含義;

//4.可以先聲明再賦值也可以聲明的同時進行賦值

//5.沒有賦值的變量是不可以使用的

25、 請寫出Java編碼約定中對下列部分的要求:類、屬性、方法、包、文件名、變量、常量、控製結構、語句行、注釋

類:    一個類文件中類名要和文件名相同,類名一定要以大寫字母開頭,單詞之間用大寫字母分隔

    屬性:  屬性名首字母小寫,中間用大寫字母隔開。

    方法:  方法名首字母小寫,中間用大寫字母隔開。

    包:    引用包必須寫在類文件的開頭,有且隻能有一個包,全部用小寫字母。

    控製結構:當語句是控製結構的一部分時,即使是單個語句,也應使用大括號將語句封閉。

    語句行:每行隻寫一個語句,並使用四個縮進的空格,使代碼更易讀,注意用分號結束。

注釋:  用注釋來說明那些不明顯代碼的段落。

常量: 常量名一般用大寫字母,單詞之間用下劃線分隔,一旦賦值不允許修改。

 

26、 什麼是Javadoc?

按照一定格式生成程序的文檔的工具。

 

27、 什麼是引用類型?

用戶定義類型它可引用類和數組。

除去基本數據類型的其他類型都是引用數據類型。

28、 什麼是按值傳遞?什麼是按引用傳遞?

按值傳遞:就是將該值的副本傳過去(基本數據類型+String類型的傳遞,就是按值傳遞)

按引用傳遞:就是將值的內存地址傳過去(除基本數據類型+String以外類型的傳遞,就是引用傳遞)

 如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

29、 如何創建一個新對象?如何使用對象中的屬性和方法?

使用new 關鍵字來創建一個新的對象;

    通過對象的實例用“.”()來調用對象中的屬性和方法;

    靜態的方法和屬性,也可以直接用類名“.”(點)來調用;

 

30、 簡述new關鍵字所做的工作

new 創建一個對象,並為對象分配一塊內存。

 

31、 簡述”=” 和”= =”的功能和區別

"=" 賦值,

"= ="當比較基本數據類型的時候,判斷前後兩個值是否相等;

當比較引用數據類型的時候,判斷= =前後兩個值的內存地址是否相等;   

區別:

    = :為賦值表達式

    = = :為邏輯表達式

 

32、 什麼是實例變量?什麼是局部變量?什麼是類變量?什麼是final變量?

實例變量:  類中定義的變量,即類成員變量,如果沒有初始化,會有默認值;

   局部變量:  在方法中定義的變量,必須初始化;

   類變量:    用static修飾的屬性;

   final變量:  用final 修飾的變量, 

 

33、 簡述上述各種變量的定義規則和使用規則?

實例變量: 不需要static關鍵字來聲明,需要類的實例(對象)調用(用“.”);

類變量: 用static修飾,可以用類名調用,也可以用類的實例調用;

   局部變量: 在方法內任意定義變量即為局部變量;

   final變量: 一旦賦值,不可以再修改的變量;

final屬性隻允許賦值一次,且隻能通過構造方法賦值,定義後也就是一個常量;

final修飾的變量,隻允許賦值一次

 

34、 a++++a的區別?

a++ : 先使用,後加1

 ++a : 先加1,後使用

 

35、 請描述instanceof?:&&&各自的功能

instanceof :用來判斷某個實例變量是否屬於某種類的類型。

     ? : 三目運算符:   

      表達式1?表達式2:表達式3

      如果表達式1true,執行表達式2,否則執行表達式3

     &: 位運算:按位與  |    

  &&: 邏輯運算:邏輯與

 

36、 請描述>><<>>>的功能

10>>4  :算術或符號右移位運算符

    <<  :算術或符號左移位運算符

    >>> :邏輯或無符號右移位運算符

 

37、 請描述什麼是強製類型轉換?什麼是自動類型轉換?什麼是向上造型?並分別舉例說明

強製類型轉換:在一個類型前麵加( ),來強製轉換

long l = 9L;

int i = (int)l;

    自動類型轉換:

       int i = 5;

        String str = ""+i;

    向上造型:把範圍小的造型為範圍大的類型:

    int i = 2;

        long l = i;

 

38、 請寫出完整的if條件控製語句的結構

if(布爾表達式){

        語句

    }else{

語句

}

 

39、 請寫出完整的switch語句的結構

switch(字符){

      case 字符語句

              break;

      case 字符語句

              break;

      default:語句

 }

 

40、 請寫出完整的for語句的結構

for(初始語句;條件語句;步長){

   }

 

41、 請寫出完整的while語句的結構

while(boolean語句){

}

 

42、 請寫出完整的do while語句的結構

do{

    }while(boolean語句);

 

43、 請描述break 和 continue的功能和用法

break:終止(跳出)最近的循環

continue:跳出本次循環,執行下一次循環

 

44、 定義一個一維的int數組,先創建它,並初始化它,給它賦值,然後輸出其中的一個值

public class Arr{

     public static void main(String args[]){

    int a[] = new int[5];

    a={1,2,3,4,5};//錯誤 隻能在初始化時這樣做

        a[0]=1;

        a[1]=2;

    System.out.println(a[0]);

     }

    }

45、 定義一個一維的A類型數組,直接定義並賦值,然後輸出其中的一個值

複製代碼
public class A{

     public static int i;

     public static void main(String args[]){

        A aa = new A( );

        A bb = new A( );

    A a[] = {aa,bb};

        a[0].i=2;

     System.out.println(a[0]);

     }

}
複製代碼

 

46、 把上麵的數組改成2維的數組

複製代碼
public class A{

     public static int i;

      public static void main(String args[]){

         A a[ ][ ] = new A[5][5];

         a[0][0].i=2;

         System.out.println(a[0][0]);

      }

    }

 
複製代碼

 

47、 舉例說明數組拷貝方法的使用:arraycopy方法

複製代碼
public class A{

        public static void main(String args[]){

     int a[] = new int[5];

     int b[] = new int[5];

         System.arraycopy(a[5],0,b[5],0,a.length)

     System.out.println(b[0][0]);

      }

}
複製代碼

 

48、 什麼是構造和析構方法?功能是?

構造方法:每個類至少有一個構造方法,類初始化時調用的方法

     1.方法名和類名相同 

     2.無返回值類型

   格式:訪問權限 類名(參數列表) {}

     1.自己定義構造後,就沒有默認的構造方法

     2.無構造方法時,默認為空參的構造方法(無參數,方法體為空)

   

    析構方法:finalize

             類銷毀時,自動調用方法

             當對象在內存中被刪除時,自動調用該方法

             在此方法中可以寫回收對象內部的動態空間的代碼

 

49、 簡述Java的訪問修飾符類型?分別有什麼功能?

public 公開的,任何一個類都有可以訪問 

protected 同包同類,隻可被它的子類訪問

   default 隻能被同一個包中類訪問   

private 私有的,隻能在本類中被訪問 

 如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

50、 分別說明:在類上、在屬性上、在方法上能使用哪些訪問修飾符

在類上:public default  final

   在方法上: 訪問權限:public protected private default

              方法修飾符:static 

                          final

              返回類型:void

   在屬性上:public protected private default

             static 

             final

 

51、 簡述什麼是包?包的功能

包:對所定義的多個JAVA類進行分組,將多個功能相關的類定義到一個包(文件)中。

   功能:1.易於查找和使用適當的類

         2.包不止包含類和接口,還可以包含其它包,形成層次的包空間

         3.有助於避免命名衝突

 

52、 請寫出5個以上的JDK中的包,以及他們的基本功能

java.awt:  包含構成抽象窗口工具集的多個類,用來構建和管理應用程序的圖形用戶界麵

    java.lang:  提供java編成語言的程序設計的基礎類

    java.io:   包含提供多種輸出輸入功能的類,

    java.NET:  包含執行與網絡有關的類,如URLSCOKETSEVERSOCKET

    java.applet: 包含java小應用程序的類

java.util:  包含一些實用性的類

 

53、 什麼是包裝類?Java中都有哪些包裝類

JDK中針對各種基本類型分別定義相應的引用類型 --------------稱為封裝類

Boolean  Byte  Short  Integer  Long  Float  Double  Character

 

54、 OOP(麵向對象)語言的三大特征是?

封裝性,繼承性,多態性

 

55、 分別表述類的三大特性及其他們的功能

封裝:隱藏類的實現細節、迫使用戶去使用一個接口去訪問數據、使代碼更好維護

繼承:子類可以直接繼承使用父類的方法,程序員隻需要做的是定義額外特征或規定將適用的變化

多態性:同一個行為具有多個不同表現形式或形態的能力

 

56、 如何實現繼承?繼承的規則?

public class A extends B{

   }

(1) 單繼承性

(2) 構造方法不能繼承

(3) super引用父類,調用父類的屬性,方法

(4) 當子類中出現與父類的方法名,返回類型,參數列表相同的方法時要覆蓋此方法

57、 簡述thissuper的功能和用法

this 

(1) 能訪問除構造方法以外所有的屬性、方法,通過this. 來調用方法和屬性

(2) 不可以在靜態方法中使用,

(3) 在調用其它構造方法時,必須放在該構造方法的第一行

(4) 在構造方法中使用this(參數列表)相當於調用本類的其它構造方法,它必須作為構造方法的第一句

 

   super :訪問父類

(1) super. 點取父類中被子類隱藏的方法和屬性,

(2) 通過 super(參數列表來調用父類的屬性和方法,在調用父類的構造方法時必須放在子類構造方法裏的第一行;

 

58、 如何確定在多態的調用中,究竟是調用的那個方法?

new的是哪一個類就是調用的哪個類的方法。

 

59、 請描述方法定義的完整的語法結構

權限修飾符 修飾符 返回類型 方法名(參數例外{

        方法體;

}

 

60、 什麼是重載?

在一個類中出現方法名相同,但參數列表不同時,這種情況就是重載。

 

61、 簡述重載的規則

(1) 方法名稱必須相同;

(2) 參數列表必須不同(個數不同,或類型不同,或參數排列順序不同);

(3) 與返回類型無關;

 

62、 什麼是方法的覆蓋?什麼情況下出現?

方法覆蓋:

    子類可以修改從父類繼承過來的行為,也就是說子類可以創建一個與父類方法有不同功能的方法,但具有相同的:名稱、返回類型名和參數列表。

    在父子類的情況下出現時。

 

63、 方法覆蓋的規則?

(1) 方法名要和父類中被覆蓋的方法名相同,返回類型相同,參數列表相同。

(2) 訪問權限要大於等於被覆蓋方法的權限。

(3) 例外列表要小於等於被覆蓋方法的例外列表。

 

64、 static修飾符的功能是?可以用在什麼地方?怎麼訪問?

static  修飾符功能:

(1) 共用一塊內存區域,也就是用static修飾的變量或成員方法對所有類的實例都是相同的

(2) 靜態成員方法和靜態變量的優點在於他們能在沒有創建類的任何一個實例的情況下被引用。

(3) 可以用在方法或屬性上

    訪問方式:

(1)  直接使用類名調用

(2)  new 一個實例,用實例調用

 

65、 static的基本規則

(1) 類中的靜態方法隻可以調用靜態的屬性和方法,不允許調用非靜態的屬性和方法。

(2) 靜態變量為類變量,可以用類名直接調用靜態的屬性和方法。

(3) 靜態方法中不允許出現thissuper

(4) 構造方法不允許聲明static

(5) 非靜態變量為實例變量,通過實例調用

(6) 靜態方法不能被非靜態方法覆蓋

 

66、 final修飾符的功能是?可以用在什麼地方?

功能:final標記所有通用的功能,不能隨意更改

可以用在類、屬性和方法上

 

67、 final的基本規則

(1) final修飾的類不能被繼承

(2) final修飾的成員變量隻允許賦值一次,且隻能通過構造方法裏賦值。

(3) final修飾的局部變量即為常量,隻能賦值一次。

(4) final修飾的方法不允許被子類覆蓋。

 

68、 什麼是抽象方法,什麼是抽象類

用abstract修飾的方法,隻有方法的聲明,而沒有方法的實現,就叫抽象方法。

用abstract修飾的類,就叫抽象類。

 

69、 抽象類的規則

(1) 抽象類內部可以沒有抽象方法

(2) 必須用abstract修飾

(3) 不能夠直接使用抽象類,必須通過子類繼承並且實現

(4) 抽象方法不允許被private修飾

 

70、 什麼情況下使用抽象類

(1) 當一個類的一個或多個方法是抽象方法時;

(2) 當類是一個抽象類的子類,並且不能為任何抽象方法提供任何實現細節或方法體時;

(3) 當一個類實現一個接口,並且不能為任何抽象方法提供實現細節或方法體時;

 

71、 equals方法和”= =”的功能和區別

功能:判斷對象是否相等

    區別:

     equals方法比較的是對象的值

     = =:比較的是對象值的內存地址,對基本數據類型來說= =比較的是數值

 

72、 toString方法的功能和基本寫法

返回一個String類型

    public String toString(){

return “”;

}

 

73、 String的方法的功能和基本使用方法,請描述5個以上

substring(參數1,參數2);  功能:取字符串中參數1到參數2的的所有字符;  "String".subString(0,1);

   replace(參數1,參數2);  功能:用參數1中的值替換字符串中所有參數2的值  "String".replace(ing,tt);

   equals( );     功能:判斷兩個字符串是否相等  "String".equals("tt");

trim( );      功能:去掉字符串兩邊的空格  "String".trim();

   indexof( );    功能:查找字符串中參數所在位置,並返回字符串第一個出該參數的下標  

"String".indexOf("ing");

split( );      功能:根據參數分割該字符串   "String".split("-");

 

74、 為什麼使用StringBuffer類?有什麼功能和優點?

–隻創建一個對象

 –StringBuffer 對象的內容是可以被修改的

 –除了字符的長度之外,還有容量的概念

 –通過動態改變容量的大小,加速字符管理

 

75、 舉例說明如何使用StringBuffer

StringBuffer sb = new StringBuffer();

sb.append("aaa");

 

76、 如何使用Java讀寫係統屬性?

讀:

複製代碼
Properties props = System.getProperties();

Enumeration prop_names = props.propertyNames();

while (prop_names.hasMoreElements()) {

String prop_name = (String) prop_names.nextElement();

String property = props.getProperty(prop_name);

System.out.println("Property '" + prop_name + "' is '"+ property + "'");

}
複製代碼

 

寫:

System.setProperties(props);

 

77、 簡述properties文件的結構和基本用法

結構:擴展名為properties的文件,內容為keyvalue的映射,例如“a=2

    用法:

複製代碼
public class Test {

public static void main(String args[]) {

try {

String name = "test.properties";

InputStream in = new BufferedInputStream(new FileInputStream(name));

Properties p = new Properties();

p.load(in);

System.out.println("a的值==" + p.getProperty("a"));

} catch (Exception err) {

err.printStackTrace();

}

}

}
複製代碼

 

78、 什麼是接口?接口的定義規則?

接口是抽象方法和常量值的定義的集合。從本質上講,接口是一種特殊的抽象類,這種抽象類中隻包含常量和方法的定義,而沒有變量和方法的實現。

public interface Tt {

     public void outPut( );

     public int tt( );

   }

 

79、 接口的作用?為什麼使用接口?

多重繼承

    封裝、隔離

    功能,實現的分離

多態

    便於後期維護

    接口是可插入性的保證。

 

80、 什麼是多重接口

就是一個類實現多個接口

 

81、 描述接口的基本思想?

封裝 隔離

接口及相關機製的最基本作用在於:通過接口可以實現不相關類的相同行為,

而不需考慮這些類之間的層次關係。

根據接口可以了解對象的交互界麵,而不需了解對象所屬的類。

麵向對象程序設計講究“提高內聚,降低耦合”。

 如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

82、 如何在代碼中使用接口?

public class MyCast implements Tt{

     public void outPut( ){}

    public int tt( ){

     return 0;

}

}

 

83、 舉例說明如何把接口當作類型使用

public interface  Animal(){

      public void tt( );   

}

    public class Dog implements Animal{

      public void tt ( ){}

}

     

Animal ani = new Dog();

 

84、 如何選擇接口和抽象類?為什麼?

優先選用接口,盡量少用抽象類

在下列情況下選擇抽象類:需要定義子類的行為,又要為子類提供共性的功能。

 

85、 什麼是異常,異常的分類?

程序中導致程序中斷的一些情況叫做異常,一般程序員可以處理。

異常分為運行時異常和非運行時異常(一般異常)

運行時異常是指因設計或實現方式不當導致的問題。也可以說,是程序員的原因導致的,本來可以避免發生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現這些異常的代碼不需要try塊包圍。

非運行時異常是指除運行時異常以外所有的異常,出現這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,

 

86、 簡述處理異常的兩種方式?

拋出(throws)和catch語句處理

 

87、 簡述try塊的功能和規則

try塊內部一般寫一些編程人員認為可能會出現異常的代碼,使程序運行時不會因為出現異常而中斷。

 

88、 簡述catch塊的功能和規則

功能:可以截獲所聲明的異常,並在語句塊內對其進行處理

規則:catch(Exeption e){

  e.printStackTrace( );

     }

 

89、 簡述finally塊的功能和規則

finally塊一般寫一些不論是否發生異常都必須執行一次的代碼

例如關閉與數據庫的連接等

 

90、 簡述throwthrows的功能和使用方法

throw 指編程人員主動拋出一個異常 

throw new NullPointerExeption( );

throws指程序遇到異常情況自動的被動拋出一個異常

public void test( ) throws Exeption{}

 

91、 異常的分類?

錯誤(Error):    JVM 係統內部錯誤、資源耗盡等嚴重情況,程序員不可控製

例外(Exception):其它因編程錯誤或偶然的外在因素導致的一般性問題,程序可以控製

 

92、 什麼是預定義異常

java程序中預先定義好的異常叫做預定義異常

 

93、 簡述自定義異常的規則

寫一個類繼承Exception

   用戶自定義異常通常屬Exception範疇,依據慣例,應以Exception結尾,應該由人工創建並拋出。

 

94、 什麼是斷言?

用來證明和測試程序的假設。

 

95、 如何使用斷言?舉例說明

一種是assert<<布爾表達式>>;另一種是assert<<布爾表達式>><<細節描述>>

assert  a= =10 : "這裏a等於10";

 

集合框架

1、 什麼是集合?什麼是元素?

可以包含其他對象的簡單對象就叫集合

集合框架中所包含的對象就叫做元素

 

2、 描述出Java集合框架中集合的接口關係

Collection----SetList

Set----HashSetSortedSet

List----ArrayListLinkedList

Map----HashMapSortedMapTreeMap

 

 

3、 代碼示例:Collection接口的使用,包括如何定義、初始化、賦值、取值、修改值除值

Collection col = new ArrayList();

String oldValue = "abcd";

String newValue = "1234";

//增加

col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext()){

//取值

String str = (String)it.next();

if(str.equals(oldValue)){

//刪除

col.remove(oldValue);

//修改

col.add(newValue);

}

}

4、 代碼示例:List接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值

複製代碼
List col = new ArrayList();

String oldValue = "abcd";

String newValue = "1234";

col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext()){

String str = (String)it.next();

if(str.equals(oldValue)){

col.remove(oldValue);

col.add(newValue);

}

}
複製代碼

 

5、 代碼示例:Set接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值

複製代碼
Set col = new HashSet();

String oldValue = "abcd";

String newValue = "1234";

col.add(oldValue);

Iterator it = col.iterator();

while(it.hasNext( )){

String str = (String)it.next();

if(str.equals(oldValue)){

col.remove(oldValue);

col.add(newValue);

}

}
複製代碼

 

6、 代碼示例:Map接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪

複製代碼
Map map = new HashMap();

String oldValue = "abcd";

String newValue = "1234";

//增加

map.put("1",oldValue);

Set set = map.keySet( );

Iterator it = set.iterator( );

while(it.hasNext( )){

String key = (String)it.next( ); 

//取值

String value = map.get(key);

}

//修改

map.put("1",newValue);

//刪除

map.remove("1");

}

 
複製代碼

 

7、 描述List接口、Set接口和Map接口的特點

List接口中的對象按一定順序排列,允許重複

Set接口中的對象沒有順序,但是不允許重複

Map接口中的對象是keyvalue的映射關係,key不允許重複

 

8、 如何給集合排序?

實現comparable接口

IO

1、 什麼是流?可畫圖說明

流是要傳輸的數據在源和目的地之間運行的軌跡。

 

2、 描述I/O流的基本接口和類的結構

 

3、 代碼示例:使用URL流,讀取網頁代碼

 

複製代碼
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
public class ReadURL {
     public static void main(String[] args) throws Exception {
         URL url = new URL("https://bbs.tarena.com.cn"); //建立封裝統一資源定位符的類
         URLConnection uc = url.openConnection(); //打開連接
         InputStreamReader isr = new InputStreamReader(uc.getInputStream());
         BufferedReader br = new BufferedReader(isr);

//傳輸數據
         while(true){
             String temp = br.readLine();
             if(temp==null){
                break;
             }
             System.out.println(temp);
         }
         br.close();
    }
}

 
複製代碼

 

 

 

4、 什麼是Unicode

是一種字符的編碼方式,占16位字節,Java 技術使用 Unicode 來表示字符串和字符

 

5、 代碼示例:如何使用ReaderWriter來進行輸入輸出

//Writer寫入操作

FileOutputStream fos=new FileOutputStream("a.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos);

BufferedWriter bw=new BufferedWriter(osw);

bw.write("歡迎來到java快車");

bw.close();

//Reader讀取操作

FileInputStream fis=new FileInputStream("a.txt");

InputStreamReader isr=new InputStreamReader(fis);

BufferedReader br=new BufferedReader(isr);

String str=br.readLine();

System.out.println(str);

 

6、 什麼叫保持?什麼是可序列化?如何實現可序列化?

將一個對象存放在某種類型的永久存儲器上(比如硬盤,光盤,軟盤等),稱為保持。

標識一個類可以被持久化,叫序列化,也叫串行化或持久化。表示這個類中的數據可以按流式輸出。

實現可序列化的方法:實現java.io.Serializable接口。

 如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

7、 代碼示例:如何讀寫對象流

//

try {

String str = "123";

FileOutputStream f = new FileOutputStream("test.txt");

ObjectOutputStream s = new ObjectOutputStream(f);

s.writeObject(str);

f.close( );

}catch(Exception e) {

e.printStackTrace( );

}

//

try {

FileInputStream f = new FileInputStream("test.txt");

ObjectInputStream s = new ObjectInputStream(f);

str =(String)s.readObject( );

f.close( );

}catch(Exception e){

e.printStackTrace( );

}

 

8、 簡述File類的基本功能

處理文件和獲取文件信息;文件或文件夾的管理。

概括一句話就是:除了讀寫文件內容其他的都可以做。

 

9、 代碼示例:如何使用隨機文件讀寫類來讀寫文件內容

RW表示文件時可讀寫的

讀:

try{

     RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

     long len = 0L;

     long allLen = f.length();

     int i = 0;

     while (len < allLen) {

       String s = f.readLine();

       if (i > 0) {

           col.add(s);

       }

       i++;

       //遊標

       len = f.getFilePointer();

     }

   }catch(Exception err){

     err.printStackTrace();

   }

  

  寫:

  

   try{

     RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

     StringBuffer buffer = new StringBuffer("\n");

     Iterator it = col.iterator();

     while (it.hasNext()) {

       buffer.append(it.next() + "\n");

     }

     f.writeUTF(buffer.toString());

   }catch(Exception err){

      err.printStackTrace();

   }

 

10、 代碼示例:如何使用流的基本接口來讀寫文件內容

try{

DataInputStream in =

new DataInputStream(

new BufferedInputStream(

new FileInputStream("Test.java")

)

);

String currentLine=null;

while ((currentLine = in.readLine()) != null){

System.out.println(currentLine);

}

}catch (IOException e){

System.err.println("Error: " + e);

}

 

多線程

1、 什麼是線程? 

輕量級的進程

 

2、 線程的三個部分是?

處理機

代碼

數據

 

3、 為什麼使用多線程

使UI響應更快

利用多處理器係統

簡化建模

 

4、 代碼示例:Java中實現多線程的兩種方式,包括如何定義多線程,如何使用多線程

實現Runnable接口

class Thread1 implements Runnable{

public void run( ){

//run裏一般寫一個while(true)循環

System.out.println("Runnable");

}

}

public class Test{

public static void main(String[] a){

Thread1 r = new Thread1();

Thread t1 = new Thread(r);

Thread t2 = new Thread(r);

t1.start();

t2.start();

}

}

繼承Thread

class Thread2 extends Thread{

public void run(){

System.out.println("extends");

}

}

 

public class Test{

public static void main(String[] a){

Thread t = new Thread2();

t.start();

}

}

 

5、 如何實現線程的調度?如何暫停一個線程的運行

調度用waitnotify

----

sleep()

 

6、 什麼是線程的優先級

判斷哪個線程先執行的級別

 

7、 簡述sleep方法和wait方法的功能和區別

sleep是讓線程休眠一段時間

wait是讓線程掛起

 

8、 什麼是守候線程

隱藏在後台持續運行的線程

 

9、 什麼是臨界資源

指多個線程共享的資源

 

10、 什麼是互斥鎖,Java中如何實現

用來保證在任一時刻隻能有一個線程來訪問臨界資源的那個標記

Java中使用

用在對象前麵限製一段代碼的執行

   用在方法聲明中,表示整個方法為同步方法。

 

11、 什麼是死鎖?如何避免?

如果程序中有多個線程競爭多個資源,就可能會產生死鎖。當一個線程等待由另一個線程持有的鎖,而後者正在等待已被第一個線程持有的鎖時,就會發生死鎖。

要避免死鎖,應該確保在獲取多個鎖時,在所有的線程中都以相同的順序獲取鎖。盡量少用臨界資源。

 

12、 簡述waitnotify,notifyAll的使用

被鎖定的對象可以調用wait( )方法,這將導致當前線程被阻塞並放棄該對象的互斥鎖,即解除了wait( )方法的當前對象的鎖定狀態,其他的線程就有機會訪問該對象。

notify使等待隊列上的一個線程離開阻塞狀態

notifyAll使等待隊列上的所有線程離開阻塞狀態

 

Socket編程

13、 什麼是url?基本的格式是? 

統一資源定位器

Http://www.163.com:port

 

14、 簡述IP,Port,TCP的基本功能

IP代表網絡位置

Port代表端口號

TCP可保證不同廠家生產的計算機能在共同網絡環境下運行,解決異構網通信問題,是目前網絡通信的基本協議

15、 簡述Java網絡模型的基本功能

描述服務端和客戶端的連接過程

 

16、 簡述Java網絡編程究竟做些什麼?如何做?

1.建立連接

2.準備輸出的數據,流式輸出

3.流式輸入,編程業務需要的格式

4.關閉連接

服務器分配一個端口號。如果客戶請求一個連接,服務器使用accept( )方法打開socket連接。

客戶在hostport端口建立連接。

服務器和客戶使用InputStreamOutputStream進行通信。

 

17、 代碼示例:基於Socket編程

try {

ServerSocket s = new ServerSocket(8888);

while (true) {

Socket s1 = s.accept();

OutputStream os = s1.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);

dos.writeUTF("Hello," +s1.getInetAddress() + "port#" + s1.getPort() + "\nbye!");

dos.close();

s1.close();

}

}catch (IOException e) {

System.out.println("程序運行出錯:" + e);

}

 

18、  TCPUDP區別

TCP(傳輸控製協議)和UDP(用戶數據報協議)是傳輸層協議 

TCP是麵向連接的可靠數據傳輸協議,能保證傳輸內容的完整和準確;數據傳輸的輔助開銷大,效率低

UDP: 是無連接的,不可靠地傳輸協議,不能保證傳輸內容的完整和準確,對信息的適時要求比較高

設計模式

1、 什麼是設計模式?

就是經過實踐驗證的用來解決特定環境下特定問題的解決方案。

 

2、 設計模式用來幹什麼?

尋找合適的對象

決定對象的粒度

指定對象的接口

描述對象的實現

運用複用機製

重複使用經過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少工作量、提高正確率等目的

3、 什麼是對象粒度

對象中方法的大小就是粒度

 

4、 基本的Java編程設計應遵循的規則?

麵向接口編程,優先使用對象組合

 

5、 設計模式的應用範圍

所能解決的特定的一類問題中

 

6、 簡述什麼是單例模式,以及解決的問題,應用的環境,解決的方案,應用時應注意什麼?

解決的問題:在任何時間內隻有一個類實例存在的模式。

應用環境:需要有一個從中進行全局訪問和維護某種類型數據的區域的環境下使用單例模式。

解決方案:保證一個類隻有一個類實例存在。

本質:控製實例的數量。

注意:要合理的使用單例,避免單例成為瓶頸。

 

7、   代碼示例:單例模式的兩種實現方法,並說明優缺點

public class Test{

private static Test test = new Test();

    public Test(){

}

 

    public static Test getInstance(){

    return test;

}

}

public class Test{

    private static Test test = null;

private Test(){

}

public static Test getInstance(){

if(test==null){

test = new Test();

}

return test;

}

}

第一種方式:裝載類的時候就創建類的實例,用空間換時間。

第二種方式:延遲裝載,不需每次都創建一個類實例,而隻是在第一次使用時創建,有效的利用資源,用時間換資源。

 

8、 簡述什麼是工廠模式,以及他解決的問題,應用的環境,解決的方案,模式

最後更新:2017-05-03 10:30:38

  上一篇:go 必須使用301重定向的運用場景
  下一篇:go 阿裏專家問答丨人工智能/機器學習技術在電商場景下的應用