Java,JavaSE知識點學習筆記_第1頁
Java,JavaSE知識點學習筆記_第2頁
Java,JavaSE知識點學習筆記_第3頁
Java,JavaSE知識點學習筆記_第4頁
Java,JavaSE知識點學習筆記_第5頁
已閱讀5頁,還剩42頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基礎語法1、dos常用命令cd. 退回到上一級目錄cd 退回到根目錄cd toolsdemo 進入tools文件夾下的demo文件夾中d: 盤符切換cd d:234 進入d盤的234文件夾,再切換盤符(d:)才能進入d:234dir 列出當前目錄下的文件以及文件夾cls 清除屏幕Tab 補齊命令ipconfig: 查看本機的相關網絡配置D:> "D:Program FilesqqBinQQScLauncher.exe"運行相關程序軟件,注意是用雙引號括起來的上下箭頭可以快捷輸入前后剛輸入的一條命令,右鍵可以一個一個字母快捷輸入上一次剛輸入的命令2、Java版本/開發環

2、境/命名規范等在開始學習Java編程之前,我們首先需要安裝Java開發環境(JDK:Java開發工具包 Java Development Kit)JAVA三大版本的區別:JAVASE (舊名稱J2SE)Java Platform Standard Edition完成桌面應用程序的開發,是其它兩者的基礎JAVAEE (舊名稱J2EE)Java Platform Enterprise Edition:開發企業環境下的應用程序,主要針對web程序開發JAVAME (舊名稱J2ME)Java Platform Micro Edition開發電子消費產品和嵌入式設備,如手機中的程序。(和android

3、app開發沒關系)JDK與JRE、JVM區別:1. JDK:Java Development Kit (Java開發工具包,sdk),是java的開發和運行環境,在程序員的電腦上當然要安裝JDK;2. JRE:Java Runtime Environment(Java運行環境),如果你不需要開發只需要運行Java程序,那么你可以安裝JRE。例如程序員開發出的程序最終賣給了用戶,用戶不用開發,只需要運行程序,所以用戶在電腦上安裝JRE即可。3.JVM:Java Virtual Machine(Java虛擬機),它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JVM

4、有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。3. JDK包含了JRE,JRE包含JVM。java跨平臺特性(核心優勢):1. 平臺指的是操作系統 (Windows,Linux,Mac等)。2. Java程序可以在任意操作系統上運行,一次編寫到處運行3. 實現跨平臺需要依賴Java的虛擬機 JVM (Java Virtual Machine),根據不同的系統有不同的Java虛擬機Java運行流程:1.源文件:編寫Java源文件(我們也稱之為源代碼文件),它的擴展名為.java;2.編譯:然后通過編譯器(javac.exe)把源文件編譯成字節碼文件,字節碼文件擴展名為.c

5、lass;3.解釋運行:最后使用解釋器(java.exe)來運行字節碼文件。Java編程命名規范:類/接口命名:類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫;如果類名稱由多個單詞組成,則每個單詞的首字母均應為大寫例如TestPage;如果類名稱中包含單詞縮寫,則這個所寫詞的每個字母均應大寫,如:XMLExample,還有一點命名技巧就是由于類是設計用來代表對象的,所以在命名類時應盡量選擇名詞。方法名:參照java駝峰命名法,首字母以小寫開頭,每個單詞首字母大寫(第一個單詞除外)。可以為動詞或動詞+名詞組合。變量:參照java駝峰命名法,首字母以小寫開頭,每個單詞首字母大寫(第一個單詞除

6、外)。常量:采用全部大寫的形式來書寫,對于采用多詞合成的變量采用“_”來連接各單詞。如:USER_LIST駝峰命名法(Camel-Case): 當變量名或函式名是由一個或多個單字連結在一起,而構成的唯一識別字時,首字母以小寫開頭,每個單詞首字母大寫(第一個單詞除外)。3:邏輯運算符運算符運算規則范例結果&與false&trueFalse|或false|trueTrue異或trueflaseTrue!非!trueFlase&&短路與false&&trueFalse|短路或false|trueTrue&&和|比&和|效率更高,

