筆試題做題筆記

1
單引號表示字符,爲char類型
雙引號表示字符串,爲String類型
String不是基本類型,是final類,是引用類型
2
“向上兼容”–即:不同數據類型的數據參與運算,數據類型要強制轉換,轉換的方向是

(unsigned)char,(unsigned)short->int->unsigned->long->unsigned long->float->double->long,double。

char與int相加,爲int類型
char爲16字節,int爲32字節的,在做運算的時候,char類型爲先轉爲int類型在做相加,char與char相加時也會先轉爲int
3
.java源文件可以編寫多個class文件,但只能有一個public class,且與.java文件同名
4
float與double的區別
doubel是32位,float是16位,double表示的範圍和精度都比float大,java默認的小數聲明是double,
double d=4.0,
而float則必須如下聲明,
float f=4.of,
5
抽象方法類似於接口,但抽象方法可以有部分實現,接口完全只能抽象。
所謂抽象,就是說沒有{ },像接口中就沒有{ },
而且抽象方法前綴要用abstract聲明
abstract class與interface的區別
1.兩個都不能實例化,只能聲明,interface是完全抽象,不能有實現類
而abstract class 可以有實現類,只要在abstract class內有抽象方法就可以了。
2. interface需要實現,要用implements,而abstract class需要繼承,要用extends。
一個類可以實現多個interface,但一個類只能繼承一個abstract class。
interface強調特定功能的實現,而abstract class強調所屬關係。
3.interface都爲public,不管加不加public都是public
6
java關鍵字
abstract 表明類或者成員方法具有抽象屬性
assert 用來進行程序調試
boolean 基本數據類型之一,布爾類型
break 提前跳出一個塊
byte 基本數據類型之一,字節類型
case 用在switch語句之中,表面其中的一個分支  
catch 用在異常處理中,用來捕捉異常
char 基本數據類型之一,字符類型
class 類
const 保留關鍵字,沒有具體含義
continue 回到一個塊的開始處
default 默認,例如,用在switch語句中,表明一個默認的分支
do 用在do-while循環結構中
double 基本數據類型之一,雙精度浮點數類型
else 用在條件語句中,表明當條件不成立時的分支
enum 枚舉
extend 表明一個類型是另一個類型的子類型,這裏常見的類型有類和接口
final 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變
finally 用於處理異常情況,用來聲明一個基本肯定會被執行到的語句塊
float 基本數據類型之一,單精度浮點數類型
for 一種循環結構的引導詞
goto 保留關鍵字,沒有具體含義
if 條件語句的引導詞
implements 表明一個類實現了給定的接口
import 表明要訪問指定的類或包
instanceof 用來測試一個對象是否是指定類型的實例對象
int 基本數據類型之一,整數類型
interface 接口
long 基本數據類型之一,長整數類型
native 用來聲明一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的
new 用來創建新實例對象
package 包
private 一種訪問控制方式:私用模式
protected 一種訪問控制方式:保護模式
public 一種訪問控制方式:共用模式
return 從成員方法中返回數據
short 基本數據類型之一,短整數類型
static 表明具有靜態屬性
strictfp 用來聲明FP_strict(單精度或雙精度浮點數)表達式遵循IEEE 754算術規範
super 表明當前對象的父類型的引用或者父類型的構造方法
switch 分支語句結構的引導詞
sychronized 表明一段代碼需要同步執行
this 指向當前實例對象的引用
throw 拋出一個異常
throws 聲明在當前定義的成員方法中所有需要拋出的異常
transient 聲明不用序列化的成員域
try 嘗試一個可能拋出異常的程序塊
void 聲明當前成員方法沒有返回值
volatile   表明兩個或者多個變量必須同步地發生變化
while   用在循環結構中   
7
final, finally, finalize的區別
final (關鍵字) 一個類如果被聲明爲final類,就不可被繼承
一個類不能即被聲明爲final類,又被聲明爲abstract類
將變量或方法聲明爲final,可以保證它們在使用中不被改變。
被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。
被聲明爲final的方法也同樣只能使用,不能重載

finally 在異常處理時提供 finally 塊來執行任何清除操作。

try{......}catch(Exception e){.......
}
finally{.......}

