第一篇:JAVA第一階段:基礎設計結構---總結精髓
《JAVA語言 基礎設計結構-----總結》
一. Java入門認識。
Java是一門面向對象編程語言,而C,C++面向過程,吸收了C,C++各種優(yōu)點,摒棄之前難以理解的多繼承、指針等概念而衍生出來的語言。
Java具有簡單性、面向對象、分布式、健壯式、安全性、平臺獨立與可移植性、多線程、動態(tài)性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序的等。
Java分為:
Java ME,平臺微型版,應用于移動、無線及有限資源環(huán)境。如手機APP開發(fā) Java SE,平臺標準版,應用于桌面環(huán)境。如桌面軟件開發(fā)
Java EE,平臺企業(yè)版,應用于基于java的應用服務器。如WEB開發(fā)
計算機基礎常識:
1.軟件開發(fā),分為系統軟件與應用軟件,開發(fā)就是制作意思。
2.人機交互方式,分為圖形化界面(GUI)交互方式與命令行(CLI)交互方式。如:win下的DOS命令行。
Java 跨平臺 特性:
一種與相關平臺系統不一致的語言是不能夠直接識別,通常都是通過搭建跨平臺環(huán)境進行。
二. Java程序設計環(huán)境。
1.基本的開發(fā)工具包(JDK)
下載JDK ? 安裝JDK ? 設置JDK路徑 ? 安裝完成 ? 環(huán)境變量配置 ?
使用文本編寫、使用命令行窗口執(zhí)行
具體操作可觀看視頻教學
2.使用集成開發(fā)環(huán)境工具包(Eclipse,NetBeans 等)
下載 ? 安裝 ? 使用
具體使用可觀看視頻教學
三. Java基本程序設計結構。
關鍵字,標識符(自定義名稱),注釋,常量與變量(數據類型),運算符,字符串,語句,函數,數組
1.關鍵字
關鍵字定義:被JAVA語言賦予特殊含義的單詞。特點:關鍵字所有單詞字母都是小寫。
如上圖所示,/*….*/這符號內容是注釋,藍色部分是關鍵字,綠色部分是java創(chuàng)建好的類,而Demo是自定義class類的名稱。自定義class類 名稱為Demo {}里面的內容就是主函數。主函數 {} 里面就是執(zhí)行輸出語句,這就構成小程序的基本結構。2.標識符
標識符定義:
在程序中自定義的一些名稱。由26個字母大小寫、數字0到
9、符號_和$組成。(如Demo1、Demo_01、Demo02$等)
定義標識符規(guī)則:數字不可以開頭,不可以使用關鍵字。
規(guī)范:定義時,要有代表性意義,提高閱讀性。定義類名稱時,第一個字母要大寫,如多單詞組成,每個單詞字母需大寫。(如類名FirstSample就遵守了規(guī)則同時也遵守了規(guī)范)
FirstSample.java這個文件叫源代碼(java編程源代碼,可編譯)。
FirstSample.class這個文件叫字節(jié)碼(java虛擬機可識別字節(jié)碼文件,可運行)。注意:字節(jié)碼文件名稱與源代碼里面定義的類名稱是一致的。也就是說正常源代碼編譯通過 后,自動生成的字節(jié)碼文件名稱就是源代碼里面定義的類名稱。
3.注釋
注釋有三種方式:
第一種,行注釋,每行前面標記 //。(格式如://注釋內容)第二種,長篇注釋,使用/*和*/將一段比較長的注釋括起來。(格式如:/*注釋內容*/)第三種,自動生成文檔注釋,這種注釋以/**開始,以*/結束。(格式如:/**注釋內容*/)
4.常量與變量(數據類型)
① 常量(表示不能改變的數值)
整數常量; 小數常量;
boolean型常量(只有true與false兩個數值);
字符常量(將一個數字、字母或者符號用單引號(’ ’)標識); 字符串常量(將一個或者多個字符用雙引號(” ”)標識); null 常量(只有一個數值null,表示什么都沒有為空的數值)
對于整數常量表現形式常用有四種: 二進制(0,1滿二進一)
八進制(0~7 滿八進一,開頭用0表示)十進制(0~9 滿十進一)
十六進制(0~9,A~F 滿十六進一,開頭用0x表示)8個bit位為一個字節(jié)。
進制間的相互轉化 十進制?二進制;(除以2取余)二進制?十進制;(乘以2取冪。)二進制?八進制;(3個二進制位 轉化成 1個八進制位)二進制?十六進制;(4個二進制位 轉化成 1個十六進制位)對于負數常量表現形式:
對應的正數二進制取反加1。
0000-0110
整數6
取反11111-1001
+ 0000-0001
整數1
---
1111-1010
負數-6 的表現形式
② 變量
變量概念(內存中的一個存儲區(qū)域,該區(qū)域有自己的變量名稱與數據類型,該區(qū)域數據可以在同類型中不斷變化)
使用變量注意:變量的作用范圍(一對{}內有效);初始值。定義變量格式:
數據類型 變量名稱=初始值;(例如: int x=1;)數據類型:
字符串數據類型:String
例如Sting s=”星期”;
注意:整數類型long 的值有一個后綴L或者l(如:long x=40000L或者x=40000l)。
float 類型 的數值有個后綴F或者f(如:float y=3.14F或者是y=3.14f)。沒有后綴的浮點值默認為double類型。當然也可以在double類型的浮點值后面添加D或者d。
數據類型轉換:
自動類型轉換(也叫隱式類型轉換)例如:int x=3;
byte y=4;
x=x+y;強制類型轉換(也叫顯式類型轉換)例如:byte x=3;
x=x+4;//這樣的賦值運算不行的,如果非得強制性賦值運算這一步寫成x=(byte)(x+4),雖然編譯通過,但是運算記過數據會丟失一部分。類型的轉換原理
表達式的數據類型自動提升
所有的byte類型,short類型,char類型的值將被自動提升為int 類型。如果操作數類型long,計算結果為long類型。如果操作數類型float,計算結果為float類型。如果操作數類型double,計算結果為double類型。
5.運算符
算術運算符(+,-,*,/,%(整數求余,稱為取模))
注意:1.任何數 模以 2不是0就是1,可運用于開關運算
2.“+”與字符串相連,是連接符,不是運算符。(如:3+”2”,其結果是3和2,不是等于5;”5+5=”+5+5,其結果是5+5=55)
賦值運算符(++(自增),--(自減),+=,-=,*=,/=,%=)
注意:1.運算中,a=3時b=a++與b=++a的區(qū)別,b=a++其結果是b=3,a=4;b=++a其結果是b=4,a=4。如果獨立運算,結果是一樣的,參與其他運算時需要注意運算優(yōu)先級。
2.(+=,-=,*=,/=,%=)賦值運算,其實就是左右兩邊的運算結果賦給左邊。如:int a=4;
a+=2;//其實就是a=a+2 其他運算符以此類推。
比較運算符(>,<,>=,<=,==,!=,instanceof)
比較運算符的運算結果不是true就是false;instanceof檢查是否是類的對象。
邏輯運算符(&,|,^,!,&&,||)
(與,或,異或,非,短路與,短路或)
用于連接boolean類型表達式。
&(與):規(guī)律,&運算兩邊有一邊為false,其結果為false;兩邊都為true,其結果為true。|(或):規(guī)律,| 運算兩邊有一邊為true,其結果為true;兩邊都為false,其結果為false。
^(異或):規(guī)律,^運算兩邊真假相同,其結果為false;兩邊真假不同,其結果為true。
&&(短路與):規(guī)律,和&運算結果一樣,區(qū)別在于運算過程,&運算無論左邊運算結果是什么,右邊都參與運算,&&只要左邊運算結果為false,右邊不參與運算,直接得出結果false。
||(短路或):規(guī)律,和|運算結果一樣,區(qū)別在于運算過程,|運算無論左邊運算結果是什么,右邊都參與運算,||只要左邊運算結果為true,右邊不參與運算,直接得出結果true。
!(非):規(guī)律,真假取反。!false=true;!true=false;!true=true;!false=true。
位
運算符(<<,>>,>>>,&,|,^,~)
(左移,右移,無符號右移,或運算移位,與運算移位,異或移位,反碼)
直接對二進制位移位運算。
<<(左移):3<<2,3的二進制位數左移2位,其結果等于12。3*2*2=12 >>(右移):3>>1,3的二進制位數右移1位,其結果等于1。3/2=1 >>>(無符號右移):3>>>1,3的二進制位數無符號右移1位。
注意:>>(右移)和>>>(無符號右移)的區(qū)別在于,>>(右移)原來二進制位數高位是什么就補位什么(是0就補0,是1就補1),>>>(無符號右移)原來的二進制數高位是什么都用0補位。
&(與運算移位):6&3=2,6的二進制位數和3的二進制位數相與得出數據結果。|(或運算移位):6|3=7,6的二進制位數和3的二進制位數相或得出的數據結果。
^(異或運算移位):6^3=5,6的二進制位數和3的二進制位數相異或得出的數據結果。
注意:異或運算移位特性,一個數異或同一個數兩次,其結果還是原來的那個數。其特性可應用于加密。如:6^3^3=6;10^3^3=10。
~(反碼):~6=-7,6的二進制位數取反得出的數據結果。
三元運算符(條件表達式?表達式1:表達式2;)格式:
條件表達式 ? 表達式1 : 表達式2; 若條件為true,運算后結果為表達式1; 若條件為false,運算后結果為表達式2。
例子:取兩個數中的大數。
int a=8,b=15,x;
x=(a>b)?a:b;
6.語句(程序流程控制)
判斷結構(if語句)
注意:三元運算符就是if語句格式二的簡寫格式。但是三元運算符簡化if語句格式二,在實際應用中是有局限性的,而if格式則是通用性質。
何時if語句格式二可以簡化為三元運算符寫法,就是當運算后有具體的結果時,才可以簡化成三元運算符的寫法。運算后不確定有沒結果時,就通用if寫法。
局部代碼塊作用,可以定義局部變量的生命周期(換句話就是騰出內存空間)。
選擇結構(switch語句)格式:
switch(表達式)
{ case 取值1:
執(zhí)行語句;bareak;case 取值2:
執(zhí)行語句;bareak;…… default:
執(zhí)行語句;bareak;}
注意:if和switch的應用
if:
1.對具體值進行判斷。
2.對區(qū)間判斷。
3.對運算結果boolean類型的表達式判斷。
switch:
1.對具體值進行判斷。(對具體值判斷,建議使用switch語句,因為switch語句效率高)。
2.值的個數通常是固定的。if和switch相對而言,switch有應用的局限性,在特定的條件下才能體現出高效的應用。
循環(huán)結構(while;do while; for)
注意:循環(huán)結構的使用場景
1.無限循環(huán)最簡單形式,while(true){},for(;;){}。
2.何時使用循環(huán)結構,當對某些代碼執(zhí)行很多次時可以使用循環(huán)結構。當對一個條件進行一次判斷時,可以使用if語句;當對一個條件進行多次判斷時,可以使用while或者for循環(huán)語句。
語句相互間的嵌套應用 大圈套小圈思想 練習提升
其他流程控制語句
break;//(跳出)
continue;//(繼續(xù))break應用選擇結構和循環(huán)結構;continue應用于循環(huán)結構。
7.函數
函數就是定義類中具有特定功能的獨立小程序,也稱類的方法。格式:
修飾符
返回值類型
函數名(參數類型 參數1,參數類型 參數2,……)
{
執(zhí)行語句;
return 返回值;//返回值 } 例如:1.public static void main(String[] args){ System.out.println(“Hello World!”)}
2.public static int add(int a, int b){
return a+b;} 注意:如果函數中沒有具體值返回,那么格式中的return后直接加分號結束,關鍵字返回值類型為void。
函數應用(實現特定功能)需求(實現那些功能);思路(如何實現功能);實現步驟。
8.數組
數組就是同一種數據類型的集合,也稱為數據的容器。
用處:數組可以給集合里面的元素進行編號,方便操作這些元素。
格式:
1.元素類型 [] 數組名=new 元素類型[元素個數或數組長度];
示例:int [] arr =new int [5];
2.元素類型 [] 數組名=new 元素類型[] {元素1,元素2,…….};
示例:int [] arr=new int[]{3,5,1,7};
int [] arr={3,5,1,7};二維數組 格式:
1.int[][] add=new int[3][2];//二維數組中有3個一維數組,每個一維數組有2個元素。2.int[][] add=new int[3][];//二維數組中有3個一維數組,每個一維數組初始值為null。
3.int[][] add={{},{},{}};//建立已知數組元素,已有3個一維數組,每個一維數組初始
值為null。
數組的棧內存與堆內存原理 數組的應用
排序法(選擇排序、冒泡排序)查找法,二分查找、查表法、進制轉換、二維數組以及多維數組
第二篇:JAVA基礎總結
JAVA基礎總結
轉眼間,已經來到這里學習半年了,而現在我們對于JAVA學習才算是真正的開始。一開始接觸的時候我發(fā)現這個和C語言的基本語法幾乎一模一樣的,老師說:JAVA語言本來就是C++語言發(fā)展過來的,而C++是從C語言發(fā)展來的,C C++ 還有JAVA雖然是不同的三種語言,但是其實他們的基本語法是一樣的,但是它們卻有巨大的區(qū)別,這個區(qū)別主要是體現在思想上。
都說C語言是面向過程的語言,C++ C#和JAVA是面向對象的編程,其實就是思維方式稍微改了一下子,面向過程的語言主要是著重于算法,面向對象著重于邏輯而已。
這個教我們的老師是張成峰老師,張成峰是個很負責的老師,雖然JAVA基礎其實和C語言基礎差不多,但是仔細學學還是能找出很多不同的細節(jié)的,于是大家的問題就很多,張老師幾乎就是手把手的教我們,所以整體來說JAVA基礎學得挺扎實的。
我在這本書的學習不是挺好,聯系得少了,所以對代碼也不是特別熟悉。而且JAVA是一門重概念的書,對于我來說,概念是我的要害,理論知識也是我最怕學習的,所以學習這本書對我來說很是艱難,聽了很久的課,代碼寫得出來,但是理論知識幾乎一點也不明白,結果就造成了這次筆試考的不好。
筆試考的不好,機試也因為我的粗心沒有考好,所以這次的成績不好。
學習JAVA基礎后,還要在學習的過程中對每個知識都要用心和細心,當然最該注重的地方就是應該提高我對理論知識的學習,要多看書,也要多敲敲代碼,這些就是提高學習知識全面的方法。
下一本書學習的是JAVAOO算是JAVA的一個重要的內容了,這才會真正的接觸JAVA的核心課程,在這本書里我要好好的理解理論知識,仔細的學習每個知識。
第三篇:Java基礎總結
? 基本數據類型
? 變量單元直接存放數據
? 賦值和傳參的方式:傳值,即傳遞副本
? 比較相等使用關系運算符“==”
? 引用數據類型
? 變量單元存放引用即對象地址,而數據(對象)在另一內存區(qū)域存放。
? 賦值和傳參的方式:傳引用(傳遞對象的地址),即傳遞對象本身。
? 使用關系運算符“==”比較兩個引用類型變量,比較的是地址,如果比較結果為
真,說明兩個變量引用了同一對象。
? 比較兩個對象是否相等應使用equals方法
? Java是面向對象的語言,開發(fā)Java程序就是開發(fā)Java類,Java的變量定義、方法(函
數)和語句都必須在類中書寫,“無類即無Java”。
? 類的實例成員
屬性(成員變量):直接定義在類體中的變量(注:在方法或語句塊中定義的變量不是屬性)
方法:直接定義在類體中的方法。
類成員:直接定義在類體中的內部類,即類成員。
注:對象的成員是從屬于對象的,必須通過對象訪問,在Java中不存在脫離對象和類而獨立存在的屬性和方法。
? 類、方法、語句三者的關系:
類中包含方法,方法中包含語句;方法中不能嵌套方法;語句不能直接寫在類體中。
? 變量的作用域
? 局部變量-方法的參數、方法體中定義的變量、語句塊中定義的變量,僅在所定義的方法體或語句塊中有效。
? 屬性-在整個類體中有效。
? 公有的屬性-其它類可以本類對象訪問。
? 私有的屬性-僅限本類內訪問
? 局部變量(無論基本類型還是引用類型)在棧內存中,對象在堆內存中。注:引用類型的局部變量內存放是對象的引用(即地址),而對象在堆內存中。
? 方法的重載-在同一類中多個方法同名的語法現象,方法重載應符合以下條件:
? 方法同名
? 參數有所不同(即類型、個數和順序三者至少有一個不同)
注:方法是否重載不考慮返回類型等其它方面。
? 包和訪問修飾符
? 包-類的目錄結構,主要用途是方便類的管理。
? 類的簡稱:不含包名的類名
? 類的全限定名稱(類的全稱):帶包名的類名。
? 訪問修飾符
? private-僅限本類內訪問
? public-任何類都能夠訪問
? 默認-限本包的類訪問
? protected--限本包的類訪問和子類的訪問
? 類的成員(屬性、方法和成員內部類)可以使用四種訪問修飾符,頂級外部類僅能
使用public和默認兩種修飾符。
? 數組
? 基本類型的數組的元素放的是數據
? 對象數據的元素放的是對象的引用
? 二維數組實際上是一個維數組,而其每個元素又是一個一維數組。
? 構造方法-與類名同名并且無返回類型的方法
? 構造方法的作用是創(chuàng)建對象,僅能通過new關鍵字調用。
? 類中未顯式定義構造方法時,類中會有默認的構造方法(即一個public、無參的構
造方法);類中一旦定義顯式定義構造方法,將不再產生默認的構造方法。
? 構造方法可以重載
? 構造方法只能可以使用四個訪問修飾符,不可以使用其它修飾符(如static、final
等)。
? this關鍵字
? this表示本對象或對象自身的引用
? 通過this可以調用本類的成員方法和屬性
? 通過this可以調用本類的構造方法,this調用構造方法的語句必須寫在構造方法的第一句。
? 實例成員和靜態(tài)成員
? 類的成員(屬性、方法和成員類)可劃分為靜態(tài)成員和實例成員。
? 實例成員是屬于對象的,隨著對象的創(chuàng)建而存在,隨著對象的銷毀而銷毀。? 靜態(tài)成員是屬于類的,隨著類的加載而存在,隨著類的銷毀而銷毀。
? 使用static修飾的成員是靜態(tài)成員,未使用static修飾的成員是實例成員。? 靜態(tài)成員內不能使用this關鍵字。
? this表示當前對象的引用。
? 對象的初始化
? 第一:實例屬性賦默認值
? 第二:實例屬性賦初值
? 第三:執(zhí)行對象初始化塊
? 第四:執(zhí)行構造方法
? 類的初始化
? 第一:靜態(tài)屬性賦默認值
? 第二:靜態(tài)屬性賦初值
? 第三:執(zhí)行靜態(tài)塊
? 繼承的基本概念
? Java僅支持單繼承
?
?
?
?
? ? 如果一個類沒有顯式繼承任何類,則隱式繼承java.lang.Object類 ? 子類擁有父類的一切,子類對象由兩部分構成:父類對象部分和子類個性化的部分。? 子類并不能訪問父類的一切: ? 子類可以訪問父類的public成員和protected成員 ? 子類不可以訪問父類的private成員 ? 僅當子類與父類同在一包時,子類方可以訪問父類的默認訪問控制的成員。繼承與類和對象的初始化 ? 構造子類對象時,首先構造父類對象,其次構造子類個性化部分,兩者共同構成完整的子類對象,即首先進行父類對象的初始化,在初始化子類對象(個性化)部分。? 子類構造方法的執(zhí)行首先調用父類的構造方法。? 若在子類構造方法中無顯式調用父類構造方法的語句,則系統默認調用父類中可訪問的無參的構造方法,如果這時候父類中恰好沒有這樣的構造方法,則編譯出錯。? 在子類的構造方法中可以通過super關鍵字調用父類構造方法。這樣的調用語句只能出現在子類構造方法的第一句。? 關于初始化的順序 ? 初始化父類 ? 初始化子類 ? 初始化父類對象 ? 初始化子類對象 繼承與類型轉換 ? 子類型對象可以自動轉型為父類型 ? 父類型引用某個子類型對象時,可以強制轉化為這個具體的子類型 方法重寫 ? 在繼承的情況下,子類的實例方法與父類的實例方法的方法名稱、參數、返回類型、throws聲明完全一致,并且該子類方法的訪問權限不低于父類方法的訪問權限,即方法重寫(子類方法重寫了父類方法),也稱方法覆蓋。? 方法重寫僅存在于父子類中的實例方法,靜態(tài)方法沒有重寫的概念。? 當通過子類型對象執(zhí)行重寫方法時,將始終表現為子類的行為,而且無論引用對象的變量是父類型還是子類型,也無論是直接調用還是通過父類型其它方法間接調用,都將如此。? final修飾的方法不可以被重寫 ? final修飾的類不可以被繼承 隱藏成員變量 ? 如果子類和父類中定義了同名稱的成員變量,則稱子類隱藏了父類的成員變量 ? 通過父類方法訪問隱藏的成員變量時,將獲得父類成員變量 ? 通過子類方法訪問隱藏的成員變量時,將獲得子類成員變量 ? 通過父類型的引用直接訪問隱藏的成員變量時,將獲得父類成員變量 ? 通過子類型的引用直接訪問隱藏的成員變量時,將獲得子類成員變量 super關鍵字
? super僅能用于子類中表示本對象的父對象部分
? super可以調用父類型的構造方法
? Super可以調用父類的成員
? Super不可以使用在靜態(tài)上下文中
? Super不可以做為參數傳遞,不可以做為返回值返回。
? 當方法重寫時,或父類成員變量被隱藏時,子類中只能通過super訪問父類方法和
父類成員變量
? final關鍵字
? 用于變量,表示變量的值不可改變
? 用于類,表示類不可被繼承
? 用于方法,表示方法不可以被重寫
? 關于final變量的初始化時機
? 局部變量:聲明的時候初始化
? 實例成員變量:聲明、對象初始化塊和構造方法三處之一
? 靜態(tài)成員變量:聲明、靜態(tài)塊兩處之一
? 抽象類
? 抽象類可以包含抽象方法,也可以不包含抽象方法
? 含有抽象方法的類必須定義為抽象類
? 抽象類有構造方法
? 抽象類不能夠實例化
? 通過抽象類可以調用其靜態(tài)成員
? 抽象類是需要由子類繼承的,因此抽象類不允許是final類
? 抽象方法
? 抽象方法沒有方法體,包括一對空的大括號也不允許有
? 抽象方法必須是實例方法,抽象方法不允許是final的? 抽象類與繼承
? 抽象類可以被繼承
? 若抽象類的子類是非抽象類,則該子類必須實現(重寫)其父類的所有抽象方法 ? 若抽象類的子類也是抽象類,則該子類可以不實現(重寫)其父類的全部或部分抽象
方法。
? 接口
? 接口也是數據類型,可以將其理解為“純”抽象類
? 接口不是類,也沒有構造方法,不能夠實例化
? 接口中的屬性一律是public、static、final的,并可以省略這三個關鍵字
? 接口的方法一律是public、abstract的,并且可以省略這兩個關鍵字
? 接口中可以不包含任何屬性和方法
? 接口與實現
? 接口不是類,因此接口與類的關系不是“繼承”關系,而是“實現”關系,我們可
以將實現理解為繼承(盡管這并不恰當)
? 如果接口的實現類是抽象類,則該實現類可以不實現接口的全部或部分方法 ? 如果接口的實現類是非抽象類,則該實現類必須實現接口的全部方法
? 一個類可以實現多個接口
? 接口與繼承
? 接口之間可以相互繼承
? 一個接口可以繼承多個接口
? 接口與類型轉換
? 接口的的子類型對象可以自動向上轉型為接口類型
? 接口的子類型指:是接口的實現類或者接口的子接口
? 如果變量引用的對象實際是某個接口的實現類對象,而變量的類型不是這個接口的子類型,那么則可以強制轉換為這個接口類型。
? 異常的類層次結構
? Throwable錯誤類,表示不可恢復的致命錯誤
? Exception運行時異常,此類異常可以不做顯式處理
? 非運行時異常catch
? 聲明拋出 在方法頭通過throws聲明可能拋出的異常類型
? 異常機制的五個關鍵字
? try catch finally throw throws
? 如何使用
? try-catch
? try-catch-finally注:只要try執(zhí)行,其對應的finally塊才必然執(zhí)行
? try-finally注:只要try執(zhí)行,其對應的finally塊才必然執(zhí)行
? throw 主動拋出一個異常
? throws 用在方法聲明頭部,聲明方法可能拋出異常
? finally代碼塊多用于書寫資源回收代碼
? Java集合類(集合框架)
? Collection接口
? List接口 允許重復元素,元素有索引序號,并按放入元素的次序編號
? ArrayList 線性表結構,查找快,增刪慢
? LinkedList 鏈表結構,查找慢,增刪快
? Vector 同步,查找、增刪性能都不高。
? Set接口 不允許重復元素,元素無索引編號
? HashSet 元素散列存放
? TreeSet元素按自然順序排序(即從小到大排序)
? Map接口
? HashMap
? 允許null值和null鍵
? 不同步
? Hashtable <--Properties
? 不允許null值和null鍵
? 同步
? 內部類
第四篇:《JAVA基礎》基本概念總結
《JAVA基礎》基本概念總結
1、在JAVA中所有萬物皆對象,所有的代碼都要寫在一個類中,在類中只能包含屬性(變量)和方法(函數),其它代碼必須寫在某一個方法中,方法與方法之間是平行的,不能在方法中定義方法。
2、如果一個類名使用了public修飾符,則包含該類的JAVA文件名必須該類名一樣,一個JAVA文件中只能有一個類前面可以用public修飾符。
3、類是客觀實體的抽象,包含屬性(該類的數據),和對屬性進行操作的方法,為了避免用戶對類的屬性進行誤操作,我們一般把類的屬性定義為私有的,并提供相應的get與 set方法去引用和修改這些屬性。
4、類的屬性與方法可以使用static修飾符,用static修飾的屬性與方法是該類的所有對象所共享的,它們可以直接通過類名去引用,在靜態(tài)方法中只能引用該類的靜態(tài)變量與靜態(tài)方法,因為非靜態(tài)的屬性與方法在該類沒有被實例化之前是不存在的,即沒有相應的執(zhí)行空間,為了使用的方便,我們可以把不依賴于類的屬性(即在方法中不對類的屬性進行操作)的方法定義為靜態(tài)的。
5、構造函數是當一個類被實例化時執(zhí)行的一段代碼,它決定了該類被實例化后的狀態(tài),其名稱與相應的類名一樣,并且不寫返回值的類型,我們一般在構造函數中對類的屬性進行初始化。當不寫構造函數時,系統會給我們提供一個不帶參數的空構造函數,如果我們寫了一個帶參的構造函數,系統就不再提供不帶參的構造構數了。
6、為了引用一個類中定義的非靜態(tài)屬性與方法,我們需要實例化一個該類的對象,通過該對象去引用相應的方法。(這是我們實例化一個類的最直接的原因)
7、繼承可以實現代碼的復用,當子類繼承了父類之后,子類就擁有了父類中定義的非私有屬性與方法。
8、子類對象可以直接賦值給父類變量,但賦值后就不能通過父類對象去引用在子類中定義的方法了。如果子類覆蓋了父類中的方法,則當子類對象賦值給父類后,通過父類去引用該方法時,執(zhí)行的是子類中該方法的代碼。
9、為了強制子類覆蓋父類中的某一方法,可以在父類中將該方法定義為抽象的,如果一個類中含有抽象方法,則該類必須被定義為抽象的,抽象類不能被實例化。
10、接口是一種特殊的抽象類,在接口中定義方法全是抽象的,它定義了一種上層規(guī)則或協議,使實現該接口的不同類之間可以交互。
11、接口與抽象類可以定義變量,可以作為函數的參數,但傳遞給它的只能是實現該抽象類或接口中所有抽象方法的類的對象。
12、在JAVA中一個類一次只能繼承一個類,但可以實現多個接口,這是接口存在的一個非常重要的原因。
13、在程序中,有些代碼是不安全的,即在執(zhí)行的過程中有可能會產生錯誤,為了處理這些錯誤,在JAVA中引入了異常處理機制,異常的處理分為拋出(throws)和處理(try…catch..),我們一般在寫給其它地方用的方法中將有可能產生的異常拋出,而在main方法中,或實際使用時進行處理。
14、異常是一種帶有強制性的業(yè)務規(guī)則,當一個方法將異常拋出后,我們在使用該法時就必須處理該異常,使用try…catch…可以將我們處理正常業(yè)務規(guī)則的代碼與處理錯誤(即異常)的代碼分割開來,使程序的結構更加清晰。寫在try語句中的代碼都是受保護的。
第五篇:JAVA基礎知識點總結
1)開發(fā)Java語言的公司? Sun(Sun Microsystems)太陽微電子公司開發(fā) 2)
Java的3個版本?
J2SE(Java2 Standard Edition)標準版
J2EE(Java 2 Platform,Enterprise Edition)企業(yè)版 J2ME(Java 2 Micro Edition)微小版
在5.0以后新版本中稱作:JavaSE JavaEE JavaME 3)
Java語言的幾個主要特點?平臺無關性:能運行于不同的平臺上
安全性:去掉了指針操作,內存由操作系統分配 面向對象:利用類使程序更加利于維護
分布式:可以使用網絡文件和使用本機文件一樣容易 健壯性:檢查程序編譯和運行的錯誤 4)
Java的三大核心機制
虛擬機機制:利用虛擬機解釋字節(jié)碼執(zhí)行java程序實現跨平臺 垃圾收集機制:自動內存回收
代碼安全性機制:加載代碼后校驗代碼后再執(zhí)行代碼 第2章Java語言的開發(fā)環(huán)境 1)
JDK是什么?
JDK(Java Development Kit)Java開發(fā)工具包。包括了JRE,是開發(fā)Java的人員必備的開發(fā)運行Java程序的工具。2)
JRE是什么?
JRE(Java Runtime Environment)Java運行環(huán)境,運行JAVA程序所必須的環(huán)境的集合,包含JVM標準實現及Java核心類庫。3)
JVM是什么?
JVM(Java Virtual Machine)Java虛擬機,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。4)
安裝JDK的操作系統問題?
必須針對于不同的操作系統下載安裝不同的JDK,例如windows下安裝針對于windows的JDK,linux下安裝針對于linux的JDK。
5)需要配置的相關環(huán)境變量? path:用于搜索外部命令,例如編譯程序的javac命令,執(zhí)行程序的java命令
classpath:用于搜索類,即class文件,例如可以在不同的位置執(zhí)行類文件 6)
配置環(huán)境變量的方式? 有兩種:臨時配置和持久配置
臨時配置:在命令行下用set 變量名=變量值,僅在當前命令行窗口有效
持久配置:在我的電腦——屬性中配置,持久有效 7)可以編寫Java程序的常見開發(fā)工具? 記事本,EditPlus,ULTRAEDIT,Eclipse,Jbuilder,NetBeans 8)
Java文件的類型?
有兩種:
擴展名為java的文件:是Java源文件,屬于編譯之前的純文本文件,存儲java源代碼。
擴展名為class的文件:是Java類文件,屬于編譯之后的二進制文件,存儲字節(jié)碼。9)
Java的編譯運行原理?
首先編寫java源文件,然后編譯成class類文件,然后通過虛擬機解釋成機器碼到硬件執(zhí)行。
10)Java是編譯型語言還是解釋型的語言?
既不是完全編譯型,也不是完全解釋型,是半編譯半解釋的。第3章Java程序的基本結構 1)
Java語言區(qū)分大小寫嗎?
區(qū)分,不管是數據還是標識符或者關鍵字都區(qū)分大小寫,例如public不能寫成Public,“abc”不能寫成“ABC”,int i不能寫成INT I等等。2)main方法是作什么用處的? 這是程序的入口方法,是由虛擬機自動調用的。
3)語句必須用分號結束嗎? 必須的,但是代碼塊{}可以用分號結束,也可以不用分號結束
4)
Java中有幾種注釋,各自的功能
有三種:
單行注釋//:加在行首只能注釋一行 多行注釋/* */:注釋多行,但不能嵌套使用
文檔注釋/***/:用于生成HTML形式的文檔,需要配合javadoc命令實現 5)Java語言的數據類型是強類型還是弱類型? 是強類型,意味著每一個變量都必須明確聲明數據類型。6)
Java語言中數據類型的劃分?有什么區(qū)別? 分成基本類型和引用類型兩大類。
基本類型:有8種,只能存儲單一的值,不以對象的形式存在引用類型:除了基本類型之外其他的都是引用類型,能夠存儲復雜數據類型,以對象的形式存在 7)
基本類型都有哪8種類型? 布爾類型:boolean 占1字節(jié) 字符類型:char 占2字節(jié)
整型:byte 占1字節(jié) short 占2字節(jié) int 占4字節(jié) long 占8字節(jié)
浮點型:float 占4字節(jié)double 占8字節(jié) 8)
布爾值可不可以用0或者非0數代替?
不可以,布爾值只能是true和false,不能使用數字,這和C語言是不一樣的。9)
直接寫個整數10默認是什么類型的?
整型的直接量例如10,100等默認的數據類型都是int型 10)如何讓一個整型的直接量變成long型的? 在直接量后面加大寫L后者小寫l,例如10L 11)整型數據在程序中直接使用可以使用什么進制? 10進制,8進制,16進制,但不能使用二進制 12)浮點運算在Java中有沒有誤差? 有誤差,所以精密運算請使用BigDecimal類 13)直接寫一個3.14的直接量是什么數據類型的?
是double型,如果想表示是float的3.14必須寫成3.14F或者3.14f,double型的3.14也可以寫成3.14D 14)char型采取的是什么類型的字符集?
是Unicode全球統一編碼,支持任何世界上官方的語言中的字符
15)常見的轉義字符有哪些? 轉義序列 名稱 b 退格 t 制表 n 換行 r
回車
” 雙引號 ’ 單引號 反斜杠
16)常見的Unicode字符對應的編碼?
大寫的A到Z是對應65到90,小寫的a到z是對應97到122,字符0到9是對應48到57
17)空字符是不是用’’(兩個并列的單引號)來表示? 不是,空字符用’u0000’來表示,兩個并列的單引號什么也不是。
18)點,分號,花括號的各自的作用?
點的作用有兩個:一個是使用類或對象中的成員,用對象.成員,再一個就是包名和子包名之間的分隔符,例如頂層包名.子包名 分號的作用是表示語句結束 花括號的作用是代表一個語句塊
19)語句和關鍵字之間可以有任意的空白嗎? 可以的,例如System.out.println(100);就是正確的語句,但是關鍵字本身不能加空白或換行
20)標識符是什么?
標識符就是指在程序中給包,類,接口,方法,變量起的名字 21)標識符有什么起名規(guī)則? 1. 應以字母、下劃線、美元符開頭 2. 后跟字母、下劃線、美元符或數字 3. 不能用關鍵字和保留字
4. 嚴格區(qū)分大小寫 5. 名稱長度沒有限制 22)中文的變量名可以嗎?
是可以的,例如 int 數字 = 10;這個語句是正確的。因為java中采取Unicode字符集,所以任何的Unicode中的字符都可以作為標識符的名稱,但考慮字符集的支持問題推薦還是使用英文字母命名。
23)關鍵字和保留字有區(qū)別嗎?
在1.5后沒有區(qū)別,都被稱作關鍵字,但是1.5之前認為關鍵字是在Java中有特殊用途的不允許編程人員擅自改作其他用途,而保留字是在Java中沒有特殊用途但不允許編程人員擅自改作其他用途,按此說法goto和const應該是此意義上的保留字。
24)true,false,null可以用作標識符命名嗎?
不可以,這3個雖然不是關鍵字,但都是有特殊用途的值,也不能作為標識符命名
25)一條聲明語句可以聲明多個變量嗎? 可以的,例如以下聲明都是正確的int i;int i,j;int i = 10,j;int i,j = 10;
int i = 10,j = 20;
26)變量在沒有賦值的情況下可以使用嗎?
不可以,變量沒有賦值使用會報出變量未初始化的編譯錯誤。27)常量有什么特點?
在聲明變量的時候加上final修飾符即為常量,表示這個變量只能被賦一次值。
28)算數運算符有哪些? 基本算數運算符有+-* / % ++--
29)單目運算符,雙目運算符,三目運算符都是什么意思? 其實也有叫一元運算符,雙元操作符,三元操作符的,指的是
有幾個操作數形成一個完整表達式,例如++就是一個單目運算符,只需要一個操作數就可以形成表達式,像i++,而+運算符就是雙目運算符,需要兩個操作數形成表達式,例如5 + 3,還有三目運算符,例如5 > 3 ? 0 :-1
30)++和--放在前面和放在后面有什么區(qū)別?
如果是在一個表達式中,那++放后面表示先運算表達式,然后再進行自增運算,如果在一個表達式中,++放前面,則表示先進行自增運算然后在運算表達式。--同樣道理。例如: int i = 10;int j = i ++;//先進行賦值運算然后再進行自增運算j的結果是10
int i = 10;
int j = ++ i;//先進行自增運算然后再進行賦值運算
j的結果是11
31)-5 % 2等于幾,5 %-2等于幾?
-5 % 2等于-1,5%-2等于1,運算得到是正數還是負數取決于第一個操作數的符號 32)5 / 2 結果是不是2.5?
不是,是2,因為5和2都是int類型,所以不可能得到double型的結果。
33)比較運算符有哪些?
有><>=<===!= 六項基本比較運算 34)任何數據類型都可以使用> < >= <=運算符嗎?
不是所有數據類型,例如true>false這個表達式就是編譯錯誤,布爾類型和引用類型的表達式只能用==和!=兩個比較運算,例如”abc” <= ”xyz” 這個表達式也是編譯錯誤的 35)’a’ > ’b’這個表達式編譯正確嗎?
編譯正確,’a’和’b’是字符類型,內部用Unicode編碼表示的話a是97,b是98,所以實際上比較的是97>98,結果為false 36)邏輯運算符有哪些?
有 &邏輯與,|邏輯或,!邏輯非,^ 異或,&& 短路與,||短路或
37)邏輯與,邏輯或和短路與,短路或有什么區(qū)別? 邏輯與和短路與的區(qū)別是: ?
如果是邏輯與&,不管第一個表達式是true還是false,都會執(zhí)行第二個表達式,例如a > b & x < y,即使a > b為false,也會執(zhí)行x > y ?
如果是短路與&&,如果第一個表達式為false,將不會執(zhí)行第二個表達式
例如a > b && x < y,如果a > b為false,就不會執(zhí)行x > y
以此類推,邏輯或和短路或的區(qū)別是:
? 如果是邏輯或|,不管第一個表達式是true還是false,都會執(zhí)行第二個表達式 ?
如果是短路或||,如果第一個表達式為true,將不會執(zhí)行
第二個表達式
38)與或非三個邏輯運算符的優(yōu)先級是怎么排列的? “非”優(yōu)先級最高,“與”其次,“或”優(yōu)先級最低 39)原碼,反碼,補碼分別是什么意思? ?
原碼:將數字轉換為二進制,第一位為符號位,正數為0,負數為1
例如:12的原碼是00001100-12的原碼是10001100 ?
反碼:正數的反碼和原碼相同,負數的反碼將原碼符號位之外的位逐位取反
例如:12的反碼是00001100-12的反碼是11110011 ?
補碼:正數的補碼和原碼相同,負數的補碼將反碼加1 例如:12的補碼是00001100-12的補碼是11110100 最后強調一點,計算機存儲數據用補碼形式來存儲。40)位運算符都有哪些?
&與 |或 ^異或 ~非 >>右移 <<左移 >>>無符號右移 41)1<<35怎么理解?
1是int類型是32位,所以需要把35%32=3,所以事實上是和執(zhí)行1<<3等價的42)數據類型轉換需要遵循什么原則?
小類型向大類型轉換,是自動轉換的,或者說隱式轉換的 大類型向小類型轉換,是需要強制轉換的,或者說顯式轉換例如:byte b = 1;
short s = b;//自動轉換
b =(byte)s;//強制轉換
43)byte b = 10這個語句是正確的,為什么10是int型比byte大還不需要強制轉換呢?
因為在java中做了特殊處理,其中規(guī)定byte,short,char類型可以直接賦予int類型的直接量,例如: byte b = 10;short s = 10;char c = 10;
以上賦值語句都是正確的。
但是不能超出超出類型的范圍,例如以下賦值就是錯誤的: byte b = 128;
如果超出范圍,必須得作強制轉換,例如以下語句是正確的: byte b =(byte)128;
需要強調的是,必須是int類型的直接量,以下語句就是錯誤的: byte b = 10L;
10L不是int類型的直接量。
44)byte b =(byte)300;強制轉換后的結果是44,是按照什么規(guī)律得出來的?
是先把300轉換成二進制,然后根據byte類型的大小截取了后8個位
300的補碼是00000000 00000000 00000001 00101100
b的結果是:00000000 00000000 00000001 00101100 結果為44 45)byte b =(byte)true;這個轉換成立嗎?
不成立,布爾值和數字是不兼容的,不能作任何轉換。
46)int i =(int)“100”;這個轉換成立嗎?
不成立,引用類型和基本類型是不能直接強制轉換的,需要用包裝類的方法來轉換。
47)char型和short型哪個比較大?
不能說哪個大,哪個小,這兩個類型char的取值是從0~65535,而short類型的取值是-32768~32767,這個兩個類型之間的轉換都需要強制轉換。
48)字符串是不是基本類型?
不是,String是java.lang包中的一個類,是引用類型的,8種基本類型中沒有一個是String類型。49)空字符串用什么來表示?
用””(兩個并列的雙引號)表示,代表0個長度的字符串對象。50)String s = “”;和String s = null;有什么區(qū)別?
第一個表示s被賦值,指向了一個字符串對象,第二個表示s沒有指向任何對象實例,是真空
51)兩個字符串用什么運算符可以連成一個字符串? 用+運算符,例如”abc” + “xyz”最后的結果就是“abcxyz” 52)數學運算符加法和字符串連接符都是+,怎么區(qū)分? 是通過運算符兩邊的操作數來判斷的,如果兩邊的操作數都是數字型的基本類型,則進行數學運算,如果兩邊的操作數有一個是字符串,則把另一個操作數也轉換為則進行字符串連接運算。例如:+ 4 的結果是9 “5” + 4的結果是54
53)判斷字符串內容相同用什么方法?
用equals方法判斷內容相同,==只能判斷引用是否相同 54)提供用戶輸入使用哪個類 使用javav.util.Scanner類
55)if語句可以用if(-1)形式判斷嗎? 不可以,數字不能代替布爾值
56)if語句和循環(huán)語句的花括號什么時候可以省略?
當執(zhí)行的語句只有一句的時候 57)switch語句有哪些規(guī)則?
表達式expr的返回值必須是下述幾種類型之一:int, byte, char, short或枚舉常量;
case子句中的值必須是常量,且所有case子句中的值應是不同的,也必須是下述幾種類型之一:int, byte, char, short或枚舉常量
default子句是任選的;
break語句用來在執(zhí)行完一個case分支后使程序跳出switch語句塊;
58)對于退出循環(huán)break和continue有什么區(qū)別? break是退出整個循環(huán)
continue是退出當前循環(huán)繼續(xù)下一次循環(huán) 59)聲明數組創(chuàng)建數組的方法? 以下聲明都是合法的: int [] a;int a[];String[] a;
以下創(chuàng)建數組對象都是合法的: int[] a = new int[3];int[] a = {1,2,3};int[] a = new int[] {1,2,3};
60)int[] x和String[] s這兩個數組對象,哪個是基本類型,哪個是引用類型?
兩個都是數組對象,都是引用類型的61)數組元素下標最小是多少,最大是多少,超出范圍會怎么樣?
最小是0,最大是數組元素個數減一,超出范圍將會出現下標越界異常
62)得到數組長度用length屬性還是length()方法? 是length屬性,得到字符串長度才有l(wèi)ength方法
63)聲明int[][] a = new int[3][],a是一個二維數組,a[0]本身
是什么類型的?
二維數組的元素都是一維數組,a[0]是int[]類型的 64)數組的大小一經創(chuàng)建可不可以改變大小了? 不可以,數組是定長的,一經創(chuàng)建就不能再改變大小了 65)可以把2個int型,3個double型,4個String型的值放到一個數組中嗎?
不可以,數組的元素類型必須是相同類型的。66)java中的多維數組必須是要形成矩陣排列嗎? 不一定,也可以是不規(guī)則的。67)操作數組比較方便的實用類?
java.util.Arrays類提供了很多關于數組的實用方法。第4章對象和類 1)OOP是什么意思? Object Oriented Programming(面向對象編程)
2)
類和對象的區(qū)別?
類:對象的藍圖,生成對象的模板,是對一類事物的描述,是抽象的概念上的定義
對象:對象是實際存在的該類事物的每個個體,因而也稱為實例 3)
類之間的3種關系? 依賴關系(uses-a)聚集關系(has-a)繼承關系(is-a)4)
一個java源文件可以寫多個類嗎?
可以,但必須只能有一個公有類,并且文件名和公有類的類名相同。5)類中有哪些成員?
有屬性(數據域),方法,構造器(構造方法)
6)
構造方法和普通方法的區(qū)別?
構造方法沒有返回值,方法名必須和類名相同,需要用new語句調用構造方法。7)
普通方法可不可以也類名作為方法名?
是可以的,因為調用普通方法的語法和調用構造器的語法不一樣。8)
一個構造器調用另外一個構造器需要用什么語法? 用this()語法調用另外一個重載構造器,需要注意的是調用語句必須是構造器中的第一句 9)
什么時候虛擬機會自動添加一個默認構造器?
當類中沒有顯式定義任何構造器的時候,虛擬機會自動添加一個無參的構造器
10)實例成員和靜態(tài)成員的區(qū)別?
實例成員:是屬于對象實例的,用對象.成員名稱語法調用 靜態(tài)成員:和對象實例無關,是屬于類本身的,用類名.成員名稱語法調用
11)靜態(tài)初始化塊statci{}的執(zhí)行時機是什么時候? 在類被加載的時候,僅執(zhí)行一次。
12)靜態(tài)方法可不可以直接調用同一個類中的非靜態(tài)方法? 不可以,靜態(tài)方法不能直接調用一個非靜態(tài)成員,需要用對象調用。
13)包是什么?
包實際上就是物理上的文件夾,可以把類放到不同的包中。14)把一個類放到包中,需要在類中加上什么語句? 需要加上包聲明package語句,必須寫在源文件的第一句。15)什么時候需要導入類?用什么語句?
當使用的類和當前類并不在同一個包中的時候,用import語句導入。
16)默認包中的類可以導入嗎?
不可以,不在默認包中的類無法使用默認包中的類。17)java中哪個包中的類是自動導入的? java.lang包
18)什么叫做完整類名? 頂層包名.子包名.類名
19)靜態(tài)導入語句有什么作用?
在使用類中的靜態(tài)成員的時候前面不需要加類名前綴。
20)局部變量和全局變量的區(qū)別? 區(qū)別 局部變量 全局變量
聲明位置 方法或塊內部 方法外類內部 訪問權限修飾符 沒有訪問權限 有訪問權限
默認值 沒有默認值
有默認值
使用形式 直接使用 對象調用
作用域
在方法或語句塊內部 整個類
生命周期 進入方法或語句塊創(chuàng)建退出方法或語句塊銷毀 隨著對象的創(chuàng)建而創(chuàng)建隨著對象的銷毀而銷毀
21)賦值語句賦給目標的是值還是引用?
如果是基本類型則賦的是值本身,引用類型則賦的是引用地址 第5章繼承和多態(tài) 1)類的繼承是誰繼承誰?
是子類繼承了父類,子類也稱為派生類,父類也稱為超類或基
類 2)子類繼承了父類的什么東西?
子類可以繼承父類的數據域(屬性),方法,但構造器不能繼
承 3)
私有成員能被子類繼承嗎?
能繼承,但是由于訪問權限的控制,在子類中不能直接使用父類的私有成員 4)
Object是什么類?
這個所有類的根類,任何類如果沒有寫顯式的繼承語句,默認都是直接繼承Object類的 5)java中是單繼承還是多繼承?
是單繼承,一個子類只能有一個父類 6)
訪問權限修飾符有幾種,訪問的范圍又是多大? 有四種:
private:私用 只能在被類中被訪問 default:默認 只能被同一個包中的類訪問
protected:受保護的 只能被同一個包中的類和不同包中的子類
訪問
public:公有 可以被任何類訪問 7)
覆蓋方法的規(guī)則有哪些?
子類覆蓋方法和父類被覆蓋方法的方法返回類型,方法名稱,參數列表必須相同
子類覆蓋方法的訪問權限必須大于等于父類的方法的訪問權限
方法覆蓋只能存在于子類和父類之間
子類覆蓋方法不能比父類被覆蓋方法拋出更多異常 8)
參數列表是否相同從哪幾方面看?
從三方面看:參數個數,類型和順序,需要注意的是參數的名字不相同是無所謂的 9)
覆蓋方法的規(guī)則有哪些? 方法名相同
方法的參數類型,個數,順序至少有一項不同 方法的返回類型和修飾符均不受限制
10)可變長參數的聲明格式是什么?實際上是什么類型的? 類型 ? 變量,實際上是一個一維數組 11)this和super是作什么用處的?
this:本身代表當前的對象引用,可以用this.成員名稱調用當前對象的屬性和方法,如果屬性和局部變量重名,可以用this.屬性名和局部變量區(qū)分開。也可以用this()語法調用本類重載構造器。
super:本事是一個特殊關鍵字,可以用super.成員名稱調用從父類繼承的屬性和方法,也可以用super()語法調用父類構造器。
12)super代表子類中的父類對象引用嗎?
不,這個錯誤的說法,super不代表任何對象引用,僅僅是一個關鍵字
13)什么時候子類構造器會自動調用父類無參構造器? 當子類構造器中沒有任何顯式構造器調用的時候,即既沒有this()調用也沒有super()調用的時候
14)一個父類類型的引用變量可以引用一個子類的實例嗎? 可以,這個引用變量是一個多態(tài)對象 15)多態(tài)對象有什么特點?
多態(tài)對象只能使用父類的成員,但如果多態(tài)對象使用了被子類覆蓋的方法,則會動態(tài)綁定使用子類的成員,稱為虛擬方法調用
16)引用類型之間的類型轉換需要遵循哪些規(guī)則? 自動轉換:從子類到父類的類型可以自動轉換 強制轉換:從父類到子類的類型要強制轉換 無繼承關系的類型轉換是非法的 17)instanceof操作符是作什么用處的?
可以判斷一個對象的類型是否是某一個類的類型或子類,也可以判斷這個對象的類型是否是一個接口的實現類 18)toString方法什么時候會自動被調用?
在打印語句中傳入引用類型的對象或者對象和字符串作連接時
19)默認的equals方法實現的是比較內容還是比較引用地址?
在Object中是比較引用地址。
20)覆蓋equals方法和hashCode方法有什么規(guī)則? 必須保證當兩個對象equals比較為true的時候,返回的hashCode相同,當比較為false的時候,返回的hashCode不同21)java中有幾個包裝類?
有8個包裝類,正好對應8種基本數據類型。
分別是:Boolean Byte Short Integer Long Character Float Double 22)裝箱和拆箱分別是什么意思?
裝箱指的是把基本類型包裝成包裝類的引用類型 拆箱指的是把包裝類形式的引用類型轉換為基本類型 例如:
Integer objInt = new Integer(10);//裝箱
int i = objInt.intValue();
//拆箱
23)JDK1.4和1.5的裝箱和拆箱有什么區(qū)別?
自動拆裝箱,例如: Integer intObj = 10;//自動裝箱 int i = intObj + 5;//自動拆箱
24)final修飾符如何使用,使用了final修飾符有什么特點? final修飾符可以修飾類,方法,變量 final類為最終類,不能被子類繼承 final方法為最終方法,不能被子類覆蓋 final變量為常量,只能賦一次值
25)abstract修飾符如何使用,使用了abstract修飾符有什么特點?
abstract修飾符可以修飾類和方法 abstract類為抽象類,是不能創(chuàng)建對象的abstract方法為抽象方法,只有方法的聲明,沒有具體的實現 需要注意的是:
有抽象方法的類一定是抽象類 抽象類不一定有抽象方法
抽象類也有構造器,但不能創(chuàng)建對象實例 26)abstract不能和哪些修飾符配合使用? 不能和private,static,final一起使用 27)可以在非抽象方法中調用抽象方法嗎? 可以,模板方法設計模式就是典型的這種調用 第6章 泛型程序設計 1)泛型的特點是什么? 主要特點是類型參數化,后期綁定數據類型 2)泛型支持基本類型嗎?
不支持,只支持引用類型 3)如果沒有傳入類型參數,默認是什么類型? 默認是Object類型
4)泛型方法有什么特點?
將泛型參數聲明在方法中,調用方法的時候綁定泛型 5)
泛型類聲明泛型參數的時候,
么意思?
表示綁定的類型必須是A類型后者是A類型的子類或實現類 第7章 接口和內部類
1)聲明一個接口的關鍵字是什么? interface關鍵字
2)
接口中的成員有什么特點?
數據域必須是(public static final修飾)公有靜態(tài)常量 方法必須是(public abstract修飾)公有抽象 沒有構造方法 3)接口能創(chuàng)建對象實例嗎? 不能,接口沒有構造器,不能創(chuàng)建對象
4)
接口和類的關系?
接口和類之間是實現關系,一個類用implements語句實現了某接口,這個類被稱為接口的實現類,一個類可以實現多個接口,一個類實現了某接口,必須覆蓋這個接口中的所以方法,否則這個類必須是個抽象類 5)
接口和接口的關系?
接口和接口之間是繼承關系,一個接口用extends繼承另外一個接口,稱為這個接口的子接口。一個接口可以繼承多個父接口 6)
內部類如何定義?
一個類聲明在另一個類的里面,這個類就被稱為內部類,而外面的類被稱為外部類 7)
內部類可以分成幾種?
實例內部類:聲明在方法外邊沒有static修飾符 靜態(tài)內部類:聲明在方法外邊有static修飾符 局部內部類:聲明在方法里邊 8)
如何創(chuàng)建實例內部類的對象實例? 需要用外部類的對象來創(chuàng)建 例如: class A {class B {
}
}
如果像創(chuàng)建B類的實例,則必須用以下語句: A a = new A();A.B b = a.new B();9)
如何在實例內部類中訪問外部類的成員?
在實例內部類中可以直接使用外部類的成員,不需要創(chuàng)建外部類的對象實例,但是如果在內部類中的成員名稱屏蔽隱藏了外部類的成員(即外部類和內部類的成員名相同),則需要用“外部類名.this.成員名”訪問外部類成員 第8章異常處理
1)異常的對象的根類是哪個類? 是Throwable類
2)
Throwable類有哪兩個分支?
分成Error類和Excepion類兩個分支 Error類表示嚴重錯誤
Exception類表示可以在程序中處理的錯誤 3)
Exception類有哪兩個分支?
分成運行時異常和非運行時異常(已檢查異常)運行時異常編譯不檢查,在運行時才會發(fā)生異常
已檢查異常編譯時就會作檢查,不處理異常則通不過編譯 4)如果在try塊中發(fā)生異常,那么程序將會跳轉到哪? 會跳轉到catch語句塊 5)catch語句可以用父類類型捕獲子類異常嗎? 因為有多態(tài)特點,是可以的6)處理異常代碼finally語句會在什么時候執(zhí)行? finally代碼在任何時候都會執(zhí)行,不管有沒有發(fā)生異常。7)
如何聲明已檢查異常,由誰來處理這個異常? 用throws語句來聲明一個已檢查異常,由方法的調用者來處理這個異常 8)
如何拋出一個異常? 用throw語句拋出
9)如何創(chuàng)建一個自定義的異常類? 創(chuàng)建一個類,只要讓它繼承任何一個現有的異常類就可以了 10)覆蓋方法對于異常有什么要求? 覆蓋方法不能比父類方法拋出更多異常 第9章反射,代理,標注
1)
獲得一個類型的Class對象有哪幾種途徑?
方法1:對象.getClass()方法2:類型名.class 方法3:Class.forName()2)
反射相關的類型都有哪些? Class 代表一個運行時類 Field 代表一個類的屬性 Method 代表一個類的方法 Constructor 代筆一個類的構造器 3)
如何聲明一個自定義標注? [<修飾符>] @interface <標注名>{ 返回值方法名稱(); 返回值方法名稱(); ?? } 例如:
public @interface MyComment { int id();String info();} 4)
java有幾個內置標注? 有3個
@Override——用于修飾此方法覆蓋了父類的方法,而非重載。@Deprecated——用于修飾已經過時的方法。
@SuppressWarnings——用于通知Java編譯器禁止特定的警告。第10章 java常用類 1)
字符串String是可變類還是不可變類?
是不可變類,一經創(chuàng)建就不能修改其內容了 2)
字符串的常用方法有哪些? charAt方法:可以返回指定位置的字符 substring方法:可以截取子字符串 length方法:返回字符串長度 indexOf方法:查找子串的位置 lastIndexOf方法:反向搜索字串的位置 replaceAll方法:替換字符串 split方法:分解字符串
toLowerCase, toUpperCase方法:字符串大小寫轉換 3)StringBuffer類和String類有什么區(qū)別? StringBuffer是可變類,String是不可變類
4)StringBuffer類和StringBuilder類有什么區(qū)別? StringBuffer類是線程安全的,StringBuilder類是線程不安全的5)Math類主要提供了哪些方法?
Math類提供了大量的和數學運算相關的靜態(tài)方法 6)Set集合和List集合共同的父接口是什么? 是Collection集合7)
Set集合和List集合有什么區(qū)別? Set: Collection的子接口,不記錄元素的保存順序,且不允許有重復元素
List: Collection的子接口,記錄元素的保存順序,且允許有重復元素 8)
ArrayList和LinkedList有什么不同?
ArrayList 的內部實現是基于內部數組Object[],所以從概念上
講它更像數組
LinkedList的內部實現是基于一組連接的記錄,所以它更象一個鏈表 結構,所以它們在性能上有很大的差別。ArrayList 隨機訪問比較塊,但插入和刪除元素比較慢 LinkedList但插入和刪除元素比較快,但隨機訪問比較慢 9)
HashTable和HashMap有什么不同?
HashTable是線程安全的,HashMap是線程不安全的10)Vector和ArrayList有什么不同? Vector是線程安全的ArrayList是線程不安全的 第11章 IO流 1)
流分成哪兩類?
按照單位劃分分成字節(jié)流和字符流。按輸入輸出分成輸入流和輸出流 2)
和文件流相關的有那幾個類? FileInputStream文件輸入字節(jié)流 FileOutputStream文件輸出字節(jié)流 FileReader文件輸入字符流 FileWriter文件輸出字符流 3)
文件流操作應該用字節(jié)流還是字符流? 如果是純文本文件應該用字符流 如果是二進制文件應該用字節(jié)流 4)
文件操作用哪個類? 用java.io.File類 第12章 線程 1)
創(chuàng)建一個線程類的兩種方式? 繼承Thread類 實現Runnable接口 2)線程體應該放在哪個方法里面? run方法 3)啟動新的線程用什么方法?
用start方法
4)一個線程對象能夠用start多次啟動嗎? 不可以,一個線程方法只能start一次
5)線程有哪幾種主要狀態(tài)? 有四種,分別是:新生狀態(tài),可運行狀態(tài),阻塞狀態(tài),死亡狀
態(tài) 6)
線程的同步需要用什么方法? 舊的方法是用synchronized關鍵字
新的方法是用ReentrantLock類的lock和unlock方法