7、因為只要一邊滿足條件另一邊就不用計算了, 推薦使用。4:變量變量:變量是內存中裝載數據的小盒子,你只能用它來存數據和取數據。在創建變量時需要指定變量的數據類型(不同的變量類型能裝載的數據大小不一樣),例如整型變量、浮點型變量等等。變量必須要有明確的類型,什么類型的變量裝載什么類型的數據。變量的作用域和生存期:變量的作用域: 作用域從變量定義的位置開始,到該變量所在的那對大括號結束;生命周期: 變量從定義的位置開始就在內存中活了; 變量到達它所在的作用域的時候就在內存中消失了;計算機存儲單元:變量是內存中的小容器,用來存儲數據。那么計算機內存是怎么存儲數據的呢?無論是內存還是硬盤,計算機存儲設備

8、的最小信息單元叫“位(bit)”,我們又稱之為“比特位”,通常用小寫的字母b表示。而計算機最小的存儲單元叫“字節(byte)”,通常用大寫字母B表示,字節是由連續的8個位組成。當程序需要使用存儲空間時,操作系統最小會分派給程序1個字節,而不是1個位。你可能會說,如果程序只需要1個位的空間,系統分派不能只分派1個位嗎?答案是不能!這就像你只需要1支煙,你到商店去買煙,商店分派的最小單元是1盒(20支),他不可能賣給你1支煙。你可能會想,1個字節(8位)可以存儲很大的數值了,1位最大是9那么8位最大值為99999999。你錯了,因為計算機是采用二進行存儲的,而不是我們生活中常用的十進制。所以1個字

9、節存儲的最大數據是11111111的二進制數。除了字節外還有一些常用的存儲單位,大家可能比較熟悉,我們一起來看看:1B(字節) = 8bit1KB = 1024B1MB = 1024KB1GB = 1024MB1TB = 1024GB1PB = 1024TB5:數據類型/類型轉換Java數據類型: 基本類型之4類8種:Java中基本類型一共4類,把這4類展開后共8種基本類型。我們今后編寫程序時使用的是這8種基本類型而不是4類,這8種基本類型指定了范圍。級別從低到高為:byte,char,short(這三個平級)->int->float->long->double四類八種

10、字節數數據表示范圍整型byte1-128127short2-3276832767int4-21474836482147483648long8-263263-1浮點型float4-3.403E383.403E38double8-1.798E3081.798E308字符型char2表示一個字符,如('a','A','0','家')布爾型boolean1只有兩個值true與falsejava中默認的整數類型是int類型,添加了“L”后綴的整數常量都是long類型的,例如:100L、12345678901L都是long類型的常量java中

11、默認的浮點類型是double類型,在Java中所有沒有后綴以及使用“D”后綴(小寫也可以,但建議使用大寫)的小數都是double類型;float類型常量必須添加“F”后綴(小寫也可以,但建議使用大寫)如:3.14沒有后綴,所以它是double類型;5.28D為double類型;1.26F為float類型。注:String不是基本數據類型,而屬于引用類型,定義string類型變量方式和基本類型相同,如string str=”我是一個字符串”;char類型的數據只能用單引號表示且只能寫一個字符如3,字符串用雙引號表示可以寫N個字符如”33”類型轉換要點:范圍小的數據類型值(如byte),可以直接轉

12、換為范圍大的數據類型值(如int);例如:double d = 1000; /d的值為1000.0范圍大的數據類型值(如int),不可以直接轉換為范圍小的數據類型值(如byte),此時需要強制轉換(強制類型轉換格式:范圍小的數據類型 變量 = (范圍小的數據類型) 范圍大的數據類型值;) 例如:int i = (int)6.718; /i的值為6數據類型按照數據范圍從小到大依次:byte -> short -> int -> long -> float -> double另外char也沒有int范圍大,所以可以自動轉換成int。如果int轉char,那就需要強制轉

13、換了。因為char在轉換成int的時候會自動把英文轉成ASCII編碼把漢字轉換陳Unicode編碼。char的取值范圍是065535(1111111111111111轉換成十進制正好是65535),雖然short也占用兩個字節,但是short的最高位是正負符號(最大值是+111111111111111,轉換成十進制是+32767)進行算術運算的最低等級是int型,所以short byte char 進行運算都先將自身轉換成intByte a=1; 這個寫法是沒有錯的,因為雖然數字默認是int類型,但是可以把byte理解成是int的一個子集,byte表示的范圍是-128-127;在這個范圍內可以