finalize

方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。(重點內容)
8
static

    static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念。

    被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。

    用public修飾的static成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象市,不生成static變量的副本,而是類的所有實例共享同一個static變量。

    static變量前可以有private修飾,表示這個變量可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問權限限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問權限關鍵字的效果也以此類推。

    static修飾的成員變量和成員方法習慣上稱爲靜態變量和靜態方法,可以直接通過類名來訪問,訪問語法爲:

類名.靜態方法名(參數列表…)
類名.靜態變量名
用static修飾的代碼塊表示靜態代碼塊,當Java虛擬機(JVM)加載類時,就會執行該代碼塊(用處非常大,呵呵)。

1、static變量
按照是否靜態的對類成員變量進行分類可分兩種:一種是被static修飾的變量,叫靜態變量或類變量;另一種是沒有被static修飾的變量,叫實例變量。兩者的區別是:
對於靜態變量在內存中只有一個拷貝(節省內存),JVM只爲靜態分配一次內存,在加載類的過程中完成靜態變量的內存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。
對於實例變量,沒創建一個實例,就會爲實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響(靈活)。

2、靜態方法
靜態方法可以直接通過類名調用,任何的實例也都可以調用,因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態成員變量和成員方法。因爲實例成員與特定的對象關聯!這個需要去理解,想明白其中的道理,不是記憶!!!
因爲static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract。

3、static代碼塊
static代碼塊也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM加載類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先後順序依次執行它們,每個代碼塊只會被執行一次。
**static和final一塊用表示什麼
static final用來修飾成員變量和成員方法,可簡單理解爲“全局常量”!
對於變量,表示一旦給值就不可修改,並且通過類名可以訪問。
對於方法,表示不可覆蓋,並且可以通過類名直接訪問。

    特別要注意一個問題:
    對於被static和final修飾過的實例常量,實例本身不能再改變了,但對於一些容器類型(比如,ArrayList、HashMap)的實例變量,不可以改變容器變量本身,但可以修改容器中存放的對象,這一點在編程中用到很多。**

9
能使用throw拋出
error
throwable
Exception
RuntimeException、
10
&與&&,||與|的區別
&與&& ,這兩個的區別在於&&第一個條件成立就,不去判斷後面的條件了,&是都判斷。
||與|,這兩個的區別在於||第一個條件成立就,不去判斷後面的條件了,|是都判斷。
例如
(23!=23)&&(100/0==0)與(23!=23)&(100/0==0)
&&時判斷第一個條件爲false,後面的100/0==0這個條件就沒有進行判斷。
&時要對所有的條件進行判斷,所以會對後面的條件進行判斷
(23==23)||(100/0==0)(23==23)|(100/0==0)
||判斷第一個條件爲true,後面的條件就沒有進行判斷就執行了括號中的代碼,而|要對所有的條件進行判斷
& 表示“按位與”,這裏的”位“是指二進制位(bit)。
例:十進制數字8 轉化爲二進制是:1000 ;數字9 轉化爲二進制是1001 。
則如有以下程序:

public class Test {
public static void main(String[] args) {
System.out.println(9 & 8);
}
}

輸出結果應該是:8
原因:1001 & 1000 = 1000 。 計算機中一般1表示真,0表示假。最左邊一位1&1=1,最右邊一位1&0 = 0.

2) && 表示邏輯”與“ ,即java中的boolean值纔可以存在於&&符號的左右兩側。
true && false = false ,true && true = true , 依舊是”一假必假”。
值的注意的是:&& 符號有所謂的“短路原則”,當 A && B 出現時,如果A經判斷是假,那麼B表達式將不會獲得執行或被判斷的機會。直接結果就爲假。
& 和 && 相同點:
都表示“與”操作。這裏的“與”和數學中的“與或非”中的“與”意義相同,都遵循“一假必假”原則。即“與”符號兩邊的元素只要有一個爲假,”與”操作執行後的結果就爲假。
11
在Servlet的生命週期中,容器只調用一次的方法是
init()和destroy(),初始化和銷燬
Servlet生命週期分爲三個階段:
  1,初始化階段 調用init()方法
  2,響應客戶請求階段  調用service()方法
  3,終止階段  調用destroy()方法
