Java oo 概念總結
1、 Java語言的特點是什麽?
簡單 面向對象 跨平臺 多線程 健壯性安全性 垃圾回收機制
2、如何編譯和執行java文件?產生幫助文檔用什麽命令?
編譯: javac 文件名
執行: java 類名
產生幫助文檔 javadoc 文件名
3、虛擬機的工作流程是什麽?
編寫源文件(*.java)------編譯成*.class字節碼文件------類加載--------字節碼校驗----解釋器----操作系統。
4、main方法怎麽書寫?
Public static void main(String[] aaa){}
Static public void main(String sss[]){}
5、什麽是標識符?標識符有幾種?標識符的命名規則是什麽?
凡是可以命名的地方叫標識符。我們可以使用標識符命名類、方法、變量。
標識符分兩種:系統標識符(關鍵字)和用戶標識符。
標識符命名規則:以字母、數字、下劃線、$組成。不能以數字開始。
6、Java中基本數據類型有哪些?各占幾個字節?Java中引用數據類型有哪些?基本類型和引用類型的區別是什麽?
Java基本數據類型,變量本身存放數據。
byte(1)取值在-128~127。
Short(2)、
int(4)、
long(8)、
float(4)、
double(8)、
char(2)、
boolean(1)
Java引用類型,變量存放對象的地址:類、數組、接口。
基本類型中存放具體的數據,引用類型存放對象的地址
7、Java中char類型用什麽編碼?
unicode
8、變量三要素是什麽?
變量類型 變量名 變量值
9、Java的註釋有幾種?
//單行註釋
/* */多行註釋
/** */文檔註釋
10、定義常量用什麽關鍵字?
final
11、什麽是對象?什麽是類?對象和類的關系是什麽?
對象是存在的一個實體,具有明確的特征和行為。
類是具有相同特征和行為的一組對象的集合。
類是對象的抽象。對象是類的實例和具體表現。
12、變量按作用域劃分有哪幾種?局部變量使用時需要註意什麽問題?
局部變量、
成員變量(屬性)、
靜態變量(類變量)
局部變量使用前需要註意:
1、變量必須初始化
2、作用域
3、局部變量的修飾符只能是默認,或final
13、靜態變量和成員變量有什麽區別?應該怎麽調用?
成員變量從屬於對象,是對象的一部分,放在堆中。
靜態變量是很多對象共享的,放在數據段中。
成員變量是對象特有的,彼此獨立,一個對象成員變量值的更改,不會影響別的對象。
靜態變量是對象共享的,一個對象更改後,會影響所有的對象。
靜態變量在類加載時產生,加載時機在對象之前;成員變量在對象產生時加載。所以靜態方法不能直接訪問成員方法。
成員變量調用通過 對象名.成員變量
靜態變量調用通過 對象名.靜態變量 類名.靜態變量
14、垃圾回收GC回收什麽樣的對象?
回收沒有被變量指向的對象。
15、什麽是包?包的作用是什麽?如何導入別的包中的類?什麽樣的類不需要導入?
包就是文件夾。通過包可以組織相關的類、可以作到信息隱藏。
import 類的全路徑;(包名+類名)
本包中的類和java.lang.*無需導入可以直接使用。
16、靜態方法能直接調用成員方法或屬性嗎?為什麽?
不行。靜態的東西加載時機在對象之前。
17、當傳遞和返回對象,傳遞和返回的是什麽?
引用。
18、什麽是構造方法?構造方法的作用是什麽?
構造方法的方法名和類名相同,沒有返回類型。
作用:1、為對象分配空間
2、如果該類沒有加載,則加載類。
3、初始化成員變量
4、返回引用。
19、創建對象有幾種方式????????????????????????????
new 類名(); 反射:Class對象.newInstance() 克隆(通過Object中clone())
反序列化(調用ObjectInputStream中readObject())
20、this和super各代表什麽含義?
this表示當前對象。super表示父類對象。//在運行子類時,會優先運行父類構造方法
21、數組如何定義?數組、字符串、集合各自的長度如何獲得?
int[] I = new int[3]; int[] I = {1,2,3};
數組長度:length屬性
字符串長度:length()方法
集合長度:size()方法
22、數組有哪些特點?
1、 數組是一個連續的空間,通過下標訪問元素,下標從0開始,最大下標為《長度-1》;
2、 數組的元素都是變量,變量的類型就是定義數組的類型。
3、 數組的元素在創建時都會做初始化。int----0 double----0.0 引用類型----null
4、 數組的長度不可改變。
23、私有屬性+get/set方法和公有屬性的區別
私有屬性+get/set方法,可以在設置屬性值之前,做出數據合法性驗證,公有屬性無法做到。
私有屬性+get/set方法,可以刪除get或set方法,讓屬性成為只讀或只寫屬性,公有屬性無法做到。
24、繼承用什麽關鍵字?子類繼承父類,構造方法第一句應該如何書寫?
繼承使用extends關鍵字。子類繼承父類,構造方法第一句是super(),產生父類對象,在父類對象基礎上擴展子類的方法和屬性。
25、重寫和重載的區別是什麽?重寫有什麽要求?
重載發生在同一個類中,方法名相同,參數列表不同(參數的類型、參數的個數、參數的順序),和返回類型無關。
重寫發生在父類和子類之間。方法名相同,參數列表相同,返回類型也相同。訪問修飾符子類要大於或等於父類,而拋出的異常,子類要小於或等於父類。子類重寫了父類的方法,在調用時會優先調用子類重寫的方法。
26、Java中一個類能同時繼承多個類嗎?所有類的父類是什麽?
不能,在java中類只能單根繼承,所有類的父類是Object。
27、構造方法能繼承嗎?構造方法能重載嗎?
構造方法不能繼承,但可以被子類所調用。構造方法可以重載。
28、final、finally、finalize的區別是什麽?
final可以修飾類、方法、變量。修飾類,表示該類不能被繼承。修飾方法,表示該方法不能被子類重寫。修飾變量表示該變量是常量,內容不能更改。
finally是異常處理時,無論是否有異常都會執行的代碼塊。一般作資源回收。
finalize是Object中定義的方法。在垃圾回收該對象之前,會執行該方法。
29、訪問修飾符有哪些?各自作用範圍是什麽?
private(私有) 只能在本類中訪問
默認 本包中可以訪問
protected(受保護類) 本包和不同包的子類可以訪問
public (公有) 所有的類都可訪問。
30、什麽是內部類?內部類class文件是怎樣命名的?
內部類就是在一個類中再定義一個類。內部類相當於外部類的屬性,可以有public 、private、protected、static。它的產生必須依賴於外部類的對象。
內部類class文件命名 外部類名$內部類名.class
31、什麽是多態?多態有什麽特點?
多態是指可以用父類變量指向子類對象,可以用接口變量指向實現類對象。
多態的特點:相同的行為不同的表現方式,可以動態綁定子類的行為。
32、面向對象的特征有哪些?
繼承、封裝、多態、抽象
33、什麽是抽象類?什麽是抽象方法?定義抽象類的關鍵字是什麽?
如果一個方法在定義時,只有方法定義,沒有方法實現,這個方法叫做抽象方法,擁有抽象方法的類叫抽象類。抽象類是不能直接實例化的。定義抽象類的關鍵字是abstract
34、接口如何定義?實現接口用什麽關鍵字?一個類實現接口必須做什麽?
接口定義用interface。
實現接口用implements
一個類實現接口,必須實現接口中所有的抽象方法,否則該類只能是抽象類。
35、接口中定義的方法修飾符是什麽?接口中定義的變量修飾符是什麽?
接口中方法修飾符是 public abstract
接口中變量修飾符是 public static final
36、抽象類和接口的區別是什麽?
1、 抽象類可以有方法的定義(抽象方法),也可以有方法的實現(具體方法)。而接口中只能有方法的定義。
2、 抽象類中的變量是屬性,而接口中的變量是public static final
3、 抽象類只能被單根繼承,而接口可以多實現。
37、異常的API結構是怎樣的?Error和Exception有什麽區別?
Throwable父類,下面兩個子類,Error(錯誤,能捕獲,不能處理)和Exception(異常,能捕獲,能處理)
38、異常的執行順序怎樣?如果在try塊中有return,finally會執行嗎?
先執行try塊,順序執行,如果有異常,轉去catch塊執行,同時中止try塊中其他代碼。無論是否有異常,都會執行finally內容。如果在try塊或catch塊有return,finally同樣會執行,在跳出方法前執行。
39、finally是否在任何時候都會執行?
不是,在虛擬機關閉時不會執行。System.exit(0);
40、throw 和throws的區別是什麽?
throw是語句,表示顯示拋出異常對象 throw new Exception();
throws是方法修飾符,表示該方法可能要拋出某種異常,調用該方法時,就需要處理該方法拋出的異常。
41、異常分為幾種?如何區分?
異常分為編譯期異常、運行期異常。編譯期異常,必須要處理,否則編譯無法通過。運行期異常可處理,可不處理,所有的運行期異常都是RuntimeException的子類。
42、如何得到當前工作目錄?
System.getProperty(“user.dir”);
43、String x = "abc" 和 String x = new String("abc")有什麽區別?
String x = “abc”。x指向數據段中的字符串常量。
String x = new String(“abc”); x指向堆中的字符串對象。但該對象必須以對應字符串常量為模版。
44、String和StringBuffer的區別?
String具有長度不可以變的特性,當對字符串作添加、刪除、替換會產生新對象。
而StringBuffer是緩沖區的對象,當對其進行添加、刪除、替換時不會產生新對象。
45、如何將字符串轉化為基本數據類型?
int x = Integer.parseInt(“23”);
double x = Double.parseDouble(“23.3”);
46、如何將日期對象進行"2011-12-10"格式化輸出?如何將"2011-12-10"字符串轉化為日期類型?
SimpleDateFormat s = new SimpleDateFormat(“yyyy-MM-dd”);
String str = s.format(new Date());
Date date = s.parse(“2011-12-10”);
47、javaBean規範有哪些內容?
1、 有公共的無參構造方法。
2、 私有屬性加上get/set方法進行訪問和設置。
3、 對象是可序列化的。(實現序列化接口)
48、什麽是反射?
反射是在編譯時,不清楚應該加載哪個類,類的加載是在運行期進行的。通過反射我可以對類進行加載、探知、自審。
49、如何得到Class對象?如何利用Class對象產生該類的對象?
類名.class 對象名.getClass() Class.forName(“類的全路徑”)
Class對象.newInstance();
50、線程和進程的區別?
進程有自己獨立的內存空間,進程一開啟就會消耗內存。而線程是進程內部的順序控制流。多個線程共享一個進程內存空間。
51、創建線程有幾種方式?如何啟動線程?調用start()和調用run()的區別?
創建線程:1、繼承Thread類,重寫run() 2、實現Runnable接口,實現run()。
啟動線程:start();
啟動線程用start,這時會在主線程之外產生新的線程,多個任務同時執行。而直接調用run(),不會產生新線程。
52、線程有幾種狀態?
新建 就緒 運行 死亡 休眠 等待 掛起 阻塞
53、什麽是線程優先級?分為幾級?
當兩個或兩個以上的線程同時要求啟動時,優先級高的線程優先得到CPU的使用權。優先級分為10級,數字越大,優先級越高。
54、什麽是線程同步?同步會造成什麽結果?
線程同步是指當兩個或兩個以上的線程同時訪問同一個資源,為了保護數據的安全,只允許在同一時間一個線程去訪問。
線程同步會造成1、數據安全 2、效率低下。
55、wait和sleep的區別?**********************************************
1、 sleep在Thread中定義,而wait在Object中定義。
2、 wait只能放在同步方法或同步塊中,而sleep可以放在任何位置。
3、 wait會釋放對象鎖,而sleep不會。
4、 wait需要喚醒線程才會繼續執行,而sleep在休眠結束後,自動恢復運行。
56、集合的作用是什麽?集合框架的API結構是怎樣的?********************
集合的作用是對數據進行存儲、檢索、操作、傳輸。
集合框架分為:接口、實現類、算法。
接口:Collection為父接口,下面兩個子接口:List、Set,另外還有Map接口
57、List、Set、Map集合各自有什麽特點?
List特點:線性,元素可以重復
Set特點:元素不可重復
Map特點:鍵值對,一個元素包含兩個對象。鍵不能重復。
58、集合元素如何添加?如何刪除?如何遍歷?
添加:add() put()
刪除:remove()
遍歷:
1、 for(int i =0;i<list.size();i++){
Object obj = list.get(i);
}
2、 Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
}
3、 for(Object obj : list){
}
59、List接口實現類ArrayList、Vector、LinkedList的區別?HashMap和Hashtable區別?
ArrayList底層由數組實現。是連續的空間,遍歷、尾部追加速度快,中間插入、刪除速度慢。
Vector底層也由數組實現。是線程安全的類。
LinkedList是不連續空間,中間插入、刪除速度快,遍歷速度慢。
HashMap允許空鍵和空值,線程不安全。Hashtable不允許空鍵和空值,線程安全。
60、集合如何進行排序?
Collections.sort(list,Comparator c);
61、awt和swing有什麽區別?
awt是利用操作系統的風格構建組件,跨平臺時顯示風格不一致。
swing是單獨的組件,跨平臺時風格一致。
62、GUI常見布局管理器有哪些?***********************************************
絕對布局,邊框布局,流式布局,網格布局
63、如何進行事件的添加?
確定事件源,確定監聽器(實現監聽接口) 註冊(建立事件源和監聽器的聯系)
64、流按照輸入輸出方向分有幾種?相對於什麽而言?
流按照輸入輸出方向分有兩種,相對於內存而言,當將數據從數據源中讀取到內存時,叫讀取流。當將數據從內存寫入數據源時,叫寫入流。
65、流按照傳輸內容分有幾種?各自的父類是什麽?
流按照傳輸內容有 字節流、字符流、對象流。但其本質都是字節流。字符流和對象流是在字節流基礎上作了一層封裝,以便更好對字符和對象進行操作。
字節流的父類:InputStream和OutputStream
字符流的父類:Reader和Writer
66、操作流時,如果文件不存在會出現什麽情況?如果流不關閉會出現什麽情況?
操作流時,如果文件不存在,對於讀取流而言,會拋出文件未找到異常。對於寫入流而言,會創建新文件。如果流使用完成後不關閉,會浪費內存資源。而且對於寫入流而言,如果流不關閉也不刷新,有可能寫不進數據。
67、如何判斷一個文件是否存在?如何創建一個目錄?如何知道一個目錄中有多少文件?
使用File類中exists()判斷文件是否存在。
創建新目錄:mkdir();
列出目錄中的文件:listFiles();
68、什麽是對象序列化?如何實現對象序列化?
當需要傳輸對象時,由於對象中數據很龐大,所以需要將對象打散成字節序列,以利傳輸。這個過程叫做序列化。到達目的地時,又需要將字節序列還原成對象,叫反序列化。
這時,需要序列化的對象必須實現java.io.Serializable接口
69、TCP/IP協議分為幾層?
TCP/IP分為四層:應用層、傳輸層、網絡層、網絡接口層
70、什麽是端口?常見端口有哪些?
端口是一個應用程序輸入輸出數據的通道。每個應用程序都會有固定的端口。
常見的端口:Telnet協議:23 ftp:21 smtp:25 http:80
71、TCP和UDP的區別是什麽?掌握TCP編程流程。
TCP是比較可靠的傳輸協議,提供三次握手機制,如果信息在傳輸中丟失或耗損,會要求發送方重新發送,保證數據傳輸的完整性。
UDP是比較不可靠的傳輸協議,當信息在傳輸中丟失或耗損,不會要求發送方重新發送。優點是速度快。
72、什麽是XML?XML聲明是怎樣的?XML註釋是怎樣的?
XML叫做可擴展的標識語言,以標記和子標記的方式描述對象。
聲明<?xml version=”1.0” encoding=”utf-8”?>
註釋<!-- - ->
73、一個格式良好的XML有哪些規定?
1、 必須要有聲明
2、 有且只有一個根元素
3、 大小寫區分
4、 屬性必須加引號
5、 標記成對出現
6、 標記要正確嵌套。
7、 空標記要關閉
74、格式良好的XML和有效的XML有什麽區別?
有效的XML除了滿足XML基本規範外,還要滿足DTD和Schema定義的元素規則。有效的XML一定是格式良好的XML,但格式良好的XML不一定有效。
75、DOM和SAX有什麽區別?
DOM是以樹狀方式的一套API,可以讀取可以寫入;可以隨機訪問XML中元素;大型文檔占用內存較多。
SAX是一套基於事件方式的API。占用內存小,只能讀取不能寫入,不能隨機訪問元素,文檔只能遍歷一次。
76、靜態塊和實例化塊分別在什麽時候執行?
靜態塊在類加載時執行,只執行一次。實例化塊在產生對象時執行。每產生一個對象,就執行一次,在super()之後執行。
77、什麽是一對一、一對多、多對多?
一對一指的是一條主表記錄對應一條從表記錄。一對多指的是一條主表記錄對應多條從表記錄。多對多指的是一條主表記錄對應多條從表記錄,同時一條從表記錄也對應多條主表記錄,通過中間表來描述多對多關系。
78、數據庫完整性有哪些?
實體完整性:每條記錄都要有所區別,不能存在一模一樣的記錄。通過主鍵和唯一約束實現
域完整性:保證每一列的值是有效的。通過默認約束、非空約束和檢查約束實現
引用完整性:保證從表的外鍵必須引用主表的主鍵。通過外鍵約束實現
用戶自定義完整性:用戶自定義的規則
79、什麽是主鍵,主鍵有什麽特點?
主鍵是用於標識一個表中兩條記錄不能完全一樣的列,它有兩個特點:非空和值不能重復。
80、什麽是外鍵,它和外鍵約束有什麽區別
外鍵是指從表的某列與主表的某列存在的關聯關系
外鍵約束是指在從表的外鍵列上加上一個約束,強制要求從表的外鍵必須引用主表的主鍵。如果違反該約束,則不允許該條數據的添加修改。
81、增、刪、改、查的基本SQL語句
添加:insert into 表名(字段列表) values(值)
刪除:delete from 表名 where id=1
修改:update 表名 set 字段名=新值 where id=1
查詢:select * from 表名
82、DELETE和TRUNCATE的區別
Delete可以有選擇性的對記錄進行刪除,要寫日誌文件,可以回滾刪除的記錄
Truncate只能清空表中所有記錄,不寫日誌文件,刪除的記錄不能回滾,但執行效率高。
83、排除重復記錄用什麽關鍵字?如何限制查詢數據的返回限定行數?
DISTINCT distinct
Select * from 表名 limit 0,3;
84、如何查詢null值
查詢null值用 is null 或is not null
85、SQL語句的聚合函數有哪些?
Count:統計行數量 Sum:計算單個列的總和
Avg:計算單個列的平均值 Max:計算單個列的最大值
Min:計算單個列的最小值
86、在分組語句中,查詢的列可以有哪些?
只能有分組字段列和聚合函數
87、where和having的區別
Where在分組之前執行,所以不能使用聚合函數。Having在分組之後執行,對分組的結果進行條件過濾,只能用聚合函數。
88、描述SQL查詢語句執行順序
第一步:執行FROM
第二步:WHERE條件過濾
第三步:GROUP BY分組
第四步:執行SELECT投影列
第五步:HAVING條件過濾
第六步:執行ORDER BY 排序
89、內連接和外連接區別
內聯接是指使用比較運算符根據每個表共有的列的值匹配兩個表中的行。
外聯接是指不管有沒有匹配,被定義了外聯接的表數據都要出現在結果中。
內連接:
Select e.*,d.deptName from t_employee e,t_dept d where e.deptId=d.id;
Select e.*,d.deptName from t_employee e join t_dept d on e.deptId=d.id;
外連接:
Select e.*,d.deptName from t_employee e left join t_dept d on e.deptId=d.id;
90、如何刪除主表記錄?
由於有外鍵約束存在,如果主表記錄有從表記錄進行引用,那麽無法刪除主表記錄。
刪除主表記錄有兩種方式:
1、級聯刪除,先刪除主表記錄對應的所有從表記錄,然後再刪除主表記錄。
2、外鍵置空,先將主表記錄對應的所有從表記錄外鍵設置為null,然後再刪除主表記錄。
91、書寫case when語句
CASE WHEN price>=1000 THEN ‘高價商品‘
WHEN price>=100 AND price < 1000 THEN ‘中檔商品‘
ELSE ‘低檔商品‘
END
92、什麽是JDBC
JDBC是JAVA連接數據庫的一套規範。該規範定義了一系列的接口,由數據庫廠商實現,由用戶根據接口調用。用戶根據接口方法就可以屏蔽不同數據庫的差異,無論連接什麽數據庫都是一套API。
93、JDBC開發流程
加載驅動
建立連接
執行SQL語句
關閉連接
94、什麽是SQL註入
SQL註入是指在執行SQL語句時,如果以拼接字符串方式進行值的註入,那麽如果值中有非法字符或數據庫關鍵字時,就會導致執行錯誤或執行結果不正確的情況。
95、Statement和PreparedStatement的區別
Statement是PreparedStatement的父接口,使用拼接字符串的方式填充SQL語句中的值,所以,當值不同的時候,JDBC會重新編譯SQL語句,效率低,而且容易造成SQL註入。
PreparedStatement提供了占位符方式設置SQL語句,JDBC不會重新編譯SQL語句,而且無論是什麽值都當做字符串處理,不會造成SQL註入。
96、什麽是三層架構
三層架構即:表現層、業務層、持久層。每一層完成即定的功能,層與層之間用接口做耦合。每一層的組件可以單獨測試,當其中一個組件更換或修改後,不會影響別的層的組件。
持久層:用於完成數據庫相關的操作。采用DAO模式,創建實體類和數據庫表做映射,也就是哪個類對應哪個表,哪個屬性對應哪個列。而持久層的目的就是完成對象數據和關系數據的轉換。
1、 Java語言的特點是什麽?
簡單 面向對象 跨平臺 多線程 健壯性安全性 垃圾回收機制
2、如何編譯和執行java文件?產生幫助文檔用什麽命令?
編譯: javac 文件名
執行: java 類名
產生幫助文檔 javadoc 文件名
3、虛擬機的工作流程是什麽?
編寫源文件(*.java)------編譯成*.class字節碼文件------類加載--------字節碼校驗----解釋器----操作系統。
4、main方法怎麽書寫?
Public static void main(String[] aaa){}
Static public void main(String sss[]){}
5、什麽是標識符?標識符有幾種?標識符的命名規則是什麽?
凡是可以命名的地方叫標識符。我們可以使用標識符命名類、方法、變量。
標識符分兩種:系統標識符(關鍵字)和用戶標識符。
標識符命名規則:以字母、數字、下劃線、$組成。不能以數字開始。
6、Java中基本數據類型有哪些?各占幾個字節?Java中引用數據類型有哪些?基本類型和引用類型的區別是什麽?
Java基本數據類型,變量本身存放數據。
byte(1)取值在-128~127。
Short(2)、
int(4)、
long(8)、
float(4)、
double(8)、
char(2)、
boolean(1)
Java引用類型,變量存放對象的地址:類、數組、接口。
基本類型中存放具體的數據,引用類型存放對象的地址
7、Java中char類型用什麽編碼?
unicode
8、變量三要素是什麽?
變量類型 變量名 變量值
9、Java的註釋有幾種?
//單行註釋
/* */多行註釋
/** */文檔註釋
10、定義常量用什麽關鍵字?
final
11、什麽是對象?什麽是類?對象和類的關系是什麽?
對象是存在的一個實體,具有明確的特征和行為。
類是具有相同特征和行為的一組對象的集合。
類是對象的抽象。對象是類的實例和具體表現。
12、變量按作用域劃分有哪幾種?局部變量使用時需要註意什麽問題?
局部變量、
成員變量(屬性)、
靜態變量(類變量)
局部變量使用前需要註意:
1、變量必須初始化
2、作用域
3、局部變量的修飾符只能是默認,或final
13、靜態變量和成員變量有什麽區別?應該怎麽調用?
成員變量從屬於對象,是對象的一部分,放在堆中。
靜態變量是很多對象共享的,放在數據段中。
成員變量是對象特有的,彼此獨立,一個對象成員變量值的更改,不會影響別的對象。
靜態變量是對象共享的,一個對象更改後,會影響所有的對象。
靜態變量在類加載時產生,加載時機在對象之前;成員變量在對象產生時加載。所以靜態方法不能直接訪問成員方法。
成員變量調用通過 對象名.成員變量
靜態變量調用通過 對象名.靜態變量 類名.靜態變量
14、垃圾回收GC回收什麽樣的對象?
回收沒有被變量指向的對象。
15、什麽是包?包的作用是什麽?如何導入別的包中的類?什麽樣的類不需要導入?
包就是文件夾。通過包可以組織相關的類、可以作到信息隱藏。
import 類的全路徑;(包名+類名)
本包中的類和java.lang.*無需導入可以直接使用。
16、靜態方法能直接調用成員方法或屬性嗎?為什麽?
不行。靜態的東西加載時機在對象之前。
17、當傳遞和返回對象,傳遞和返回的是什麽?
引用。
18、什麽是構造方法?構造方法的作用是什麽?
構造方法的方法名和類名相同,沒有返回類型。
作用:1、為對象分配空間
2、如果該類沒有加載,則加載類。
3、初始化成員變量
4、返回引用。
19、創建對象有幾種方式????????????????????????????
new 類名(); 反射:Class對象.newInstance() 克隆(通過Object中clone())
反序列化(調用ObjectInputStream中readObject())
20、this和super各代表什麽含義?
this表示當前對象。super表示父類對象。//在運行子類時,會優先運行父類構造方法
21、數組如何定義?數組、字符串、集合各自的長度如何獲得?
int[] I = new int[3]; int[] I = {1,2,3};
數組長度:length屬性
字符串長度:length()方法
集合長度:size()方法
22、數組有哪些特點?
1、 數組是一個連續的空間,通過下標訪問元素,下標從0開始,最大下標為《長度-1》;
2、 數組的元素都是變量,變量的類型就是定義數組的類型。
3、 數組的元素在創建時都會做初始化。int----0 double----0.0 引用類型----null
4、 數組的長度不可改變。
23、私有屬性+get/set方法和公有屬性的區別
私有屬性+get/set方法,可以在設置屬性值之前,做出數據合法性驗證,公有屬性無法做到。
私有屬性+get/set方法,可以刪除get或set方法,讓屬性成為只讀或只寫屬性,公有屬性無法做到。
24、繼承用什麽關鍵字?子類繼承父類,構造方法第一句應該如何書寫?
繼承使用extends關鍵字。子類繼承父類,構造方法第一句是super(),產生父類對象,在父類對象基礎上擴展子類的方法和屬性。
25、重寫和重載的區別是什麽?重寫有什麽要求?
重載發生在同一個類中,方法名相同,參數列表不同(參數的類型、參數的個數、參數的順序),和返回類型無關。
重寫發生在父類和子類之間。方法名相同,參數列表相同,返回類型也相同。訪問修飾符子類要大於或等於父類,而拋出的異常,子類要小於或等於父類。子類重寫了父類的方法,在調用時會優先調用子類重寫的方法。
26、Java中一個類能同時繼承多個類嗎?所有類的父類是什麽?
不能,在java中類只能單根繼承,所有類的父類是Object。
27、構造方法能繼承嗎?構造方法能重載嗎?
構造方法不能繼承,但可以被子類所調用。構造方法可以重載。
28、final、finally、finalize的區別是什麽?
final可以修飾類、方法、變量。修飾類,表示該類不能被繼承。修飾方法,表示該方法不能被子類重寫。修飾變量表示該變量是常量,內容不能更改。
finally是異常處理時,無論是否有異常都會執行的代碼塊。一般作資源回收。
finalize是Object中定義的方法。在垃圾回收該對象之前,會執行該方法。
29、訪問修飾符有哪些?各自作用範圍是什麽?
private(私有) 只能在本類中訪問
默認 本包中可以訪問
protected(受保護類) 本包和不同包的子類可以訪問
public (公有) 所有的類都可訪問。
30、什麽是內部類?內部類class文件是怎樣命名的?
內部類就是在一個類中再定義一個類。內部類相當於外部類的屬性,可以有public 、private、protected、static。它的產生必須依賴於外部類的對象。
內部類class文件命名 外部類名$內部類名.class
31、什麽是多態?多態有什麽特點?
多態是指可以用父類變量指向子類對象,可以用接口變量指向實現類對象。
多態的特點:相同的行為不同的表現方式,可以動態綁定子類的行為。
32、面向對象的特征有哪些?
繼承、封裝、多態、抽象
33、什麽是抽象類?什麽是抽象方法?定義抽象類的關鍵字是什麽?
如果一個方法在定義時,只有方法定義,沒有方法實現,這個方法叫做抽象方法,擁有抽象方法的類叫抽象類。抽象類是不能直接實例化的。定義抽象類的關鍵字是abstract
34、接口如何定義?實現接口用什麽關鍵字?一個類實現接口必須做什麽?
接口定義用interface。
實現接口用implements
一個類實現接口,必須實現接口中所有的抽象方法,否則該類只能是抽象類。
35、接口中定義的方法修飾符是什麽?接口中定義的變量修飾符是什麽?
接口中方法修飾符是 public abstract
接口中變量修飾符是 public static final
36、抽象類和接口的區別是什麽?
1、 抽象類可以有方法的定義(抽象方法),也可以有方法的實現(具體方法)。而接口中只能有方法的定義。
2、 抽象類中的變量是屬性,而接口中的變量是public static final
3、 抽象類只能被單根繼承,而接口可以多實現。
37、異常的API結構是怎樣的?Error和Exception有什麽區別?
Throwable父類,下面兩個子類,Error(錯誤,能捕獲,不能處理)和Exception(異常,能捕獲,能處理)
38、異常的執行順序怎樣?如果在try塊中有return,finally會執行嗎?
先執行try塊,順序執行,如果有異常,轉去catch塊執行,同時中止try塊中其他代碼。無論是否有異常,都會執行finally內容。如果在try塊或catch塊有return,finally同樣會執行,在跳出方法前執行。
39、finally是否在任何時候都會執行?
不是,在虛擬機關閉時不會執行。System.exit(0);
40、throw 和throws的區別是什麽?
throw是語句,表示顯示拋出異常對象 throw new Exception();
throws是方法修飾符,表示該方法可能要拋出某種異常,調用該方法時,就需要處理該方法拋出的異常。
41、異常分為幾種?如何區分?
異常分為編譯期異常、運行期異常。編譯期異常,必須要處理,否則編譯無法通過。運行期異常可處理,可不處理,所有的運行期異常都是RuntimeException的子類。
42、如何得到當前工作目錄?
System.getProperty(“user.dir”);
43、String x = "abc" 和 String x = new String("abc")有什麽區別?
String x = “abc”。x指向數據段中的字符串常量。
String x = new String(“abc”); x指向堆中的字符串對象。但該對象必須以對應字符串常量為模版。
44、String和StringBuffer的區別?
String具有長度不可以變的特性,當對字符串作添加、刪除、替換會產生新對象。
而StringBuffer是緩沖區的對象,當對其進行添加、刪除、替換時不會產生新對象。
45、如何將字符串轉化為基本數據類型?
int x = Integer.parseInt(“23”);
double x = Double.parseDouble(“23.3”);
46、如何將日期對象進行"2011-12-10"格式化輸出?如何將"2011-12-10"字符串轉化為日期類型?
SimpleDateFormat s = new SimpleDateFormat(“yyyy-MM-dd”);
String str = s.format(new Date());
Date date = s.parse(“2011-12-10”);
47、javaBean規範有哪些內容?
1、 有公共的無參構造方法。
2、 私有屬性加上get/set方法進行訪問和設置。
3、 對象是可序列化的。(實現序列化接口)
48、什麽是反射?
反射是在編譯時,不清楚應該加載哪個類,類的加載是在運行期進行的。通過反射我可以對類進行加載、探知、自審。
49、如何得到Class對象?如何利用Class對象產生該類的對象?
類名.class 對象名.getClass() Class.forName(“類的全路徑”)
Class對象.newInstance();
50、線程和進程的區別?
進程有自己獨立的內存空間,進程一開啟就會消耗內存。而線程是進程內部的順序控制流。多個線程共享一個進程內存空間。
51、創建線程有幾種方式?如何啟動線程?調用start()和調用run()的區別?
創建線程:1、繼承Thread類,重寫run() 2、實現Runnable接口,實現run()。
啟動線程:start();
啟動線程用start,這時會在主線程之外產生新的線程,多個任務同時執行。而直接調用run(),不會產生新線程。
52、線程有幾種狀態?
新建 就緒 運行 死亡 休眠 等待 掛起 阻塞
53、什麽是線程優先級?分為幾級?
當兩個或兩個以上的線程同時要求啟動時,優先級高的線程優先得到CPU的使用權。優先級分為10級,數字越大,優先級越高。
54、什麽是線程同步?同步會造成什麽結果?
線程同步是指當兩個或兩個以上的線程同時訪問同一個資源,為了保護數據的安全,只允許在同一時間一個線程去訪問。
線程同步會造成1、數據安全 2、效率低下。
55、wait和sleep的區別?**********************************************
1、 sleep在Thread中定義,而wait在Object中定義。
2、 wait只能放在同步方法或同步塊中,而sleep可以放在任何位置。
3、 wait會釋放對象鎖,而sleep不會。
4、 wait需要喚醒線程才會繼續執行,而sleep在休眠結束後,自動恢復運行。
56、集合的作用是什麽?集合框架的API結構是怎樣的?********************
集合的作用是對數據進行存儲、檢索、操作、傳輸。
集合框架分為:接口、實現類、算法。
接口:Collection為父接口,下面兩個子接口:List、Set,另外還有Map接口
57、List、Set、Map集合各自有什麽特點?
List特點:線性,元素可以重復
Set特點:元素不可重復
Map特點:鍵值對,一個元素包含兩個對象。鍵不能重復。
58、集合元素如何添加?如何刪除?如何遍歷?
添加:add() put()
刪除:remove()
遍歷:
1、 for(int i =0;i<list.size();i++){
Object obj = list.get(i);
}
2、 Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
}
3、 for(Object obj : list){
}
59、List接口實現類ArrayList、Vector、LinkedList的區別?HashMap和Hashtable區別?
ArrayList底層由數組實現。是連續的空間,遍歷、尾部追加速度快,中間插入、刪除速度慢。
Vector底層也由數組實現。是線程安全的類。
LinkedList是不連續空間,中間插入、刪除速度快,遍歷速度慢。
HashMap允許空鍵和空值,線程不安全。Hashtable不允許空鍵和空值,線程安全。
60、集合如何進行排序?
Collections.sort(list,Comparator c);
61、awt和swing有什麽區別?
awt是利用操作系統的風格構建組件,跨平臺時顯示風格不一致。
swing是單獨的組件,跨平臺時風格一致。
62、GUI常見布局管理器有哪些?***********************************************
絕對布局,邊框布局,流式布局,網格布局
63、如何進行事件的添加?
確定事件源,確定監聽器(實現監聽接口) 註冊(建立事件源和監聽器的聯系)
64、流按照輸入輸出方向分有幾種?相對於什麽而言?
流按照輸入輸出方向分有兩種,相對於內存而言,當將數據從數據源中讀取到內存時,叫讀取流。當將數據從內存寫入數據源時,叫寫入流。
65、流按照傳輸內容分有幾種?各自的父類是什麽?
流按照傳輸內容有 字節流、字符流、對象流。但其本質都是字節流。字符流和對象流是在字節流基礎上作了一層封裝,以便更好對字符和對象進行操作。
字節流的父類:InputStream和OutputStream
字符流的父類:Reader和Writer
66、操作流時,如果文件不存在會出現什麽情況?如果流不關閉會出現什麽情況?
操作流時,如果文件不存在,對於讀取流而言,會拋出文件未找到異常。對於寫入流而言,會創建新文件。如果流使用完成後不關閉,會浪費內存資源。而且對於寫入流而言,如果流不關閉也不刷新,有可能寫不進數據。
67、如何判斷一個文件是否存在?如何創建一個目錄?如何知道一個目錄中有多少文件?
使用File類中exists()判斷文件是否存在。
創建新目錄:mkdir();
列出目錄中的文件:listFiles();
68、什麽是對象序列化?如何實現對象序列化?
當需要傳輸對象時,由於對象中數據很龐大,所以需要將對象打散成字節序列,以利傳輸。這個過程叫做序列化。到達目的地時,又需要將字節序列還原成對象,叫反序列化。
這時,需要序列化的對象必須實現java.io.Serializable接口
69、TCP/IP協議分為幾層?
TCP/IP分為四層:應用層、傳輸層、網絡層、網絡接口層
70、什麽是端口?常見端口有哪些?
端口是一個應用程序輸入輸出數據的通道。每個應用程序都會有固定的端口。
常見的端口:Telnet協議:23 ftp:21 smtp:25 http:80
71、TCP和UDP的區別是什麽?掌握TCP編程流程。
TCP是比較可靠的傳輸協議,提供三次握手機制,如果信息在傳輸中丟失或耗損,會要求發送方重新發送,保證數據傳輸的完整性。
UDP是比較不可靠的傳輸協議,當信息在傳輸中丟失或耗損,不會要求發送方重新發送。優點是速度快。
72、什麽是XML?XML聲明是怎樣的?XML註釋是怎樣的?
XML叫做可擴展的標識語言,以標記和子標記的方式描述對象。
聲明<?xml version=”1.0” encoding=”utf-8”?>
註釋<!-- - ->
73、一個格式良好的XML有哪些規定?
1、 必須要有聲明
2、 有且只有一個根元素
3、 大小寫區分
4、 屬性必須加引號
5、 標記成對出現
6、 標記要正確嵌套。
7、 空標記要關閉
74、格式良好的XML和有效的XML有什麽區別?
有效的XML除了滿足XML基本規範外,還要滿足DTD和Schema定義的元素規則。有效的XML一定是格式良好的XML,但格式良好的XML不一定有效。
75、DOM和SAX有什麽區別?
DOM是以樹狀方式的一套API,可以讀取可以寫入;可以隨機訪問XML中元素;大型文檔占用內存較多。
SAX是一套基於事件方式的API。占用內存小,只能讀取不能寫入,不能隨機訪問元素,文檔只能遍歷一次。
76、靜態塊和實例化塊分別在什麽時候執行?
靜態塊在類加載時執行,只執行一次。實例化塊在產生對象時執行。每產生一個對象,就執行一次,在super()之後執行。
77、什麽是一對一、一對多、多對多?
一對一指的是一條主表記錄對應一條從表記錄。一對多指的是一條主表記錄對應多條從表記錄。多對多指的是一條主表記錄對應多條從表記錄,同時一條從表記錄也對應多條主表記錄,通過中間表來描述多對多關系。
78、數據庫完整性有哪些?
實體完整性:每條記錄都要有所區別,不能存在一模一樣的記錄。通過主鍵和唯一約束實現
域完整性:保證每一列的值是有效的。通過默認約束、非空約束和檢查約束實現
引用完整性:保證從表的外鍵必須引用主表的主鍵。通過外鍵約束實現
用戶自定義完整性:用戶自定義的規則
79、什麽是主鍵,主鍵有什麽特點?
主鍵是用於標識一個表中兩條記錄不能完全一樣的列,它有兩個特點:非空和值不能重復。
80、什麽是外鍵,它和外鍵約束有什麽區別
外鍵是指從表的某列與主表的某列存在的關聯關系
外鍵約束是指在從表的外鍵列上加上一個約束,強制要求從表的外鍵必須引用主表的主鍵。如果違反該約束,則不允許該條數據的添加修改。
81、增、刪、改、查的基本SQL語句
添加:insert into 表名(字段列表) values(值)
刪除:delete from 表名 where id=1
修改:update 表名 set 字段名=新值 where id=1
查詢:select * from 表名
82、DELETE和TRUNCATE的區別
Delete可以有選擇性的對記錄進行刪除,要寫日誌文件,可以回滾刪除的記錄
Truncate只能清空表中所有記錄,不寫日誌文件,刪除的記錄不能回滾,但執行效率高。
83、排除重復記錄用什麽關鍵字?如何限制查詢數據的返回限定行數?
DISTINCT distinct
Select * from 表名 limit 0,3;
84、如何查詢null值
查詢null值用 is null 或is not null
85、SQL語句的聚合函數有哪些?
Count:統計行數量 Sum:計算單個列的總和
Avg:計算單個列的平均值 Max:計算單個列的最大值
Min:計算單個列的最小值
86、在分組語句中,查詢的列可以有哪些?
只能有分組字段列和聚合函數
87、where和having的區別
Where在分組之前執行,所以不能使用聚合函數。Having在分組之後執行,對分組的結果進行條件過濾,只能用聚合函數。
88、描述SQL查詢語句執行順序
第一步:執行FROM
第二步:WHERE條件過濾
第三步:GROUP BY分組
第四步:執行SELECT投影列
第五步:HAVING條件過濾
第六步:執行ORDER BY 排序
89、內連接和外連接區別
內聯接是指使用比較運算符根據每個表共有的列的值匹配兩個表中的行。
外聯接是指不管有沒有匹配,被定義了外聯接的表數據都要出現在結果中。
內連接:
Select e.*,d.deptName from t_employee e,t_dept d where e.deptId=d.id;
Select e.*,d.deptName from t_employee e join t_dept d on e.deptId=d.id;
外連接:
Select e.*,d.deptName from t_employee e left join t_dept d on e.deptId=d.id;
90、如何刪除主表記錄?
由於有外鍵約束存在,如果主表記錄有從表記錄進行引用,那麽無法刪除主表記錄。
刪除主表記錄有兩種方式:
1、級聯刪除,先刪除主表記錄對應的所有從表記錄,然後再刪除主表記錄。
2、外鍵置空,先將主表記錄對應的所有從表記錄外鍵設置為null,然後再刪除主表記錄。
91、書寫case when語句
CASE WHEN price>=1000 THEN ‘高價商品‘
WHEN price>=100 AND price < 1000 THEN ‘中檔商品‘
ELSE ‘低檔商品‘
END
92、什麽是JDBC
JDBC是JAVA連接數據庫的一套規範。該規範定義了一系列的接口,由數據庫廠商實現,由用戶根據接口調用。用戶根據接口方法就可以屏蔽不同數據庫的差異,無論連接什麽數據庫都是一套API。
93、JDBC開發流程
加載驅動
建立連接
執行SQL語句
關閉連接
94、什麽是SQL註入
SQL註入是指在執行SQL語句時,如果以拼接字符串方式進行值的註入,那麽如果值中有非法字符或數據庫關鍵字時,就會導致執行錯誤或執行結果不正確的情況。
95、Statement和PreparedStatement的區別
Statement是PreparedStatement的父接口,使用拼接字符串的方式填充SQL語句中的值,所以,當值不同的時候,JDBC會重新編譯SQL語句,效率低,而且容易造成SQL註入。
PreparedStatement提供了占位符方式設置SQL語句,JDBC不會重新編譯SQL語句,而且無論是什麽值都當做字符串處理,不會造成SQL註入。
96、什麽是三層架構
三層架構即:表現層、業務層、持久層。每一層完成即定的功能,層與層之間用接口做耦合。每一層的組件可以單獨測試,當其中一個組件更換或修改後,不會影響別的層的組件。
持久層:用於完成數據庫相關的操作。采用DAO模式,創建實體類和數據庫表做映射,也就是哪個類對應哪個表,哪個屬性對應哪個列。而持久層的目的就是完成對象數據和關系數據的轉換。
業務層:用於業務處理。采用事務腳本模式。將一次請求中所有的業務封裝成一個方法,保證方法中所有的數據庫更新操作同時成功,同時失敗。不允許部分成功,部分失敗,這樣引起數據混亂的情況發生。
表現層:采用MVC模式。M表示模型,就是實體類,用於數據的封裝和數據的傳輸。V表示視圖,用於展示數據和接收數據。C表示控制,用於調用業務組件,完成業務流程的控制。
97、書寫單例模式
public class Man {
private static Man m = new Man();
private Man(){}
public static Man getMan(){
return m;
}
}
業務層:用於業務處理。采用事務腳本模式。將一次請求中所有的業務封裝成一個方法,保證方法中所有的數據庫更新操作同時成功,同時失敗。不允許部分成功,部分失敗,這樣引起數據混亂的情況發生。
表現層:采用MVC模式。M表示模型,就是實體類,用於數據的封裝和數據的傳輸。V表示視圖,用於展示數據和接收數據。C表示控制,用於調用業務組件,完成業務流程的控制。
97、書寫單例模式
public class Man {
private static Man m = new Man();
private Man(){}
public static Man getMan(){
return m;
}
}
Java oo 概念總結