14、用整形常量(注意一定是整形常量不是整形變量)復制給byte類型的變量,這樣做的目的就是為了節約更多的資源。6:引用數據類型類的聲明:public class 類名 /類名必須與文件名相同數據類型 屬性名稱1;數據類型 屬性名稱2;類的使用格式:導包:我們將所有的類放到同一個文件夾下,可以避免導包。創建對象:數據類型 變量名 = new 數據類型(); 如:Scanner scaInt=new Scanner();Scanner鍵盤輸入類導包:import java.util.Scanner;聲明:Scanner s = new Scanner(System.in);方法:nextInt();

15、用來接收控制臺錄入的數字next(); 用來接收控制臺錄入的字符串Random隨機數類導包:import java.util.Random;方法:nextInt(maxValue)產生0,maxValue)范圍的隨機整數,包含0,不包含maxValue;nextDouble() 產生0,1)范圍的隨機小數,包含0.0,不包含1.0。7:JVM內存劃分java分了5片內存。1:寄存器。2:本地方法區。3:方法區。4:棧。5:堆。8:數組數組定義:1、數據類型 數組名 = new 數據類型元素個數或數組長度; 如:int x = new int100; 2、類型 數組名 = new 類型元素,元素

16、,; 如:int x = new int1,2,3,4;3、類型 數組名 = 元素,元素,元素,; 如:int x = 1,2,3,4; 推薦使用二維數組定義:1、int arr = new int34;2、int arr = new int3; 不推薦使用3、int arr = 1,2,3,4,5,6,7,8,9; 當數組被成功創建后,數組中元素會被自動賦予一個默認值,根據元素類型的不同,默認初始化的值也是不一樣的。具體如下表所示:數據類型默認初始化值byte、short、int、long0float、double0.0char一個空字符(空格),即u0000booleanfalse引用數據

17、類型null,表示變量不引用任何對象數組排序:(1)數組逆序:for (int min = 0,max=arr.length-1; min<max; min+,max-) int f=arrmin;arrmin=arrmax;arrmax=f;(2)選擇排序(從小到大):第一個依次和右邊的比較,每次比較選出最小的放在最左邊for (int i = 0; i < arr.length; i+) for(int j=i;j<arr.length;j+)if(arri>arrj)int f=arri;arri=arrj;arrj=f;(3)冒泡排序(從小到大):相鄰之間依次比

18、較,每次選出最大的放在最右邊for (int i = 0; i < arr.length-1; i+) for(int j=0;j<arr.length-i-1;j+)if(arrj>arrj+1)int f=arrj;arrj=arrj+1;arrj+1=f;數組查找:(1)二分查找/折半查找:查找數組中是否包含某個元素(這種查找方法要求被查找的數組元素必須有序排列)public static int subP(int arr,int key) int min=0;int max=arr.length-1;int mid;while(min<=max)mid=(min

19、+max)/2;if(key>arrmid)min=mid+1;else if(key<arrmid)max=mid-1;elseReturn mid;Return -1;9:集合1、ArrayList集合導包:import java.util.ArrayList;創建對象:與其他普通的引用數據類型創建方式完全相同,但是要指定容器中存儲的數據類型:ArrayList<要存儲元素的數據類型> 變量名 = new ArrayList<要存儲元素的數據類型>(); 如:ArrayList<Integer> list = new ArrayList<

20、;Integer>(); “<要存儲元素的數據類型>”中的數據類型必須是引用數據類型,不能是基本數據類型;下面給出8種基本數據類型所對應的引用數據類型表示形式:基本數據類型對應的引用數據類型表示形式byteByteshortShortIntIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBooleanArrayList集合方法:.add(obj);追加元素到集合末尾,如.add(200)。注意追加元素的類型要對應ArrayList聲明的類型。如果有兩個參數,表示追加到指定的索引位置,而該索引位置上之前的元素后移

21、,如.add(0,4)表示在索引0上面添加元素4。.remove(index);移除集合指定索引位置上的元素.set(index,obj);修改集合指定索引的元素,如.set(2,10)表示把索引2上面的元素修改成10;.get(index);返回集合指定索引位置的元素,如.get(0).size();返回集合元素的長度.clear();清空集合中的所有元素2、10:方法在Java中,聲明一個方法的具體語法格式如下:修飾符 返回值類型 方法名(參數類型 參數名1,參數類型 參數名2,) 執行語句 return 返回值;對于上面的語法格式中具體說明如下:修飾符:方法的修飾符比較多,有對訪問權限進

