1、 簡述Java的基本歷史
java起源于SUN公司的一個GREEN的項目,其原先目的是:為家用消費電子產(chǎn)品發(fā)送一個信息的分布式代碼系統(tǒng),通過發(fā)送信息控制電視機、冰箱等
2、 簡單寫出Java特點,寫出5個以上,越多越好
簡單的、面向對象的、分布式的、安全的、穩(wěn)定的、與平臺無關的、可解釋的、多線的、動態(tài)的語言。
3、 什么是Java?
JAVA:一種編程語言
一種開發(fā)環(huán)境
一種應用環(huán)境
一種部署環(huán)境
4、 請寫出Java的版本分類,以及每種版本的應用方向
三種版本:
JME:是面向內(nèi)存有限的移動終端. 為消費性產(chǎn)品設計的;
JSE: 是SUN公司針對桌面開發(fā)和低端商務計算方案開發(fā)的版本。為筆記本電腦、PC機設計的;
JEE: 是一種利用JAVA 2平臺來簡化企業(yè)解決方案的開發(fā)、部署和管理相關的復雜問題的體系結構。 為企業(yè)級的、服務器端的高端應用而設計的;
5、 描述Java技術的主要特性
java虛擬機
垃圾回收
代碼安全性
如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最后是九零六,里面有大量的學習資料可以下載。
6、 描述 Java虛擬機的功能
(1)通過 ClassLoader 尋找和裝載 class 文件
(2)解釋字節(jié)碼成為指令并執(zhí)行,提供 class 文件的運行環(huán)境
(3)進行運行期間垃圾回收
(4)提供與硬件交互的平臺
7、 簡述Java代碼安全性
(1)編譯時的錯誤檢驗
(2)類裝載檢查,把本機上的類和網(wǎng)絡資源類相分離,在調(diào)入類的時候進行檢查,因而可以限制任何“特洛伊木馬”的應用
(3)字節(jié)碼校驗
(4)沙箱機制,限定訪問權限
8、 描述Java垃圾回收機制
Java 編程語言解除了程序員釋放內(nèi)存的責任。它可提供一種系統(tǒng)級線程以跟蹤每一次內(nèi)存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的內(nèi)存。垃圾收集在 Java 技術程序的生命周期中自動進行,它解除了釋放內(nèi)存的要求,這樣能夠有效避免內(nèi)存漏洞和內(nèi)存泄露(內(nèi)存泄露就是程序運行期間,所占用的內(nèi)存一直往上漲, 很容易造成系統(tǒng)資源耗盡而降低性能或崩潰 。
垃圾回收有以下特點:
(1)垃圾回收是一個自動的系統(tǒng)行為,程序員不能控制垃圾回收的功能和行為。
(2)有一些跟垃圾回收相關的方法,比如:System.gc( ) ,調(diào)用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運不運行,什么時候運行,都是無法控制的。
(3)程序員可以通過設置對象為 null,來標示某個對象不再被需要了, 這只是表示這個對象可以被回收了,并不是馬上被回收。
9、 簡述Java代碼的運行過程
(1)編寫代碼
(2)編譯
(3)類裝載 通過類裝載器裝載CLASS文件
(4)校驗代碼 由字節(jié)碼校驗
(5)解釋 由解釋器將字節(jié)碼轉換成機器碼
(6)運行
10、 簡述如何搭建Java開發(fā)環(huán)境
首先下載安裝JDK 然后配置環(huán)境
(1)配置PATH, 操作系統(tǒng)運行環(huán)境的路徑
(2)配置CLASSPATH JAVA運行應用程序時所需要的類包的路徑
(3)配置JAVA_HOME 供需要運行JAVA的程序使用
11、 簡述classpath,path,JAVA_HOME的意義和配置方法
path 操作系統(tǒng)運行環(huán)境的路徑
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、 標示符定義的規(guī)則?
(1) 首字母只能以字母、下劃線、$開頭,其后可以跟字母‘下劃線、$和數(shù)字配置CLASSPATH
(2) 表示符不能是關鍵字
(3) 標識符區(qū)分大小寫
17、 什么是關鍵字?
關鍵字就是編程語言與機器語言的編碼約定
18、 true、false、null、sizeof、goto、const那些是Java關鍵字
true 、false 、null 為JAVA的關鍵字
19、 Java的基本數(shù)據(jù)類型有幾種?分別是?
short int long boolean float double char byte
/*布爾類型(boolean)
字符型(char)
數(shù)值類型
定點類型 字節(jié)型(byte)
短整型(short)
整型(int)
長整型(long)
浮點類型 單精度(float)
雙精度(double)
20、 請寫出每種基本類型的默認值?取值范圍?分別給出一個定義的例子
默認值 取值范圍 示例
字節(jié)型 : 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、 在基本類型中,如果不明確指定,整數(shù)型的默認是什么類型?帶小數(shù)的默認是什么類型?
整數(shù)類型 默認為 int
帶小數(shù)的默認為 double
boolean的默認值 false
22、 如何定義float類型和long型
float f = 1.2f
long l = 1.2L
23、 什么是變量?
變量是用來引用一塊內(nèi)存區(qū)域或一個值,用標識符來表示,可以通過操作變量來操作變量所對應的內(nèi)存區(qū)域或值塊的值。
24、 變量的定義規(guī)則?
(1) 以字母、$、下劃線開頭,其后可以跟字母、下劃線、$和數(shù)字;
(2) 首字母小寫,中間單詞用大寫字母隔開;
(3) 名稱具有一定含義;
//4.可以先聲明再賦值也可以聲明的同時進行賦值
//5.沒有賦值的變量是不可以使用的
25、 請寫出Java編碼約定中對下列部分的要求:類、屬性、方法、包、文件名、變量、常量、控制結構、語句行、注釋
類: 一個類文件中類名要和文件名相同,類名一定要以大寫字母開頭,單詞之間用大寫字母分隔
屬性: 屬性名首字母小寫,中間用大寫字母隔開。
方法: 方法名首字母小寫,中間用大寫字母隔開。
包: 引用包必須寫在類文件的開頭,有且只能有一個包,全部用小寫字母。
控制結構:當語句是控制結構的一部分時,即使是單個語句,也應使用大括號將語句封閉。
語句行:每行只寫一個語句,并使用四個縮進的空格,使代碼更易讀,注意用分號結束。
注釋: 用注釋來說明那些不明顯代碼的段落。
常量: 常量名一般用大寫字母,單詞之間用下劃線分隔,一旦賦值不允許修改。
26、 什么是Javadoc?
按照一定格式生成程序的文檔的工具。
27、 什么是引用類型?
用戶定義類型, 它可引用類和數(shù)組。
除去基本數(shù)據(jù)類型的其他類型都是引用數(shù)據(jù)類型。
28、 什么是按值傳遞?什么是按引用傳遞?
按值傳遞:就是將該值的副本傳過去(基本數(shù)據(jù)類型+String類型的傳遞,就是按值傳遞)
按引用傳遞:就是將值的內(nèi)存地址傳過去(除基本數(shù)據(jù)類型+String以外類型的傳遞,就是引用傳遞)
如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最后是九零六,里面有大量的學習資料可以下載。
29、 如何創(chuàng)建一個新對象?如何使用對象中的屬性和方法?
使用new 關鍵字來創(chuàng)建一個新的對象;
通過對象的實例用“.”(點)來調(diào)用對象中的屬性和方法;
靜態(tài)的方法和屬性,也可以直接用類名“.”(點)來調(diào)用;
30、 簡述new關鍵字所做的工作
new 創(chuàng)建一個對象,并為對象分配一塊內(nèi)存。
31、 簡述”=” 和”= =”的功能和區(qū)別
'=' 賦值,
'= ='當比較基本數(shù)據(jù)類型的時候,判斷前后兩個值是否相等;
當比較引用數(shù)據(jù)類型的時候,判斷= =前后兩個值的內(nèi)存地址是否相等;
區(qū)別:
= :為賦值表達式
= = :為邏輯表達式
32、 什么是實例變量?什么是局部變量?什么是類變量?什么是final變量?
實例變量: 類中定義的變量,即類成員變量,如果沒有初始化,會有默認值;
局部變量: 在方法中定義的變量,必須初始化;
類變量: 用static修飾的屬性;
final變量: 用final 修飾的變量,
33、 簡述上述各種變量的定義規(guī)則和使用規(guī)則?
實例變量: 不需要static關鍵字來聲明,需要類的實例(對象)調(diào)用(用“.”);
類變量: 用static修飾,可以用類名調(diào)用,也可以用類的實例調(diào)用;
局部變量: 在方法內(nèi)任意定義變量即為局部變量;
final變量: 一旦賦值,不可以再修改的變量;
final屬性只允許賦值一次,且只能通過構造方法賦值,定義后也就是一個常量;
final修飾的變量,只允許賦值一次
34、 a++和++a的區(qū)別?
a++ : 先使用,后加1
++a : 先加1,后使用
35、 請描述instanceof、:、&、&&各自的功能
instanceof :用來判斷某個實例變量是否屬于某種類的類型。
: 三目運算符:
表達式1?表達式2:表達式3
如果表達式1為true,執(zhí)行表達式2,否則執(zhí)行表達式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:終止(跳出)最近的循環(huán)
continue:跳出本次循環(huán),執(zhí)行下一次循環(huán)
44、 定義一個一維的int數(shù)組,先創(chuàng)建它,并初始化它,給它賦值,然后輸出其中的一個值
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類型數(shù)組,直接定義并賦值,然后輸出其中的一個值
46、 把上面的數(shù)組改成2維的數(shù)組
47、 舉例說明數(shù)組拷貝方法的使用:arraycopy方法
48、 什么是構造和析構方法?功能是?
構造方法:每個類至少有一個構造方法,類初始化時調(diào)用的方法
1.方法名和類名相同
2.無返回值類型
格式:訪問權限 類名(參數(shù)列表) {};
1.自己定義構造后,就沒有默認的構造方法
2.無構造方法時,默認為空參的構造方法(無參數(shù),方法體為空)
析構方法:finalize
類銷毀時,自動調(diào)用方法
當對象在內(nèi)存中被刪除時,自動調(diào)用該方法
在此方法中可以寫回收對象內(nèi)部的動態(tài)空間的代碼
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.易于查找和使用適當?shù)念?/p>
2.包不止包含類和接口,還可以包含其它包,形成層次的包空間
3.有助于避免命名沖突
52、 請寫出5個以上的JDK中的包,以及他們的基本功能
java.awt: 包含構成抽象窗口工具集的多個類,用來構建和管理應用程序的圖形用戶界面
java.lang: 提供java編成語言的程序設計的基礎類
java.io: 包含提供多種輸出輸入功能的類,
java.NET: 包含執(zhí)行與網(wǎng)絡有關的類,如URL,SCOKET,SEVERSOCKET,
java.applet: 包含java小應用程序的類
java.util: 包含一些實用性的類
53、 什么是包裝類?Java中都有哪些包裝類
在JDK中針對各種基本類型分別定義相應的引用類型 --------------稱為封裝類
Boolean Byte Short Integer Long Float Double Character
54、 OOP(面向對象)語言的三大特征是?
封裝性,繼承性,多態(tài)性
55、 分別表述類的三大特性及其他們的功能
封裝:隱藏類的實現(xiàn)細節(jié)、迫使用戶去使用一個接口去訪問數(shù)據(jù)、使代碼更好維護
繼承:子類可以直接繼承使用父類的方法,程序員只需要做的是定義額外特征或規(guī)定將適用的變化
多態(tài)性:同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力
56、 如何實現(xiàn)繼承?繼承的規(guī)則?
public class A extends B{
}
(1) 單繼承性
(2) 構造方法不能繼承
(3) super引用父類,調(diào)用父類的屬性,方法
(4) 當子類中出現(xiàn)與父類的方法名,返回類型,參數(shù)列表相同的方法時要覆蓋此方法
57、 簡述this和super的功能和用法
this :
(1) 能訪問除構造方法以外所有的屬性、方法,通過this. 來調(diào)用方法和屬性
(2) 不可以在靜態(tài)方法中使用,
(3) 在調(diào)用其它構造方法時,必須放在該構造方法的第一行
(4) 在構造方法中使用this(參數(shù)列表),相當于調(diào)用本類的其它構造方法,它必須作為構造方法的第一句
super :訪問父類
(1) super. 點取父類中被子類隱藏的方法和屬性,
(2) 通過 super(參數(shù)列表) 來調(diào)用父類的屬性和方法,在調(diào)用父類的構造方法時必須放在子類構造方法里的第一行;
58、 如何確定在多態(tài)的調(diào)用中,究竟是調(diào)用的那個方法?
new的是哪一個類就是調(diào)用的哪個類的方法。
59、 請描述方法定義的完整的語法結構
權限修飾符 修飾符 返回類型 方法名(參數(shù)) 例外{
方法體;
}
60、 什么是重載?
在一個類中出現(xiàn)方法名相同,但參數(shù)列表不同時,這種情況就是重載。
61、 簡述重載的規(guī)則
(1) 方法名稱必須相同;
(2) 參數(shù)列表必須不同(個數(shù)不同,或類型不同,或參數(shù)排列順序不同);
(3) 與返回類型無關;
62、 什么是方法的覆蓋?什么情況下出現(xiàn)?
方法覆蓋:
子類可以修改從父類繼承過來的行為,也就是說子類可以創(chuàng)建一個與父類方法有不同功能的方法,但具有相同的:名稱、返回類型名和參數(shù)列表。
在父子類的情況下出現(xiàn)時。
63、 方法覆蓋的規(guī)則?
(1) 方法名要和父類中被覆蓋的方法名相同,返回類型相同,參數(shù)列表相同。
(2) 訪問權限要大于等于被覆蓋方法的權限。
(3) 例外列表要小于等于被覆蓋方法的例外列表。
64、 static修飾符的功能是?可以用在什么地方?怎么訪問?
static 修飾符功能:
(1) 共用一塊內(nèi)存區(qū)域,也就是用static修飾的變量或成員方法對所有類的實例都是相同的
(2) 靜態(tài)成員方法和靜態(tài)變量的優(yōu)點在于他們能在沒有創(chuàng)建類的任何一個實例的情況下被引用。
(3) 可以用在方法或屬性上
訪問方式:
(1) 直接使用類名調(diào)用
(2) new 一個實例,用實例調(diào)用
65、 static的基本規(guī)則
(1) 類中的靜態(tài)方法只可以調(diào)用靜態(tài)的屬性和方法,不允許調(diào)用非靜態(tài)的屬性和方法。
(2) 靜態(tài)變量為類變量,可以用類名直接調(diào)用靜態(tài)的屬性和方法。
(3) 靜態(tài)方法中不允許出現(xiàn)this和super
(4) 構造方法不允許聲明static
(5) 非靜態(tài)變量為實例變量,通過實例調(diào)用
(6) 靜態(tài)方法不能被非靜態(tài)方法覆蓋
66、 final修飾符的功能是?可以用在什么地方?
功能:final標記所有通用的功能,不能隨意更改
可以用在類、屬性和方法上
67、 final的基本規(guī)則
(1) final修飾的類不能被繼承
(2) final修飾的成員變量只允許賦值一次,且只能通過構造方法里賦值。
(3) final修飾的局部變量即為常量,只能賦值一次。
(4) final修飾的方法不允許被子類覆蓋。
68、 什么是抽象方法,什么是抽象類
用abstract修飾的方法,只有方法的聲明,而沒有方法的實現(xiàn),就叫抽象方法。
用abstract修飾的類,就叫抽象類。
69、 抽象類的規(guī)則
(1) 抽象類內(nèi)部可以沒有抽象方法
(2) 必須用abstract修飾
(3) 不能夠直接使用抽象類,必須通過子類繼承并且實現(xiàn)
(4) 抽象方法不允許被private修飾
70、 什么情況下使用抽象類
(1) 當一個類的一個或多個方法是抽象方法時;
(2) 當類是一個抽象類的子類,并且不能為任何抽象方法提供任何實現(xiàn)細節(jié)或方法體時;
(3) 當一個類實現(xiàn)一個接口,并且不能為任何抽象方法提供實現(xiàn)細節(jié)或方法體時;
71、 equals方法和”= =”的功能和區(qū)別
功能:判斷對象是否相等
區(qū)別:
equals方法比較的是對象的值
= =:比較的是對象值的內(nèi)存地址,對基本數(shù)據(jù)類型來說= =比較的是數(shù)值
72、 toString方法的功能和基本寫法
返回一個String類型
public String toString(){
return “”;
}
73、 String的方法的功能和基本使用方法,請描述5個以上
substring(參數(shù)1,參數(shù)2); 功能:取字符串中參數(shù)1到參數(shù)2的的所有字符; 'String'.subString(0,1);
replace(參數(shù)1,參數(shù)2); 功能:用參數(shù)1中的值替換字符串中所有參數(shù)2的值 'String'.replace(ing,tt);
equals( ); 功能:判斷兩個字符串是否相等 'String'.equals('tt');
trim( ); 功能:去掉字符串兩邊的空格 'String'.trim();
indexof( ); 功能:查找字符串中參數(shù)所在位置,并返回字符串第一個出該參數(shù)的下標
'String'.indexOf('ing');
split( ); 功能:根據(jù)參數(shù)分割該字符串 'String'.split('-');
74、 為什么使用StringBuffer類?有什么功能和優(yōu)點?
–只創(chuàng)建一個對象
–StringBuffer 對象的內(nèi)容是可以被修改的
–除了字符的長度之外,還有容量的概念
–通過動態(tài)改變?nèi)萘康拇笮?,加速字符管?/p>
75、 舉例說明如何使用StringBuffer
StringBuffer sb = new StringBuffer();
sb.append('aaa');
76、 如何使用Java讀寫系統(tǒng)屬性?
讀:
寫:
System.setProperties(props);
77、 簡述properties文件的結構和基本用法
結構:擴展名為properties的文件,內(nèi)容為key、value的映射,例如“a=2”
用法:
78、 什么是接口?接口的定義規(guī)則?
接口是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。
public interface Tt {
public void outPut( );
public int tt( );
}
79、 接口的作用?為什么使用接口?
多重繼承
封裝、隔離
功能,實現(xiàn)的分離
多態(tài)
便于后期維護
接口是可插入性的保證。
80、 什么是多重接口
就是一個類實現(xiàn)多個接口
81、 描述接口的基本思想?
封裝 隔離
接口及相關機制的最基本作用在于:通過接口可以實現(xiàn)不相關類的相同行為,
而不需考慮這些類之間的層次關系。
根據(jù)接口可以了解對象的交互界面,而不需了解對象所屬的類。
面向對象程序設計講究“提高內(nèi)聚,降低耦合”。
如果你想學習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、 如何選擇接口和抽象類?為什么?
優(yōu)先選用接口,盡量少用抽象類
在下列情況下選擇抽象類:需要定義子類的行為,又要為子類提供共性的功能。
85、 什么是異常,異常的分類?
程序中導致程序中斷的一些情況叫做異常,一般程序員可以處理。
異常分為運行時異常和非運行時異常(一般異常)
運行時異常是指因設計或實現(xiàn)方式不當導致的問題。也可以說,是程序員的原因導致的,本來可以避免發(fā)生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現(xiàn)這些異常的代碼不需要try塊包圍。
非運行時異常是指除運行時異常以外所有的異常,出現(xiàn)這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,
86、 簡述處理異常的兩種方式?
拋出(throws)和catch語句處理
87、 簡述try塊的功能和規(guī)則
try塊內(nèi)部一般寫一些編程人員認為可能會出現(xiàn)異常的代碼,使程序運行時不會因為出現(xiàn)異常而中斷。
88、 簡述catch塊的功能和規(guī)則
功能:可以截獲所聲明的異常,并在語句塊內(nèi)對其進行處理
規(guī)則:catch(Exeption e){
e.printStackTrace( );
}
89、 簡述finally塊的功能和規(guī)則
finally塊一般寫一些不論是否發(fā)生異常都必須執(zhí)行一次的代碼
例如關閉與數(shù)據(jù)庫的連接等
90、 簡述throw和throws的功能和使用方法
throw 指編程人員主動拋出一個異常
throw new NullPointerExeption( );
throws指程序遇到異常情況自動的被動拋出一個異常
public void test( ) throws Exeption{}
91、 異常的分類?
錯誤(Error): JVM 系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況,程序員不可控制
例外(Exception):其它因編程錯誤或偶然的外在因素導致的一般性問題,程序可以控制
92、 什么是預定義異常
java程序中預先定義好的異常叫做預定義異常
93、 簡述自定義異常的規(guī)則
寫一個類繼承Exception
用戶自定義異常通常屬Exception范疇,依據(jù)慣例,應以Exception結尾,應該由人工創(chuàng)建并拋出。
94、 什么是斷言?
用來證明和測試程序的假設。
95、 如何使用斷言?舉例說明
一種是assert布爾表達式>>;另一種是assert布爾表達式>>:細節(jié)描述>>。
assert a= =10 : '這里a等于10';
1、 什么是集合?什么是元素?
可以包含其他對象的簡單對象就叫集合
集合框架中所包含的對象就叫做元素
2、 描述出Java集合框架中集合的接口關系
Collection----Set和List
Set----HashSet和SortedSet
List----ArrayList和LinkedList
Map----HashMap、SortedMap和TreeMap
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接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值
5、 代碼示例:Set接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值
6、 代碼示例:Map接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪
7、 描述List接口、Set接口和Map接口的特點
List接口中的對象按一定順序排列,允許重復
Set接口中的對象沒有順序,但是不允許重復
Map接口中的對象是key、value的映射關系,key不允許重復
8、 如何給集合排序?
實現(xiàn)comparable接口
1、 什么是流?可畫圖說明
流是要傳輸?shù)臄?shù)據(jù)在源和目的地之間運行的軌跡。
2、 描述I/O流的基本接口和類的結構
3、 代碼示例:使用URL流,讀取網(wǎng)頁代碼
4、 什么是Unicode?
是一種字符的編碼方式,占16位字節(jié),Java 技術使用 Unicode 來表示字符串和字符。
5、 代碼示例:如何使用Reader和Writer來進行輸入輸出
//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、 什么叫保持?什么是可序列化?如何實現(xiàn)可序列化?
將一個對象存放在某種類型的永久存儲器上(比如硬盤,光盤,軟盤等),稱為保持。
標識一個類可以被持久化,叫序列化,也叫串行化或持久化。表示這個類中的數(shù)據(jù)可以按流式輸出。
實現(xiàn)可序列化的方法:實現(xiàn)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類的基本功能
處理文件和獲取文件信息;文件或文件夾的管理。
概括一句話就是:除了讀寫文件內(nèi)容其他的都可以做。
9、 代碼示例:如何使用隨機文件讀寫類來讀寫文件內(nèi)容
RW表示文件時可讀寫的
讀:
try{
RandomAccessFile f = new RandomAccessFile('test.txt', 'rw');
long len = 0L;
long allLen = f.length();
int i = 0;
while (len <>
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、 代碼示例:如何使用流的基本接口來讀寫文件內(nèi)容
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、 線程的三個部分是?
處理機
代碼
數(shù)據(jù)
3、 為什么使用多線程
使UI響應更快
利用多處理器系統(tǒng)
簡化建模
4、 代碼示例:Java中實現(xiàn)多線程的兩種方式,包括如何定義多線程,如何使用多線程
實現(xiàn)Runnable接口
class Thread1 implements Runnable{
public void run( ){
//run里一般寫一個while(true)循環(huán)
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、 如何實現(xiàn)線程的調(diào)度?如何暫停一個線程的運行
調(diào)度用wait和notify,
----
sleep()
6、 什么是線程的優(yōu)先級
判斷哪個線程先執(zhí)行的級別
7、 簡述sleep方法和wait方法的功能和區(qū)別
sleep是讓線程休眠一段時間
wait是讓線程掛起
8、 什么是守候線程
隱藏在后臺持續(xù)運行的線程
9、 什么是臨界資源
指多個線程共享的資源
10、 什么是互斥鎖,Java中如何實現(xiàn)
用來保證在任一時刻只能有一個線程來訪問臨界資源的那個標記
在Java中使用
用在對象前面限制一段代碼的執(zhí)行
用在方法聲明中,表示整個方法為同步方法。
11、 什么是死鎖?如何避免?
如果程序中有多個線程競爭多個資源,就可能會產(chǎn)生死鎖。當一個線程等待由另一個線程持有的鎖,而后者正在等待已被第一個線程持有的鎖時,就會發(fā)生死鎖。
要避免死鎖,應該確保在獲取多個鎖時,在所有的線程中都以相同的順序獲取鎖。盡量少用臨界資源。
12、 簡述wait和notify,notifyAll的使用
被鎖定的對象可以調(diào)用wait( )方法,這將導致當前線程被阻塞并放棄該對象的互斥鎖,即解除了wait( )方法的當前對象的鎖定狀態(tài),其他的線程就有機會訪問該對象。
notify使等待隊列上的一個線程離開阻塞狀態(tài)
notifyAll使等待隊列上的所有線程離開阻塞狀態(tài)
13、 什么是url?基本的格式是?
統(tǒng)一資源定位器
Http://www.163.com:port
14、 簡述IP,Port,TCP的基本功能
IP代表網(wǎng)絡位置
Port代表端口號
TCP可保證不同廠家生產(chǎn)的計算機能在共同網(wǎng)絡環(huán)境下運行,解決異構網(wǎng)通信問題,是目前網(wǎng)絡通信的基本協(xié)議
15、 簡述Java網(wǎng)絡模型的基本功能
描述服務端和客戶端的連接過程
16、 簡述Java網(wǎng)絡編程究竟做些什么?如何做?
1.建立連接
2.準備輸出的數(shù)據(jù),流式輸出
3.流式輸入,編程業(yè)務需要的格式
4.關閉連接
服務器分配一個端口號。如果客戶請求一個連接,服務器使用accept( )方法打開socket連接。
客戶在host的port端口建立連接。
服務器和客戶使用InputStream和OutputStream進行通信。
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、 TCP和UDP區(qū)別
TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)是傳輸層協(xié)議
TCP是面向連接的可靠數(shù)據(jù)傳輸協(xié)議,能保證傳輸內(nèi)容的完整和準確;數(shù)據(jù)傳輸?shù)妮o助開銷大,效率低
UDP: 是無連接的,不可靠地傳輸協(xié)議,不能保證傳輸內(nèi)容的完整和準確,對信息的適時要求比較高
1、 什么是設計模式?
就是經(jīng)過實踐驗證的用來解決特定環(huán)境下特定問題的解決方案。
2、 設計模式用來干什么?
尋找合適的對象
決定對象的粒度
指定對象的接口
描述對象的實現(xiàn)
運用復用機制
重復使用經(jīng)過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少工作量、提高正確率等目的
3、 什么是對象粒度
對象中方法的大小就是粒度
4、 基本的Java編程設計應遵循的規(guī)則?
面向接口編程,優(yōu)先使用對象組合
5、 設計模式的應用范圍
所能解決的特定的一類問題中
6、 簡述什么是單例模式,以及解決的問題,應用的環(huán)境,解決的方案,應用時應注意什么?
解決的問題:在任何時間內(nèi)只有一個類實例存在的模式。
應用環(huán)境:需要有一個從中進行全局訪問和維護某種類型數(shù)據(jù)的區(qū)域的環(huán)境下使用單例模式。
解決方案:保證一個類只有一個類實例存在。
本質(zhì):控制實例的數(shù)量。
注意:要合理的使用單例,避免單例成為瓶頸。
7、 代碼示例:單例模式的兩種實現(xiàn)方法,并說明優(yōu)缺點
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;
}
}
第一種方式:裝載類的時候就創(chuàng)建類的實例,用空間換時間。
第二種方式:延遲裝載,不需每次都創(chuàng)建一個類實例,而只是在第一次使用時創(chuàng)建,有效的利用資源,用時間換資源。
8、 簡述什么是工廠模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質(zhì)
利用工廠來解決接口選擇的問題的模式。
應用環(huán)境:當一個類無法預料要創(chuàng)建哪種類的對象或是一個類需要由子類來指定,創(chuàng)建的對象時,就需要用到工廠模式。
解決方案:定義一個創(chuàng)建對象的類,在類的方法中決定具體實例化哪一個類。
本質(zhì):就是根據(jù)不同的情況來選擇不同的實現(xiàn)類,重在選擇。
9、 代碼示例:工廠模式的實現(xiàn)方法
單獨是使用工廠:
public class Factory{
public static Sample creator(int which){
if (which==1){
return new SampleA();
}else if (which==2)
return new SampleB();
}
}
}
工廠+單例:
public class MyFactory{
public static MyFactory f = null;
public MyFactory(){
}
public static MyFactory getInstance(){
if(f==null){
f=new MyFactory();
}
}
public DBDAO getDAO(){
return new DBDAOImpl();
}
}
10、 簡述什么是值對象模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質(zhì)
用來把一組數(shù)據(jù)封裝成一個對象的模式
解決問題:在遠程方法的調(diào)用次數(shù)增加的時候,相關的應用程序性能將會有很大的下降
解決方案:使用值對象的時候,可以通過僅僅一次方法調(diào)用來取得整個對象,而不是使用多次方法調(diào)用以得到對象中每個域的數(shù)值
本質(zhì):封裝數(shù)據(jù)。
11、 代碼示例:值對象模式的實現(xiàn)方法
步驟:
public class UserModel{
private String userId;
private String userName;
public void setUserId(String id){
this.userId = id;
}
public String getUserId(){
return userId;
}
public void setUserName(String name){
this.userName = name;
}
public String getUserName(){
return userName;
}
}
12、 簡述什么是DAO模式,以及他解決的問題,應用的環(huán)境,解決的方案,模式的本質(zhì)
數(shù)據(jù)訪問對象
解決問題:根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問也不同。根據(jù)存儲的類型(關系數(shù)據(jù)庫、面向對象數(shù)據(jù)庫、純文件等)和供應商實現(xiàn)不同,持久性存儲(如數(shù)據(jù)庫)的訪問差別也很大。如何對存儲層以外的模塊屏蔽這些復雜性,以提供統(tǒng)一的調(diào)用存儲實現(xiàn)。程序的分布式問題
解決方案:將數(shù)據(jù)訪問邏輯抽象為特殊的資源,也就是說將系統(tǒng)資源的接口從其底層訪問機制中隔離出來;通過將數(shù)據(jù)訪問的調(diào)用打包,數(shù)據(jù)訪問對象可以促進對于不同數(shù)據(jù)庫類型和模式的數(shù)據(jù)訪問。
本質(zhì):分層,是系統(tǒng)組件和數(shù)據(jù)源中間的適配器。(一層屏蔽一種變化)
13、 代碼示例:DAO模式的實現(xiàn)方法
14、 什么是框架?框架的優(yōu)點?
框架是能夠完成一定功能的半成品
1.優(yōu)點:完成一定的功能、提供一個精良的應用程序架構
?。?框架都是以接口的形式出現(xiàn)
3.應該了解框架完成的功能、框架的API接口、框架的功能是怎么實現(xiàn)的
15、 什么是開放-封閉法則(OCP)
可擴展但是不可以更改已有的模塊
對擴展是開放的,對修改是封閉
16、 什么是替換法則(LSP)
使用指向基類(超類)的引用的函數(shù),必須能夠在不知道具體派生類(子類)對象類型的情況下使用。
17、 如何綜合使用我們學過的設計模式來構建合理的應用程序結構
是采用接口進行隔離,然后同時暴露值對象和工廠類,如果是需要數(shù)據(jù)存儲的功能,又會通過DAO 模式去與數(shù)據(jù)存儲層交互。
18、 構建常用的合理的Java應用包結構
Ui(表現(xiàn)層)
business--factory,ebi,ebo
dao--factory,dao,impl
聯(lián)系客服