1. 程式人生 > >j2se學習中的一些零碎知識點1(內容有些零散)

j2se學習中的一些零碎知識點1(內容有些零散)

方法 封裝 對象 變量 繼承

1、java編譯和運行階段發生的事情,如下圖所示:

技術分享

- 編寫的java源文件,通過java編譯器編譯生成以.class結尾的字節碼文件(字節碼並不是二進制),生成的字節碼文件通過類裝載器裝載進java虛擬機中,再通過java虛擬機運行轉化成二進制文件與底層的操作系統交互,實現在硬件平臺上運行。(java的可移植性)


2、在安裝數據庫(如oracle和mysql)或者jdk軟件開發工具包等軟件時,安裝路徑上盡量避免不要有空格或者是中文。


3、windows操作系統中在命令行窗口中執行命令ipconfig,可以顯示本機的ip地址,原因是在系統變量path路徑上配置%SystemRoot%\system32;(%SystemRoot%在我的電腦中是指C:\Windows):

技術分享

- 如果沒有在環境變量中找到配置ipconfig命令對應的目錄,則會顯示以下內容:

技術分享

- 要想剛配置的環境變量中的命令在命令行中生效,需要退出當前的命令行窗口後重新打開。

- 需要註意Administrator的用戶變量只對Administrator用戶系統起作用,而系統變量對所有的用戶系統起作用,所以一般配置環境變量都是在用戶變量中配置PATH。

技術分享


4、javac命令後面跟的是路徑,絕對路徑或者相對路徑。

- java命令後面跟的是類名,java命令鍵入後會啟動java虛擬機,java虛擬機默認在硬盤當前路徑下查找對應類的.class文件,並將其裝載到虛擬機中。(可以在環境變量中配置CLASSPATH變量,配置後java虛擬機會在CLASSPATH指定的目錄下搜索.class文件,而不會在當前路徑下查找)


5、java類體中不能夠直接編寫java語句。

- 一個.java源文件中可以定義多個class,並且一個class類名生成一個.class文件。

- pulic的class的名字必須與文件名保持一致。(一個java源文件中只能有一個public的類名,源文件中也可以沒有pulib類)


6、標識符通俗的理解為在java源文件中凡是自己可以起名字的地方都是標識符,如類名、變量名、方法名、接口名。

- 標識符語法規則命名必須由字母、數字、下劃線或者美元符組合而成,並且不能夠以數字開始,關鍵字不能夠作為標識符,並且標識符嚴格區分大小寫,最好見名知意。(理論上長度不限制)

- java規範中類名的第一個字母大寫,後面每個單詞字母大寫。(遵循駝峰式命名規範)



7、關鍵字都是小寫命名,關鍵字就是sun公司定義開發java語言的使用的字符序列。

- java語言中的字面值,一眼看上去就知道多少的數據,字面值有數據類型,包括整型、浮點型、布爾型、字符型、字符串型,在內存中占用空間。(字面值就是內存中的一塊空間,這塊空間有類型、有值,而只用字面值內存無法得到重復利用)

- 字符字面值只能用單引號括起來,字符串字面值只能用雙引號括起來。("A"是一個字符串)

- int a; 含義是在內存中開辟一塊空間,這塊空間的類型是整型,給這塊空間起名為a。(單獨字面值在內存中只有值,無法給重復利用,而變量在內存中有名字,有類型,也有值,可重復利用)

- 變量可以重新賦值,但是不可以重復聲明。(在同一個域中,如short a = 10; char a = ‘a‘;不能通過編譯)

- java語言中的變量必須先聲明,再賦值,才能夠使用。

- int i1,i2,i3 = 456;聲明了三個變量i1,i2,i3,類型是int整型,其中i1,i2,i3是整型,i1,i2未初始化,i3初始化為456。

- 關於變量的作用域:有效範圍或者作用範圍,即出大括號就不認識。(在for循環中聲明的局部變量,出了大括號後就無效)

- 根據變量出現的位置可以分為兩種:局部變量(在方法體中聲明的變量叫做局部變量,包括形式參數列表)和成員變量(在類體中,方法之外聲明的變量統稱為成員變量)


8、八種數據類型的取值範圍:

技術分享

- 一個字節等於八位,八位是指八個二進制位,十進制數-1在java語言中使用二進制表示10000001,1表示為00000001。(在java語言中首位為符號位,所以八位二進制最大表示為01111111,即為十進制的127)

- 在java中boolean值只能夠用true和false表示,沒有其他值,不能夠為0和1。

- 十進制轉換成二進制:除二取余,逆序輸出。