22、行限定的,有靜態修飾符static,還有最終修飾符final等,這些修飾符在后面的學習過程中會逐步介紹返回值類型:用于限定方法返回值的數據類型參數類型:用于限定調用方法時傳入參數的數據類型參數名:是一個變量,用于接收調用方法時傳入的數據return關鍵字:用于結束方法以及返回方法指定類型的值返回值:被return語句返回的值,該值會返回給調用者需要特別注意的是,方法中的“參數類型 參數名1,參數類型 參數名2”被稱作參數列表,它用于描述方法在被調用時需要接收的參數,如果方法不需要接收任何參數,則參數列表為空,即()內不寫任何內容。方法的返回值必須為方法聲明的返回值類型,如果方法中沒有返回值,返

23、回值類型要聲明為void,此時,方法中return語句可以省略。方法里面可以調用方法,但不能定義另一個方法執行語句(如”System.out.println()”)必須放在方法里面,這是java語法規范,或者放在靜態代碼塊里,一般java靜態代碼塊里的代碼是獲取這個類初始化所需要的一些資源,比如獲取配置文件,數據庫連接串等,因為static修飾的東西再虛擬機啟動的時候就會加載,除此之外的執行代碼都要放在方法里 或代碼塊中。重載的定義是:方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數、順序。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個

24、數選擇一個恰當的方法。重載的注意事項重載方法參數必須不同:參數個數不同,如method(int x)與method(int x,int y)不同參數類型不同,如method(int x)與method(double x)不同g參數順序不同,如method(int x,double y)與method(double x,int y)不同重載只與方法名與參數類型相關與返回值無關。如void method(int x)與int method(int y)不是方法重載,不能同時存在重載與具體的變量標識符無關。如method(int x)與method(int y)不是方法重載,不能同時存在11:開發所

25、需環境搭建及軟件安裝(1)JDK需要安裝(2)Eclipse有免安裝的壓縮包,解壓后即可使用(3)Tomcat也有免安裝的壓縮包,解壓后即可使用配置JDK的環境變量(3個):鼠標右鍵點擊計算機 屬性 高級系統設置 點擊環境變量。1:新建JAVA_HOME 指向的是JDK的安裝路徑,如C:jdk1.5.0_06,在這路徑下你應該能夠找到bin、lib等目錄。2:PATH 環境變量原來Windows里面就有,你只需修改一下,使他指向JDK的bin目錄,這樣你在控制臺下面編譯、執行程序時就不需要再鍵入一大串路徑了。設置方法是保留原來的PATH的內容,并在最前面加上%JAVA_HOME%bin;3:J

26、DK5.0以上版本不再需要配置CLASSPATH環境變量Eclipse首次安裝需要調整的一些參數:1:修改java代碼的字體大小與顏色Window - Preferences - General - Appearance - Colors and Fonts - Java - Java Editor Text Font選中后,點擊Edit,進行修改2:修改其他字體大小與顏色Window - Preferences - General - Appearance - Colors and Fonts - Bacic - Text Font 選中后 點擊Edit ,進行修改3:文件編碼修改成UTF-

27、8:Window - Preferences -搜索workspaces,修改編碼4程序的編譯環境和運行環境編譯環境:Window - Preferences Java - Compiler運行環境:Window - Preferences Java - Installed JREsTomcat的目錄結構:在瀏覽器的地址欄中輸入http:/localhost:8080,能打開證明啟動成功Tomcat啟動不成功的原因分析:如果沒有配置JAVA_HOME環境變量,在雙擊“startup.bat”文件運行tomcat時,將一閃立即關閉。且必須配置正確,及JAVA_HOME指向JDK的安裝目錄如果是端

28、口沖突:.BindException: Address already in use: JVM_Bind <null>:8080 解決辦法可是是修改Tomcat/conf/server.xml里面的端口號,如下:Eclipse綁定Tomcat和web項目綁定tomcat及發布:1:新建web項目的時候直接綁定tomcat,并且為該項目創建server。大致步驟:newprojectDynamic Web Project.,下圖要注意:2:項目建好后還要為當前server指定項目的發布地址,如下圖:3:然后再右鍵上圖綠色框的地方,點擊add and remove選項,把當前新建的項目