12
JSP指令元素
a) page指令
語法: <%@ page attributeName=”attribuerValue”…%>
作用: 利用page指令中的屬性可以和容器進行通信,這些屬性的設置對整個jsp都有影響。
b) include指令
語法: <%@ include file=”url”%>,稱爲靜態導入(靜態包含)
作用: 在一個頁面中導入另一個頁面的內容(這些內容一般不會有變化,如公司的標題和版權等信息)。
特點: 在jsp翻譯成servlet後就將被導入的頁面內容嵌入到servlet中。
導入時間發生在翻譯階段。
被導入的資源: html、xml、jsp等
優點: 執行效率高
缺點: 當被導入頁面的內容發生變化,那麼jsp必須要重新被翻譯。
c) taglib指令
<%@ taglib uri=”” prefix=”“%>
指定在jsp中要使用的標籤庫描述文件(*.tld)的路徑
12
表單標記
<FORM>
<INPUT>
Text, Radio,Checkbox, Password, Submit/Reset, Image, File, Hidden, Button。
<SELECT>
<OPTION>
<TEXTAREA>
13
javax.servlet包中包含了7個接口,3個類和2個異常類,它們分別是:
接口:

RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse和SingleThreadModel

類:

GenericServlet,ServletInputStream和ServletOutputStream

異常類:

ServletException和UnavailableException

14
CallableStatemet調用存儲過程
15
do while 循環至少會執行一次,先do後判斷是否符合while 如果爲false 則循環終止,如果true,繼續執行
16
類名與構造函數可以同名,但是構造函數沒有返回值
17
java代碼經過編譯後會產生byte code
18
java是由c++發展而來的
19
abstract 不可以修飾字段,abstract既然爲抽象方法,就沒有實現,所以就不存在body,也不會存在{}
20
形參與實參
實參:爲常數,表達式,變量,函數 ,是具有確定的值的
形參:爲空白或佔位符,可以看做方法中的局部變量(local variable),傳遞的是對對象的引用,而不是對象本身
實參事又來傳遞值給形參,形參是接收實參的值的
形參是定義方法的時候,該方法所攜帶的參數
實參是你在調用方法的時候,給這個方法傳遞的參數值
21
什麼是實例方法
例如有一個教師類,教師類裏有一個講課的方法,有一個教師小明,小明也有講課的方法,,那麼小明講課的方法就稱爲一個教師的實例方法
22
java程序的種類
applet application servlet
java程序的種類有:
1、內嵌於web文件中,由瀏覽器來觀看的Applet 2、可獨立運行的Application 3、服務器端的Servlet
23
2.下列說法正 確的有()
A. 環境變量可在編譯source code時指定
B.在編譯程序時,所能指定的環境變量不包括 class path
C. javac一次可同時編譯數個Java源文件
D. javac.exe能指定編譯結果要置於哪個目錄(directory)
答案:BCD
24
java的命名規則
ava 變量命名規則:
1. 大小寫有別,例如 a 和 A是兩個變量
2. 長度任意
3. 可以任何字母開始,另外還可以以”_”和”"" ”是很多代碼生成器用的,人工寫出來的代碼不鼓勵"_" "$"
4. 除了第一個字符,後面可以跟任何字母,數字,_ 和$
new 是關鍵字不行。 不能以數字開頭。 不用有“.”這種符號
25
數組 不是原生類,數組的大小需要指定 ,指定後初始化多大就多大,不能隨意更改
26
6.下列正確的有()
A. call by value不會改變實際參數的數值 B. call by reference能改變實際參數的參考地址
C. call by reference不能改變實際參數的參考地址 D. call by reference能改變實際參數的內容
答案:ACD
27
7.下列說法 錯誤的有()
A.在類方法中可 用this來調用本類的類方法
B.在類方法中調用本類的類方法時可直接調用 C.在類方法中只能調用本類中的類方法
D.在類方法中絕對不能調用實例方法
答案:CD
解釋:
28
1.Java程序中的起始類名稱必須與存放該類的文件名相同。() 答案:正確
2.Unicode是用16位來表示 一個字的。() 答案:正確
3.原生類中的數據類型均可任意轉換。() 答案:錯誤
29
當父類與子類都有靜態代碼塊和構造函數的時候,執行順序如下:
父類靜態代碼塊 > 子類靜態代碼塊
父類構造函數 > 子類構造函數(先有父親,後有孩子)
如果是多級繼承關係的話,最高層的父類首先執行,然後依次遞減