- 從字符到計算機的二進制位稱之為解碼,從計算機的二進制位到字符稱之為編碼。例如,‘a‘對應十進制數97,‘A‘表示十進制數65,‘0‘表示十進制48。

- 字符編碼方式是現實世界中的文字和計算機的表示方式的轉換規則。

技術分享

- java語言中的char字符類型采用unicode字符編碼方式,使用utf-16實現,,底層占用兩個字節。

- 字符如果采用的編碼和解碼不一致的話,會出現亂碼問題。(漢字占用兩個字節,所以java中的char可以表示漢字)

- “\”斜線在java語言中有轉義功能。可以將普通t字符,轉換成“制表符”;可以將普通n字符,轉換成“換行符”;

- char c = ‘\‘‘;表示一個普通的“單引號”字符,char c = ‘\\‘表示一個普通的“斜線”,使用“斜線”來表示java中有特殊含義的字符。char類型表示的默認值為‘\u0000‘,表示一個unicode編碼。

- Java語言中有三種方式表示整型值:0x表示以十六進制值,0表示以八進制值以及十進制。

- Java語言中整型值默認為int類型,int i4 = 100;將一個int類型的100字面值賦值給i4變量。long l1= 123;將一個int類型的123字面值賦值給long類型的l1,int類型容量小於long類型,程序會進行自動類型轉換。(123L字面值是long類型數據,L為大寫)

- long l1= 100L; int i1 = l1;將long類型轉換成int類型,不能夠自動類型轉換,需要強制類型轉換。(大容量向小容量轉換,需要強制類型轉換,程序在運行階段可能損失精度,所以一定要謹慎使用)

- byte b = 127;編譯通過,byte b = 128;編譯不能通過。即如果這個整數沒有超出byte的取值範圍,可以直接將這個整數賦值給byte類型。

- short s = 32767;編譯通過,short s = 32768;編譯不能通過。即如果整數本身沒有超出short的取值範圍,可以將這個整數直接賦值給short。(也包括char,char c = 65535;編譯通過,char c = 65536;編譯不能通過)

- 浮點型字面值默認是double類型,float f = 3.2;編譯不能夠通過,可以通過強制類型轉換或者在數值後加F。(浮點型加F表示float類型)

- boolean類型的數據主要用在邏輯運算和條件控制語句中。(boolean b = 1;編譯不能通過,賦值只能是false或者true)

- 在java中基本類型可以相互轉換,boolean類型比較特殊不可以轉換成其他類型。

- 默認轉換:容量小的類型會默認轉換成容量大的類型,即:byte --> short(char) --> int --> long --> float --> double。byte、short、char之間做混合運算的時候,各自轉換成int後再做運算。(編譯階段只會檢查語法,運算階段才會進行計算。byte b1 = 10; short s = 20; byte b2 = b1 + s1;編譯不能通過,原因是編譯階段檢查語法,b1 + s1使得byte類型的b1和short類型的s1都轉換成int,結果為int類型【此時沒有計算出相加後字面值】而int類型不能夠自動轉換成byte類型,運行階段才會計算出b1 + s1的字面值30)

- 在多種類型混合運算過程中,首先先將所有數據轉換成容量最大的那種,再運算。

- int f = 10/3;可以通過編譯,因為字面值整數10和3都是int類型,相除後的結果為int類型。

- long g = 10;int h = g/3;不能通過編譯,因為在編譯階段檢查語法,編輯階段只知道g/3結果為long類型,而long類型轉換成int類型需要強制類型轉換(並不會計算出g/3的字面值3,計算值是在運行階段所做的事情)


9、int m = 10;int e = m++;變量m值為11,變量e為10。(需要考慮=和++的優先級,如果++在變量後,=運算符優先級更高些)

- int z = 10;System.out.println(z++);輸出結果為10,z++可以理解為z = z++,先賦值後自增1。

- 關系運算符的運算結果一定是boolean類型。(不知道運算符的優先級就加括號)

- 布爾運算符(&邏輯與、|邏輯或、!邏輯非、^邏輯異或、&&短路與、||短路或)兩邊的算子必須是布爾類型,整個表達式的運算結果也是一個布爾類型。

- true^false -> true,false^true -> true,true^true -> false,false^false -> true

- int a = 10;int b = 10;System.out.println(a < b & a++ >=b);System.out.println(a);運行後a為11,說明邏輯與、邏輯或不會發生短路現象。

- &&短路與、||短路或的短路現象是後一個表達式可能不執行。(當&&短路與前一個表達式為false時,後面的表達式不執行,因為結果已經能夠判斷)