29、或已存在的項目加到此服務器中。至此,項目就可以發布了。PS:另外,Window - Preferences serverRuntime-Environments選項可以為eclipse軟件創建某個版本的tomcat運行環境Web項目發布后在本地的目錄結構如下:注意:WEB-INF目錄是受保護的,外界不能直接訪問12:Eclipse使用技巧快捷鍵:內容輔助鍵 Alt+/格式化Ctrl+Shift+f自動導包: Ctrl+Shift+o如果當前類在多個包中都存在,這時候,使用Ctrl+shift+o,進行選擇一個包導入即可。單行注釋加注釋: 先選中需要注釋的內容,然后 Ctrl+/取消注釋:先選中

30、需要取消注釋的內容, 然后 Ctrl+/多行注釋加注釋: 先選中需要注釋的內容,然后 Ctrl+Shift+/取消注釋:先選中需要取消注釋的內容, 然后 Ctrl+Shift+Ctrl+T:查看所選中類的繼承樹Ctrl+滑動鼠標點擊類名,或者選中類名后,按F3鍵查看所選中類的源代碼。Ctrl+滑動鼠標點擊方法名,或者選中方法名后,按F3鍵查看所選中方法的源代碼。Eclipse中的JRE System Library是默認的Eclipse依賴JRE中的類庫。在該位置可以查找到平常使用的String類、Random類、Math類等。文檔注釋導出幫助文檔:在eclipse使用時,可以配合文檔注釋,導

