摘要:關(guān)鍵字作用調(diào)用超類方法調(diào)用超類構(gòu)造器關(guān)鍵字作用引用隱式參數(shù)如調(diào)用該類的其他構(gòu)造器在覆蓋一個方法時,子類方法可見性不能低于超類方法阻止繼承類和方法目的確保它們不會在子類中改變語義。但是如果將一個類聲明為后面可以改變類變量的值了。
數(shù)據(jù)類型 整型
int 存儲要求:4byte 取值范圍:-2147483648 -- 2147483647(超過20億)
short 存儲要求:2byte 取值范圍:-32768 -- 32767
long 存儲要求:8byte 取值范圍:-9223372036854775808 -- 9223372036854775807
byte 存儲要求:1byte 取值范圍:-128 -- 127
java沒有任何無符號類型(unsigned)
float 存儲要求:4byte 取值范圍:大約+-3.40282347E+38F(有效位數(shù)為6~7位)
double 存儲要求:8byte 取值范圍:大約+-1.79769313486231570E+308(有效位數(shù)為15位)
double類型的精度是float的兩倍
float類型的數(shù)值有一個后綴F(如3.14F),沒有后綴的浮點數(shù)值(如3.14)默認(rèn)為double類型。當(dāng)然也可以在浮點數(shù)值后添加后綴D表示double類型
char類型char用于表示單個字符,通常用來表示字符常量
boolean類型值true,false,用來判定邏輯條件。 整型值和布爾值之間不能進(jìn)行轉(zhuǎn)換
變量變量名必須是一個以字母開頭的由字母或數(shù)字構(gòu)成的序列,但是+,@這樣的符號不能出現(xiàn)在變量名中,空格也不行。變量名的長度沒有限制。另外,不能將變量命名為java的保留字??梢栽谝恍兄新暶鞫鄠€變量,如int i,j;
變量初始化聲明一個變量后,必須用賦值語句對變量進(jìn)行顯式初始化,千萬不要使用未被初始化的變量,如
int a; System.out.println(a);//ERROR--variable not initialized常量
利用關(guān)鍵字final表示,這個變量只能被賦值一次,一旦被賦值,就不能再更改了。習(xí)慣上,常量名使用全大寫。
類常量用關(guān)鍵字static final表示
算是運(yùn)算符+,-,*,/分別表示加,減,乘,除。當(dāng)參與/的兩個數(shù)都是整數(shù)時,表示整數(shù)除法,否則表示浮點除法。%表示求余操作。
x+=4; x=x+4;
兩者等價。
數(shù)值類型間的轉(zhuǎn)換
實心箭頭表示無信息丟失的轉(zhuǎn)換,虛線箭頭表示可能有精度損失的轉(zhuǎn)換。
如果試圖將一個數(shù)值從一種類型強(qiáng)制轉(zhuǎn)換為另一種類型,而又超過了目標(biāo)類型的取值范圍,結(jié)果會截斷成一個完全不同的值
將一個字符串與一個非字符串的值進(jìn)行拼接(+)時,后者會被轉(zhuǎn)換成字符串,因為任何一個java對象都可以轉(zhuǎn)換成字符串.
控制流程 塊作用域塊是由一對花括號括起來的若干簡單的java語句,塊確定了變量的作用域,一個塊可以嵌套到另一個塊中。
public static void main(String[] args) { int n; ... { int k; ... }//變量k的作用域到這里為止 }
但是,不能在嵌套的兩個塊中聲明相同名字的變量
public static void main(String[] args) { int n; ... { int n; int k; ... }//這里不能再定義變量n了 }for循環(huán)
在循環(huán)中,檢測兩個浮點數(shù)是否相等需要小心
for(double x=0;x!=10;x+=0.1)...
在for語句中聲明的變量,作用域是for循環(huán)的整個循環(huán)體
for(int i=0;i<10;i++){ ... }//i的作用域到此為止
如果想在循環(huán)體外使用i,就要確保i在循環(huán)語句的前面且在外部聲明過
int i; for(i=0;i<10;i++){ ... } //循環(huán)體外面還可以使用i
可以在各自獨立的不同for循環(huán)中定義同名變量
for(int i=0;i<10;i++){ ... } ... for(int i=10;i<20;i++){ ... }switch語句
switch(choice){ case 1: ... break; ... default: ... break; }
case標(biāo)簽可以是
類型為char,byte,short或int,以及它們包裝類的常量表達(dá)式
枚舉常量
字符串字面量(從java7開始),如
switch(inputString){ case "yes": ... break; ... }大數(shù)值
如果基本的整數(shù)和浮點數(shù)精度不能滿足要求,可以使用java.math包中的BigInteger,BigDecimal.這兩個類可以處理包含任意長度數(shù)字序列的數(shù)值。BigInteger實現(xiàn)了任意精度的整數(shù)運(yùn)算,BigDecimal類實現(xiàn)了任意精度的浮點數(shù)運(yùn)算。
使用靜態(tài)的valueOf方法可以將普通的數(shù)值轉(zhuǎn)換為大數(shù)值。
BigInteger a=BigInteger.valueOf(100);
大數(shù)值間的運(yùn)算需要使用大數(shù)值類中的方法,而不能算術(shù)運(yùn)算符。
數(shù)組聲明數(shù)組int[] a;,實例化int[] a=new int[100];,這里創(chuàng)建了一個可以存儲100個整數(shù)的數(shù)組,里面的所有元素都還是初始化狀態(tài)(值為0)。
對象數(shù)組的元素則初始化為null,表示這些元素還沒存放任何對象
一旦創(chuàng)建了數(shù)組,就不能再改變它的大小(盡管可以改變每個數(shù)組元素)
數(shù)組其他初始化方式int[] a={1,2,...};,int[] a=new int[]{1,2,...};
按值調(diào)用:方法接收的是調(diào)用者提供的值
按引用調(diào)用:方法接收的是調(diào)用者提供的變量地址
java總是采用按值調(diào)用,也就是說,方法得到的是所有參數(shù)值的一個拷貝,結(jié)果就是方法不能修改傳遞給它的任何參數(shù)變量。
但是方法參數(shù)有兩種類型
1.基本數(shù)據(jù)類型(int,boolean,...)
2.對象引用
對象引用作為參數(shù)可以通過調(diào)用對象里的方法改變對象里的類變量,但是這并不說明java的方法參數(shù)是對象引用
public class Employer { String name=null; Employer(String name){ this.name=name; } static void swap(Employer a,Employer b){ Employer temp=a; a=b; b=temp; } void print(){ System.out.println(this.name); } public static void main(String[] args){ Employer employer1=new Employer("aaa"); Employer employer2=new Employer("bbb"); swap(employer1,employer2); employer1.print();//aaa employer2.print();//bbb } }
可以看到,盡管swap方法將兩個Emplyer實例交換,但實際上交換的僅僅是兩個對象引用的拷貝.
對象構(gòu)造 調(diào)用另一個構(gòu)造器如果構(gòu)造器的第一行語句形如this(...),這個構(gòu)造器將調(diào)用同一類的另一個構(gòu)造器。
public class TestCons { String name; public TestCons(){ this("default1"); //this.name="default"; } public TestCons(String name){ this.name=name; } public static void main(String[] args){ TestCons testCons=new TestCons(); System.out.println(testCons.name);//default1 } }初始化塊
在一個類的聲明中,可以包含多個代碼塊,只要構(gòu)造類的對象,這些塊就會被執(zhí)行。
具體參見一道面試題引發(fā)的思考:(1),文章說的很詳細(xì)。
java有自動的垃圾回收器,不需要人工回收內(nèi)存,所以java不支持析構(gòu)器。
finalize方法在垃圾回收器清除對象前調(diào)用。實際應(yīng)用中,不要依賴于使用finalize方法回收任何短缺資源,因為很難知道這個方法什么時候調(diào)用。
如果某個資源需要在使用完畢后立刻被關(guān)閉,就需要由人來管理。對象使用完,可以用close方法(如果有)完成相應(yīng)的清理操作。
只能使用(*)導(dǎo)入一個包,而不能使用import java.*或import java.*.*導(dǎo)入以java為前綴的所有包。
大多數(shù)時候,只導(dǎo)入所需的包就可以了。但發(fā)生命名沖突的時候,就需要變成具體的包名。例如
java.util和java.sql包里都有Date類
import java.util.*; import java.sql.*; ... Date today;//ERROR!--java.util.Date or java.sql.Date? ...靜態(tài)導(dǎo)入
import static java.lang.System.*; ... out.println("gwegwe");//不用加類名前綴 exit(0);
警告
編譯器在編譯源文件時,不檢查目錄結(jié)構(gòu)。
package com.theviper;,即使源文件沒有在目錄com heviper下,也可以編譯。如果它不依賴于其他包,就不會出現(xiàn)編譯錯誤。但是最終的程序?qū)o法運(yùn)行,因為虛擬機(jī)找不到類文件
使用super調(diào)用構(gòu)造器的語句必須是子類構(gòu)造器的第一條語句。
如果子類構(gòu)造器沒有顯式調(diào)用超類構(gòu)造器,則將自動調(diào)用超類默認(rèn)(沒有參數(shù))的構(gòu)造器。
如果子類沒有不帶參數(shù)的構(gòu)造器,并且在子類構(gòu)造器中沒有顯式調(diào)用超類的其他構(gòu)造器,則編譯器將報錯。
super關(guān)鍵字作用
調(diào)用超類方法
調(diào)用超類構(gòu)造器
this關(guān)鍵字作用
引用隱式參數(shù)(如this.name=name)
調(diào)用該類的其他構(gòu)造器
在覆蓋一個方法時,子類方法可見性不能低于超類方法
目的:確保它們不會在子類中改變語義。
類變量也可以被聲明為final,但是構(gòu)造對象后就不允許再改變類變量的值了。
public class Parent { final String name="aaa"; void setName(String name){ this.name=name; } public static void main(String[] args){ Parent parent=new Parent(); parent.setName("bbb");//The final field Parent.name cannot be assigned } }
但是如果將一個類聲明為final,后面可以改變類變量的值了。
public final class Parent { String name="aaa"; public static void main(String[] args){ Parent parent=new Parent(); parent.name="bbb"; System.out.println(parent.name);//bbb } }抽象類
類即使不含抽象方法,也可以聲明為抽象類
抽象類不能被實例化,但可以創(chuàng)建抽象類的具體子類對象
可以定義抽象類的對象變量,但只能引用非抽象子類的對象。
AbstractClass a=new AbstractConcrete();訪問修飾符
private:僅對本類可見
public:對所有類可見
protected:對本包和所有子類可見
默認(rèn)(不需要修飾符):對本包可見
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64657.html
摘要:如果需要收集參數(shù)化類型對象,只有使用警告這節(jié)討論,向參數(shù)可變的方法傳遞一個泛型類型的實例。異常不能拋出或捕獲泛型類的實例實際上,泛型類擴(kuò)展也是不合法的。 Object:所有類的超類 java中每個類都是由它擴(kuò)展而來,但是并不需要這樣寫:class Employee extends Object.如果沒有明確指出超類,Object類就被認(rèn)為是這個的超類??梢允褂肙bject類型的變量引用...
摘要:注本文內(nèi)容來深入面向?qū)ο竽J脚c實踐中節(jié)。面向?qū)ο笤O(shè)計與過程式編程面向?qū)ο笤O(shè)計和過程式編程有什么不同呢可能有些人認(rèn)為最大的不同在于面向?qū)ο缶幊讨邪瑢ο?。面向?qū)ο缶幊毯瓦^程式編程的一個核心區(qū)別是如何分配職責(zé)。 注:本文內(nèi)容來中6.2節(jié)。 6.2 面向?qū)ο笤O(shè)計與過程式編程 ??面向?qū)ο笤O(shè)計和過程式編程有什么不同呢?可能有些人認(rèn)為最大的不同在于面向?qū)ο缶幊讨邪瑢ο蟆J聦嵣?,這種說法不準(zhǔn)確。...
摘要:然而,這兩個方法都只是讀取對象狀態(tài),如果只是讀取操作,就可以允許線程并行,這樣讀取效率將會提高。分配線程執(zhí)行子任務(wù)執(zhí)行子任務(wù)獲得子任務(wù)進(jìn)行完成的結(jié)果 Lock Lock接口主要操作類是ReentrantLock,可以起到synchronized的作用,另外也提供額外的功能。用Lock重寫上一篇中的死鎖例子 import java.util.concurrent.locks.Lock; ...
摘要:一讓廣播明星黯然失色要建立頁面,需要創(chuàng)建用超文本標(biāo)記語言,編寫的文件,把它們放在一個服務(wù)器上二服務(wù)器能做什么服務(wù)器在互聯(lián)網(wǎng)上有一份全天候的工作。一、Web讓廣播明星黯然失色 要建立Web頁面,需要創(chuàng)建用超文本標(biāo)記語言(HyperText Markup Language,HTML)編寫的文件,把它們放在一個Web服務(wù)器上二、Web服務(wù)器能做什么? Web服務(wù)器在互聯(lián)網(wǎng)上有一份全天候的工...
摘要:包括元素的高度上下內(nèi)邊距上下邊框值,如果元素的的值為那么該值為。該值為元素的包含元素。最后,所有這些偏移量都是只讀的,而且每次訪問他們都需要重新計算。為了避免重復(fù)計算,可以將計算的值保存起來,以提高性能。 offsetHeight 包括元素的高度、上下內(nèi)邊距、上下邊框值,如果元素的style.display的值為none,那么該值為0。offsetWidth 包括元素的寬度、左...
閱讀 3161·2023-04-25 15:44
閱讀 1902·2019-08-30 13:11
閱讀 2879·2019-08-30 11:11
閱讀 3101·2019-08-29 17:21
閱讀 1334·2019-08-29 15:38
閱讀 986·2019-08-29 12:49
閱讀 1826·2019-08-28 18:19
閱讀 3249·2019-08-26 14:01