- 基本賦值運算符(=)和擴展賦值運算符(*=、+=、-=、/=、%=)的區別:byte i = 10;i = i + 10;編譯無法通過,編譯期運算結果是int類型(運行期時才計算結果值,編譯器只判斷類型),前邊的變量是byte類型。i += 10;編譯可以通過,擴展運算符不改變運算結果類型,可能會損失精度。i += 1000;編譯可以通過,但是嚴重損失精度。


10、if語句只要一個分支執行,則整個if語句結束。

- String不是基本類型數據,是引用類型。

- switch語句中的break和default語句可以沒有。(如果沒有break語句,則發生case穿透現象)

- switch後面的括號中可以填寫byte/short/char類型,因為可以自動轉換成int類型。(switch語句括號如果放置數值,只能放置int類型數據)

- for循環語句:for(表達式1;表達式2;表達式3){java語句}表達式1是初始化表達式,最先執行,只執行一次;表達式2是boolean類型的條件判斷表達式;表達式3為操作語句。

- while循環語句的循環體中循環次數可能為0次,do...while...循環至少執行1次。

- break語句:可以用在switch語句中,結束分支語句;也可以出現在循環語句中,默認情況下結束離他最近的一個循環。(return語句結束方法,是方法級別的,break語句是循環級別,結束循環)

- continue語句可以用來結束當前最近循環中的本次循環,直接進入下一次循環繼續執行。

- 可以通過標簽名使得break指定結束某個循環,而不是結束最近循環。(continue語句同理)


11、加有static的方法,調用的時候必須采用“類名.”的方式調用。(方法就是一段代碼片段,這個片段可以完成特定的功能,並可以重復利用)

- 定義方法的語法:[方法的修飾符列表] 方法的返回值類型 方法名(方法的形式參數列表){java語句;},其中方法的修飾符列表是可選項;方法的返回值類型,可以是java語言中的任意一種數據類型(基本數據類型或者引用數據類型);如果該方法執行結束之後,並沒有任何返回值,那麽定義方法的時候,返回值類型為void;方法的形式參數列表,可以有參數,也可以沒有參數,如果有多個參數的話,使用“逗號”隔開。(形式參數為局部變量,參數的名字是隨意的,只要是合法的標識符即可)

- 如果一個方法的返回值類型不是void,那麽方法體中的必須使用return語句返回數據,return語句一旦執行,則方法結束。(返回值的類型和return語句的類型需對應。如果返回值類型為void,則return;語句可選)

- 方法調用時傳遞的參數被成為實參,實參列表中的實參的類型和個數需與形式參數列表的形參相對應。

- static方法如果在當前類中,調用這個static方法可以省略類名。

- 使用return;來結束方法返回值類型為void方法,以此來結束方法。(return;

System.out.printlin("abc");不能通過編譯,錯誤顯示為無法顯示的語句)

- 方法的重載(方法名相同,參數列表不同【個數不同、順序不同、類型不同都可以】,方法重載與返回值類型、修飾列表無關)的優點:方便程序員記憶,代碼美觀。(方法重載發生在同一個類中),System.out是PrintStream類型,println方法構成了方法的重載。

- 棧(stack)存儲數據的特點:後進先出。將元素(元素也叫做棧幀)放入棧中叫做壓棧或者入棧(push),將元素從棧中取出叫做出棧或者彈棧(pop)。第一個元素叫做棧頂元素,最後一個元素叫做棧底元素。

技術分享

- 方法的執行原理:方法在調用的時候,才會給該方法在內存中分配空間。如果這個方法只是定義沒有調用,則不會在內存中分配空間。(方法在調用的時候,在“棧”中分配空間,JVM內存中有一塊內存是棧內存,所以方法調用其實就是“壓棧”,方法調用結束其實就是“彈棧”。棧空代表程序結束。)

- 方法的遞歸調用:方法自身調用自身。(可能會出現java.lang.StackOverflowError,能不用遞歸就不用,遞歸效率並不高。)


12、面向過程和面向對象的區別:采用面向過程必須了解整個過程,每個步驟都有因果關系,每個因果關系都構成了一個步驟,多個步驟就構成了一個系統,因為存在因果關系每個步驟很難以分離,當任何一步出現問題,將會影響到所有的系統。(面向過程的應用程序代碼之間的耦合度非常強);面向對象將現實世界分割成不同的單元(對象),實現各個對象,如果要完成某個特定功能,只需要各個對象組合即可。

- 面向對象的三大特性:封裝、繼承、多態。類是對具有共性事物的抽象描述,是在概念上的一個定義。(類是引用數據類型,可以認為是一個模版)對象是具體存在的個體,也叫做實例,就是一個類的具體化或者實例化。