31、出對類的說明文檔,從而供其他人閱讀學習與使用。輸入 /*回車,自動生成文檔注釋結構,然后自己在里面添加文檔說明。(導出文檔注釋并生成幫助文檔其實使用的是JDK-bin路徑下的javadoc.exe程序。)通過使用文檔注釋,將類或者方法進行注釋用簡單標注基本信息。如author 作者、version代碼版本、param方法參數、return方法返回值等。導出幫助文檔步驟:右鍵包/類/項目文件夾等-Export-選擇java下面的javadoc類型-選擇JDK中javadoc命令的路徑,選擇需要導出哪些包和類,選擇導出路徑-finish如果源文件編碼使用了utf-8編碼,那么生成的文檔可會報錯,提

32、示:編碼 GBK 的不可映射字符解決辦法如下:Generate javadoc時, 在第三個對話框的"Extra Javadoc options" 文本框里面加上-encoding UTF-8 -charset UTF-8截圖如下:項目的jar包導入與導出:jar包是一個可以包含許多.class文件的壓縮文件。我們可以將一個jar包加入到項目的依賴中,從而該項目可以使用該jar下的所有類;也可以把項目中所有的類打包到指定的jar包,提供給其他項目使用。導出jar包:即把項目中所有類,打包到指定的jar包中,步驟如下:右鍵包/類/項目文件夾等-Export-選擇java下面的

33、JAR file類型-選擇需要導出壓縮哪些類,選擇導出路徑,命名-finish導入jar包:即把指定的jar包,加入到指項目中,提供給項目使用。導入jar包的過程是將jar包加入到項目的.classpath文件中去,讓項目識別,便可以使用jar包中所有的.class文件類。以下是加入步驟:1:項目根文件夾下創建lib文件夾,用于同一管理所有的jar文件2:把jar文件復制到lib文件夾中3:右鍵點擊jar文件,點擊Build Path,選擇Add to Build Path,此時查看項目根文件夾下的.classpath文件,發現新加入的jar包路徑被配置到了該文件中。說明可以使用jar包中所有

34、類了。面向對象1:方法棧與堆棧:(方法、局部變量(基本數據類型變量、對象的引用變量)基本數據類型的變量(int、short、long、byte、float、double、boolean、char等)以及對象的引用變量,其內存分配在棧上,變量出了作用域就會自動釋放。棧內存的主要作用是存放基本數據類型和引用變量。棧的內存管理是通過棧的"后進先出"模式來實現的。(主要用來執行方法和語句,存取速度快,大小和生存期必須確定,缺乏靈活性)堆:(對象、成員變量)引用類型的變量,其內存分配在堆上或者常量池(字符串常量、基本數據類型常量),需要通過new等方式來創建。堆內存主要作用是存放運行

35、時創建(new)的對象。(主要用于存放對象,存取速度慢,可以運行時動態分配內存,生存期不需要提前確定)2:類與對象類是對某一類事物的抽象描述,對象是現實中該類事物的個體。3:局部變量與成員變量區別區別一:定義的位置不同定義在類中的變量是成員變量定義在方法中或者語句里面的變量是局部變量區別二:在內存中的位置不同成員變量存儲在對內存的對象中局部變量存儲在棧內存的方法中區別三:聲明周期不同成員變量隨著對象的出現而出現在堆中,隨著對象的消失而從堆中消失局部變量隨著方法的運行而出現在棧中,隨著方法的彈棧而消失區別四:初始化不同成員變量因為在堆內存中,所有默認的初始化值局部變量沒有默認的初始化值,必須手動

36、的給其賦值才可以使用。區別五:作用域不同成員變量作用范圍是整個類局部變量作用范圍是方法內、語句內(for等)。4:private私有化為了安全權限,對象不能直接調用類的私有成員變量。private修飾的成員只能在當前類中訪問,其他類中無法直接訪問對私有的成員變量訪問的方式可以提供對應的 setXxx或者getXxx的方法。類中不需要對外提供的內容都私有化,包括屬性和方法。以后再自定義描述事物(類),屬性都私有化,并提供setXxx getXxx方法對其進行訪問。注意:私有僅僅是封裝的體現形式而已。class Person / 私有成員變量private int age;private Stri

37、ng name;/ 對外提供設置成員變量的方法public void setAge(int a) / 由于是設置成員變量的值,這里可以加入數據的驗證if (a < 0 | a > 130) System.out.println(a + "不符合年齡的數據范圍");return;age = a; / 對外提供訪問成員變量的方法public void getAge() return age;5:繼承extends、抽象類abstract、方法重寫格式:class 子類 extends 父類 當子父類中出現了同名成員變量時,在子類中若要訪問父類中的成員變量,必須使用關

38、鍵字super來完成。super用來表示當前對象中包含的父類對象空間的引用。在子類中,訪問父類中的成員變量格式:super.父類中的成員變量。同樣,當子父類中出現了相同的方法,需要在子類中訪問父類方法可以這樣:super.父類中的成員方法();方法重寫:子類中出現與父類一模一樣的方法時,會出現覆蓋操作,也稱為override重寫、復寫或者覆蓋。重寫需要注意的細節問題:子類方法重寫父類方法,必須要保證權限大于等于父類權限。(java有四大權限: public protected default private。default不能直接寫出來,不寫默認就是default)寫法上稍微注意:必須一模一樣

39、:方法的返回值類型 方法名 參數列表都要一樣。內容可以不一樣。子類不能用 靜態方法 重寫 父類的非靜態方法,子類不能用 非靜態方法 重寫 父類的靜態方法抽象類抽象方法:抽象類定義的格式:public abstract class 類名抽象方法定義的格式:public abstract 返回值類型 方法名(參數);抽象類的特點:1、抽象類和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類中。2、抽象類不可以直接創建對象,原因:調用抽象方法沒有意義。3、只有重寫(覆蓋override)了抽象類中所有的抽象方法后,其子類才可以創建對象。否則該子類還是一個抽象類。4:抽象類一定是個父類

40、5:抽象類中也可以不定義抽象方法6:抽象類也可以定義有的普通方法,它的子類的對象可以像調用普通的方法一樣調用它,而不需要子類去重寫該方法。6:抽象關鍵字abstract不可以和哪些關鍵字共存?(1)private:私有的方法子類是無法繼承到的,也不存在覆蓋,而abstract和private一起使用修飾方法,abstract既要子類去實現這個方法,而private修飾子類根本無法得到父類這個方法。互相矛盾。(2)final(3)static之所以繼承抽象類,更多的是在思想,是面對共性類型操作會更簡單。6:接口interface接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類

41、”。 接口只描述所應該具備的方法,并沒有具體實現,具體的實現由接口的實現類(相當于接口的子類)來完成。這樣將功能的定義與實現分離,優化了程序設計。接口定義格式:public interface 接口名 抽象方法1;抽象方法2;抽象方法3;使用interface代替了原來的class,其他步驟與定義類相同。接口中的方法均為公共訪問的抽象方法,不能定義普通方法接口中無法定義普通的成員變量,必須定義為常量接口中成員的特點:1、接口中可以定義變量,但是變量必須有固定的修飾符修飾,public static final 所以接口中的變量也稱之為常量,其值不能改變。2、接口中可以定義方法,方法也有固定的修

42、飾符,public abstract3、接口不可以創建對象。4、子類必須覆蓋掉接口中所有的抽象方法后,子類才可以實例化。否則子類是一個抽象類。類實現接口:在類實現接口后,該類就會將接口中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯。格式:class 類 implements 接口 重寫接口中方法接口的多實現:class Zi implements Fu1,Fu2/ 多實現。同時實現多個接口。public void show1()public void show2()類繼承類同時實現接口:public class Zi extends Fu implements Inter p

43、ublic void show1() 當一個類已經繼承了一個父類,它又需要擴展額外的功能,這時接口就派上用場了。接口的多繼承:接口和接口之間可以繼承,而且可以實現多繼承interface Zi extends Fu1,Fu2,Fu3void show3();接口和抽象類的區別:相同點:(1)都位于繼承的頂端,用于被其他類實現或繼承;(2)都不能直接實例化對象;(3)都包含抽象方法,其子類都必須覆寫這些抽象方法;區別:(1)抽象類為部分方法提供實現,避免子類重復實現這些方法,提高代碼重用性;接口只能包含抽象方法;(2)一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個接口;(接口彌補了J

44、ava的單繼承)(3)抽象類是這個事物中應該具備的內容, 繼承體系是一種 is.a關系(4)接口是這個事物中的額外內容,繼承體系是一種 like.a關系二者的選用:(1)優先選用接口,盡量少用抽象類;(2)需要定義子類的行為,又要為子類提供共性功能時才選用抽象類;接口的特點:(1)接口的出現擴展了功能。(2)接口其實就是暴漏出來的規則。(3)接口的出現降低了耦合性,即設備與設備之間實現了解耦。7:多態概念:現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。Java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引

45、用變量賦值,又可以給這個子類(實現類對象)的父類(接口)變量賦值。多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態。格式:普通類多態定義的格式:父類 變量名 = new 子類();抽象類多態定義的格式:抽象類 變量名 = new 抽象類子類();接口多態定義的格式:接口 變量名 = new 接口實現類();在多態中調用成員變量和成員方法的選擇:當子父類有相同的成員變量和成員方法時,只有非靜態成員方法調用的是子類的,而成員方法和靜態成員變量調用的全是=左邊父類自己的。(不管調用的是誰的,必須確保父類自己有,不然編譯錯誤無法運行。)多態的利弊:多態的弊端:父類(接口)引用不能使用子

46、類特有功能。為了解決這個弊端,我們需要向下轉型多態的好處:可以提高代碼的擴展性和可維護性多態的轉型分為向上轉型與向下轉型兩種:向上轉型:當有子類對象賦值給一個父類引用時,便是向上轉型,多態本身就是向上轉型的過程。使用格式:父類類型 變量名 = new 子類類型();如:Person p = new Student();向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用轉為子類引用,這個過程是向下轉型。如果是直接創建父類對象,是無法向下轉型的!使用格式:父類類型 變量名 = new 子類類型();子類類型 變量名 = (子類類型) 父類類型的變量;如:Student st

47、u = (Student) p; /變量p 實際上指向Student對象面向對象的三大特征作用:封裝:把對象的屬性與方法的實現細節隱藏,僅對外提供一些公共的訪問方式繼承:子類會自動擁有父類所有可繼承的屬性和方法。多態:配合繼承與方法重寫提高了代碼的復用性與擴展性;如果沒有方法重寫,則多態同樣沒有意義。8:構造方法什么是構造方法?從字面上理解即為構建創造時用的方法,即就是對象創建時要執行的方法。既然是對象創建時要執行的方法,那么只要在new對象時,知道其執行的構造方法是什么,就可以在執行這個方法的時候給對象進行屬性賦值。構造方法的格式:修飾符 構造方法名(參數列表)如:public Person

48、(String name,int age)=name;this.age=age;構造方法的特點:構造方法沒有返回值類型。也不需要寫返回值。因為它是為構建對象的,對象創建完,方法就執行結束。構造方法名稱必須和類型保持一致。構造方法沒有具體的返回值。構造方法是類默認就有的,如果自己沒有手動寫入,在編譯的時候會自動生成空參數的構造方法,如果自己手動寫入,那么編譯的時候就不會再自動寫入空參數的構造方法。一個類中可以有多個構造方法,多個構造方法是以重載的形式存在的構造方法是可以被private修飾的,作用:其他程序無法創建該類的對象構造方法不需要重寫無論如何,子類的所有構造方法都必須確

49、保直接、間接或者隱式調用到父類的構造方法,如果子類的構造方法內容第一行沒有this(),那么編譯的時候會自動在第一行加上super();調用父類構造方法。接口沒有構造方法(因為如果接口有構造方法,那么由于接口可以多繼承,super就指向不明了)我們在Person p=new Person();的時候就自動調用了類的構造方法Person();實際開發環境中,一般會提供兩套構造方法,一套有參數一套無參數構造方法和一般方法區別:構造方法在對象創建時就執行了,而且只執行一次。一般方法是在對象創建后,需要使用時才被對象調用,并可以被多次調用,構造方法不能像普通方法的調用方式一樣被調用。問題:有了構造方法

50、之后可以對對象的屬性進行初始化,那么還需要對應的set和get方法嗎?需要相應的set和get方法,因為對象在創建之后需要修改和訪問相應的屬性值時,在這時只能通過set或者get方法來操作。構造方法之間的相互調用:(1)this() 調用同一個類內的構造方法:在之前學習方法之間調用時,可以通過方法名進行調用。可是針對構造方法,無法通過構造方法名來相互調用。構造方法之間的調用,可以通過this()關鍵字來完成。構造方法調用格式:this(參數列表);程序會根據參數的個數和值類型自行判斷調用了哪個構造方法。注意:調用其他構造方法的語句必須定義在構造方法的第一行,原因是初始化動作要最先執行。(2)s

51、uper()調用父類的構造方法:super(參數列表);在創建子類對象時,父類的構造方法會先執行,因為子類中所有構造方法的第一行有默認的隱式super();語句。為什么子類對象創建都要訪問父類中的構造方法?因為子類繼承了父類的內容,所以創建對象時,必須要先看父類是如何對其內容進行初始化的。當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super(參數)語句,指定要訪問的父類有參數的構造方法。(3)this() super()一些細節問題:如果子類的構造方法第一行寫了this調用了本類其他構造方法,那么super調用父類的語句還有嗎?這時是沒有的,因為this()或者super(),只

52、能定義在構造方法的第一行,因為初始化動作要先執行。父類構造方法中是否有隱式的super呢?也是有的。記住:只要是構造方法默認第一行都是super();父類的父類是誰呢?super調用的到底是誰的構造方法呢?Java體系的設計,定義了一個所有對象的父類Object注意:類中的構造方法默認第一行都有隱式的super()語句,在訪問父類中的空參數構造方法。所以父類的構造方法既可以給自己的對象初始化,也可以給自己的子類對象初始化。如果默認的隱式super()語句在父類中沒有對應的構造方法,那么必須在構造方法中通過this或者super的形式明確要調用的構造方法。9:this、super(1)成員變量和

53、局部變量同名問題:當在方法中出現了局部變量和成員變量同名的時候,那么在方法中怎么區別局部變量成員變量呢?可以在變量名前面加上this.指向成員變量(不加this. 默認就近指向局部變量)this特點:this關鍵字,本類對象的引用this是在方法中使用的,哪個對象調用了該方法,那么,this就代表調用該方法的對象引用this什么時候存在的?當創建對象的時候,this存在的this的作用:用來區別同名的成員變量與局部變量(this.成員變量)public void setName(String name) = name;(2)super. :用于指向父類super.成員變量;

54、super.成員方法();10:static被static修飾的成員變量和成員方法獨立于該類的任何對象,屬于類本身。也就是說,它不依賴類特定的實例,被類的所有實例共享。也就是說,多個對象在訪問或修改static修飾的成員變量時,其中一個對象將static成員變量值進行了修改,其他對象中的static成員變量值跟著改變,即多個對象共享同一個static成員變量。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static可以在它的任何對象創建之前訪問,無需引用任何對象。class ClassA static int b; static void ex1() class ClassB void ex2 int i; i = ClassA.b; /這里通過類名訪問成員變量b ClassA.ex1; /這

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論