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