- 面向對象更符合人的思維模式,更容易的分析現實世界,從軟件開發的生命周期來看,基於面向對象可以分為三個階段:OOA(面向對象的分析)、OOD(面向對象的設計)、OOP(面向對象的編程,Java就是一個純面向對象的語言)

- UML是指統一建模語言, 是一種圖形語言。(類 = 屬性 + 方法,屬性屬於對象的狀態,方法屬於對象的動作。需要註意,成員變量(又稱為實例變量)是對象級別的,必須由對象才能夠訪問,必須使用“引用.”的方式進行訪問成員變量,不能使用類直接訪問。成員變量如果沒有手動賦值,系統會默認賦值。(靜態變量使用類名來直接訪問))

- java中所有new出來的數據統一存儲在堆(heap)中,程序員無法對堆中的數據直接操作,只能通過對堆中的內存地址間接操作。(堆中的對象的內存地址可以賦值給局部變量,這個局部變量也稱為引用,通過局部變量進行操作)

- 局部變量是在方法中定義的變量,方法的參數,方法的返回值,局部變量使用前必須初始化,而成員變量會默認初始化,初始化的值為該類型的默認值。系統默認值:byte、short、int、long -> 0,float,double -> 0.0,boolean ->false,char -> \u0000,引用數據類型 -> null。

- 一個類可以創建N個對象,成員變量只屬於當前的對象(只屬於對象,不屬於類),只有通過對象才能夠訪問成員變量,通過類不能直接訪問成員變量。


13、面向對象的封裝性值得是屬性私有化和對外提供公開的setter and getter方法:對成員變量添加private修飾,表明只能在本類中訪問。可以對外提供兩個公開的方法供外部設置和讀取實例域。(setter、getter方法可以進行安全控制,此類方法是成員方法或者說是實例方法,而非靜態方法,成員方法必須使用“引用.”的方式訪問)

- 構造方法語法:[修飾符列表] 構造方法名(){方法體;},構造方法的方法名必須和類名一致。構造函數使用 (new 構造方法名(實參))語法來創建對象,在堆中開辟空間存儲對象。(也可以初始化成員變量,也可以說是給成員變量賦值)

- 如果一個類沒有提供任何構造方法,系統默認提供無參數的構造方法;如果一個類已經手動的提供了構造方法,那麽系統不會再提供任何構造方法。

在類通過類裝載器加載進java虛擬機時,不會給成員變量賦值。只有在調用構造方法的時候,才會給成員變量賦值。(可以認為在構造函數中首先給對象中成員變量賦默認值)

- Java虛擬機管理的內存有三個區:堆區、棧區和方法區。堆區:存放new出來的對象,此對象由垃圾回收機制收集,垃圾收集器,針對的就是堆區。棧區:每調用一個方法,會創建一個棧幀,存放局部變量。方法區:類的所有信息,包括所有的方法,靜態變量和常量。

技術分享

- User u = new User();(u是引用,保存內存地址指向堆中的對象)u = null;(程序執行到這,u不再指向堆中的對象,對象變成了垃圾。)System.out.println(u.name);(編譯可以通過,語法上沒有錯誤,使用一個空的引用去訪問成員(成員變量或者成員方法),會發生空指針異常,即java.lang.NullPointerException。)

- 程序在執行過程中,參數的傳遞問題:以下程序傳遞的數據是基本數據類型:(局部變量只有在方法中有效)

技術分享

- 程序在執行過程中,參數的傳遞問題:以下程序傳遞的數據是引用數據類型:(方法中傳遞的參數是引用,即傳遞的是內存地址,指向的是同一個對象)

技術分享

- java中只用值傳遞,沒有引用傳遞。

- this關鍵字:this是一個引用類型,在堆中的每一個java對象上都有this,this保存內存地址指向自身。

- this能用在那些地方?this可以用在成員方法中。this可以用在構造方法中。(this用在成員方法中,誰調用了這個成員方法,this就代表誰。this.可以省略,可以表示對象中的成員變量或者成員方法,可以用於區分成員變量和局部變量)

- this不能用在靜態方法中:靜態方法的執行根本不需要java對象的存在,直接使用(類名.)的方法訪問。而this代表的是當前對象,所以靜態方法中根本沒有this。(編譯期就會報錯,報錯內容為:靜態方法上下文中不能夠引用非靜態變量this)

- this可以用在構造方法中,通過一個構造方法調用另一個構造方法,目的在於代碼重用。語法:this(實參)。(只能出現在構造方法的第一行中)










本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1968964

j2se學習中的一些零碎知識點1(內容有些零散)