總結:靜態優先執行,父類優先執行
非靜態代碼塊與構造函數,都與對象有關,在對象被初始化是先執行非靜態代碼塊,在執行構造函數
注意:靜態代碼塊是在JVM加載類的時候執行的,而且靜態代碼塊執行且僅執行一次
靜態代碼塊!–>非靜態代碼塊!–>默認構造方法!–>普通方法中的代碼塊!
非靜態代碼塊!–>默認構造方法!–>普通方法中的代碼塊!

30
hashMap與hashTable的區別
可以從三個方面看出二者的區別:
從歷史上:hashtable是基於陳舊的dictionary類,而hashMap是實現map接口的一個實現
從線程安全上來說:hashtable線程安全,hashmap線程不安全
從值上來說:hashMap具有key和value,允許空值作爲key和value

31
Arraylist和vector的區別
arraylist線程不安全,vector線程安全
當需要增長時,arraylist是增長原來的一半,vector增長原來的一倍

32
多線程有兩種實現方法,分別是繼承thread類與實現runable接口
同步的實現方法有兩種,分別是Synchronized,wait和notify

33
char可以儲存中文字符嗎?
在java中定義一箇中文字符是用Unicode表示的,一個char佔16個字節,所以儲存一箇中文沒有問題

34
一個英文佔一個字節
一箇中文佔2個字節

35
子類與父類有關繼承執行順序
new誰就調用誰
new子類先執行父類在執行子類

36
jsp的內置對象
request對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的get/post數據。
response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理
application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全局變量”。
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。
pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。
config 對象的主要作用是取得服務器的配置信息。
Cookie是Web服務器保存在用戶硬盤上的一段文本。
exception 對象的作用是顯示異常信息,只有在包含 isErrorPage=”true” 的頁面中纔可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。

37
.從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

2.從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.
redirect:不能共享數據.

3.從運用地方來說
forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.

4.從效率來說
forward:高.
redirect:低.

38
任何操作都在return前執行

39
枚舉型 有幾個對象就會初始化幾次
枚舉類 所有的枚舉值都是類靜態常量,在初始化時會對所有的枚舉值對象進行第一次初始化。

40
ArrayList和LinkedList的大致區別:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。 ArrayList和LinkedList是兩個集合 類,用於存儲一系列的對象引用(references)。

ArrayList和LinkedList在性能上各 有優缺點,都有各自所適用的地方,總的說來可以描述如下:

  1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對 ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。

  2.在ArrayList的 中間插入或刪除一個元素意味着這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。

  3.LinkedList不 支持高效的隨機元素訪問。

  4.ArrayList的空 間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間

  可以這樣說:當操作是在一列數據的後面添加數據而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中間添加或刪除數據,並且按照順序訪問其中的元素時,就應該使用LinkedList了。

41
Java反射機制主要提供了以下功能:
在運行時判斷任意一個對象所屬的類;
在運行時構造任意一個類的對象;
在運行時判斷任意一個類所具有的成員變量和方法;
在運行時調用任意一個對象的方法;
生成動態代理。

42
抽象類:用abstract修飾,抽象類中可以沒有抽象方法,但抽象方法肯定在抽象類中,且抽象方法定義時不能有方法體;
抽象類不可以實例化只能通過繼承在子類中實現其所有的抽象方法;
抽象類如果不被繼承就沒有任何意義;
抽象類爲子類定義了一個公共類型,封裝了子類中的重複內容。
接口:
同Interface關鍵字定義接口,是特殊的抽象類因爲類中只包含抽象方法;接口中不能定義成員變量可以定義常量;
接口是其通過其他類使用implements關鍵字定義實現類,一個類一旦實現接口就必須實現其中的所有抽象方法,一個類可以實現多個接口,接口名之間用逗號隔開即可;
一個接口可以通過extends關鍵字繼承另一個接口,與此同時繼承了父類中的所有方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章