91精产品自偷自偷综合官网版下载-91精产品自偷自偷综合下-91精品-91精品91久久久-91精品成人-91精品成人www

網站建設資訊

NEWS

網站建設資訊

循序漸進學java-創新互聯

/-matool API查詢網站

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、虛擬空間、營銷軟件、網站建設、淮北網站維護、網站推廣。

重點內容:

第一階段:

變量:數據類型

運算符:二進制

控制結構:循環

數組排序和查找:數組

面向對象編程:成員方法,成員方法傳參機制,構造器

面向對象編程(中級):封裝,繼承,多態

第二階段:

面向對象編程(高級):類變量和類方法,接口,內部類

Exception:異常體系圖,異常處理

常用類:string,stringbuffer,stringbuilder

集合:

泛型:自定義泛型

線程:線程使用,Synchronized,互斥鎖

IO流:輸入流,輸出流

開發注意事項:

1一個源文件中最多只能有一個public類,其他類的個數不限

2如果源文件包含一個public類,則文件名必須按該類名命名

3.一個源文件中最多只能有一個public類。其它類的個數不限,也可以將main方法寫在非public類中,然后指定運行非public類,這樣入口方法就是非public的main方法

/r為回車:回車后光標會回到“韓”字前,然后“韓順”被“北京”代替

使用tab鍵,實現縮進,整體右移。Shift+tab整體左移。

相對路徑和絕對路徑:

加號的說明:

兩邊都是數值型的時候做加法運算,左右兩邊有一方為字符串時做拼接運算

基本數據類型:

+byte

使用long類型時,需要在變量后面加一個‘l’或“L“

例:long a = 10l;

Java默認浮點型常量為double型,因此在使用float型時需要在變量后面加上l或L

例:floa a = 1.1l;

浮點型可以寫成.123 等價于0.123

對于運算結果時小數的進行判斷時,應該用兩個數的差值的絕對值,在某個精度范圍內判斷。

不同的字符編碼表之間有所不同:

ASCII編碼表:一個字符一個字節

Unicode編碼表:字母和漢字都占用兩個字節(最多編碼2的16次方個字符)

utf-8:字母一個字節,漢字三個字節

等等。

布爾類型(boolean):賦值只能為true/false

在將精度(容量)大的數據類型轉換成精度(容量)小的數據類型時會報錯。

(Byte,short)和char之間不能相互轉換,也不能自動轉換

Byte,short,char之間或者同類型之間進行運算時,會轉換為int類型。

Boolean不參與類型的自動轉換。

字符串和其它數據類型之間的轉換:

其它類型轉字符串:+“”

字符串轉其它類型:

取模:a % b =a-a/b*a;

結果的正負值要取決于a的負號。

重點:

關系運算符的運算結果為布爾類型:即ture或false

短路與:&& 邏輯與:&

對于短路與,如果第一個條件為假,則后面的條件不再判斷,即不執行,效率高

對于邏輯與,如果第一個條件為假,后面的語句仍會執行

短路或:|| 邏輯或:|

效果同短路與和邏輯與

^:邏輯異或

復合賦值運算符會進行類型轉換

byte b = 3;

b +=2;等價于b = (byte)(b+2);

輸入的實現:

1引入java.util.Scanner,java.util下的Scanner類

2.創建一個類的對象,new創建對象

Scanner myScanner = new Scanner(System.in);

3.接收

String name = myScanner.next();輸入為字符串類型

int age = myScanner.nextInt();輸入為整形

double salary = myScanner.nextDouble();輸入為浮點型

四種進制:

二進制:以OB或Ob開頭

八進制:以數字0開頭

十六進制:以OX或Ox開頭 ,并且A-F不區分大小寫

按位與:&

按位或:|

按位異或:^

按位取反:~

位運算符:

>>算數左移:地位補0

<<算數右移:高位補符號位

>>>邏輯右移:地位溢出,高位補0

沒有邏輯左移

switch:返回類型必須是byte,short,int,char,enum,String類型之一。

case:值必須為常量或者常量表達式

break后面加標簽:可以表示終止某個循環,類似于goto

判斷兩個字符串:推薦第二種

如:String name;

Name.equals(“字符串內容”)或”字符串內容”.equals(name)

數組:

數組類型[ ] 數組名 ([ ])= new 數組類型[個數]

double[] score = new double[5];

double score[];

score = new double[5];

數組賦值:arr2是arr1的一份拷貝,當arr2改變時,arr1也改變

冒泡排序:優化:j初始值為1,增加count變量,若執行一次交換則count增加,若count在循環后為0則提前終止循環。

動態開辟二維數組空間:

面向對象(基礎):

對象中的整型放在堆區,字符串類型放在方法區中的常量池。

過程:

1先加載類信息(屬性和方法信息,只會加載一次)

2在堆中分配空間,進行默認初始化

3把地址賦給用類創建的變量,變量指向對象

4.進行指定初始化

方法重載:減輕記名麻煩

要求:方法名相同,形參的類型或個數或順序不同。

注意:返回類型不同不能構成重載。

可變參數,寫法(變量類型... 變量名)

可以接受0-多個參數,此時的變量名相當于數組名,可以用變量名.length獲得參數個數,用變量名[i]訪問每個變量。

細節:

可變參數的實參可以為數組,即直接傳入一個數組。

可以同時存在普通類型的參數和可變參數,但是可變參數必須在最后。

一個形參列表中只能出現一個可變參數。

作用域細節:

屬性和局部變量可以重名,訪問時遵循就近原則。如:

此時name的值為“king”

全局變量可以加修飾符

局部變量不能加修飾符

構造方法/構造器:完成對新對象的初始化,類似于構造函數

細節:

一個類可以定義多個構造器,即構造器重載

This指針:當構造方法中的形參的類的對象名字相同時,可以在對象前加this.來區分

在一個構造器中訪問另一個構造器時(本類),需要使用this(參數列表)

注意:需要將this語句放在第一條語句,只能在構造器中使用。

在需要獲取數組的大值時,為了避免傳入的數組為空值,或者數組地址為null時,需要加上判斷,當地址為null時,arr.length語句會報錯。

直接new 類名(),此方法只創建一個對象,而沒有返回,屬于匿名對象,匿名對象在使用后,就不能使用。

IDEA中的快捷鍵:

Ctrl+D 刪除當前行(自己配置)

Alt+/ 補全代碼

Ctrl+alt+l 格式化代碼

Alt+r 運行程序(自己配置)

將光標放在方法上,ctrl+B(或鼠標左鍵)可以定位到方法

模板快捷鍵:

Fori,輸出for循環

Sout,輸出System.out.println語句

創建不同的文件夾來保存類文件

方法如下:

命名規則:不能以數字開頭,不能是關鍵字或保留字。

命名規范:com.公司名.項目名.業務模塊名

如:

Arrays.sort(數組名),對數組進行升序排列。

Package的作用是聲明當前類所在的包,需要放在類(或者文件)的最上面。

類只能用public和默認來修飾。

類的成員方法和屬性可以用四個來修飾。

封裝:

可以隱藏實現細節

可以對數據進行驗證,保證安全合理

實現:

將屬性私有化

提供一個公共的set方法,用于修改私有屬性的值

提供一個公共的get方法,用于獲取私有屬性的值

構造器也同樣需要對數據進行檢測,因此可以把set方法寫入構造器中,實現對數據賦值的同時完成驗證。

繼承:

可以解決代碼復用。

基本語法:

class 子類(派生類) extends 父類(基類){}

細節:

子類必須調用父類的構造器,完成對父類的初始化

子類在調用構造器時,會自動調用父類的無參構造器,super語句(被隱藏)

若父類中無無參構造器,則需要用super語句指定構造器

super()和this()都只能放在構造器第一行,因此這兩個方法不能共存在一個構造器。

Object類時所有類的基類

父類構造器的調用不限于直接父類!將一直追溯到Object類,即父類的父類的無參構造器也會被調用等。

Java中是單繼承機制,即一個類只能繼承一個,可以用A繼承B,B繼承C,來實現A同時繼承B和C。

繼承訪問:

此時aa.name的值為大頭兒子,aa.hobby的值為旅游:以此方法在訪問變量時,會從當前類開始尋找,若當前類沒有,會依次往上尋找,直到找到為止或報錯。

此時aa.age會報錯,在Father類中有age但是沒有權限,不會再往上尋找。

Super的使用:(訪問父類)

super.語句,訪問父類屬性和方法,private屬性除外

訪問父類構造器

語句:super();

方法重寫(覆蓋):

實現條件:子類和父類的方法,參數,方法名均相同。此時子類的方法覆蓋父類的方法。

1返回類型可以相同,或者子類的返回類型是父類返回類型的子類。如:

String是Object的子類

2子類方法不能縮小父類方法的訪問權限。

錯誤示例:子類是protected,父類是public。

多態:

方法的多態:體現在方法的重載和重寫

對象的多態:

一個對象的編譯類型和運行類型可以不一致。

編譯類型看定義時 = 號的左邊,運行類型看 = 號的右邊

animal1的編譯類型時animal,運行類型時cat。

此時animal1.cry()相當于cat.cry(),因為animal的運行類型時cat。

重新指定后:

animal1的編譯類型依然是animal,運行類型變為dog。

細節:

1向上轉型:父類的引用指向了子類的對象。如上圖舉例。

2向下轉型:

animal可以通過強轉再次變成cat類型,因為animal本身在編譯后為cat類型,但是不能轉換成dog類型。

屬性沒有重寫之說!屬性的值看編譯類型,如下圖輸出結果為10.

Instaniof語句,用于判斷對象的運行類型是否是XX類型或其子類型。

動態綁定機制:

1當調用對象方法的時候,改方法會和該對象的內存地址/運行類型綁定

2當調用對象屬性時,沒有動態綁定機制,哪里聲明哪里使用

多態數組:如

Object類:

==運算符:判斷兩個值是否相等,或是兩個地址是否相同

equals是Object類中的方法,只能判斷引用類型地址

查看方法源碼:ctrl+左鍵

注意:

在Object子類中往往重寫改方法,用于判斷內容是否相等。

HashCode方法:

1提高具有哈希結構的容器的效率

2兩個引用,如果指向的是同一個對象,則哈希值肯定是一樣的,如果不是,則哈希值肯定不一樣。

3哈希值主要根據地址號來,但是不完全等價于地址

Tostring方法:

方法重寫后:把對象的屬性輸出,也可以自己修改

直接用sout輸出一個對象等價于sout 對象名.toString

Debug斷點調試:可以在調試過程中加斷點

F8逐行執行

F7跳入方法(查看方法)

Shift+F8跳出方法

F9直接跳到下一個斷點

零錢通:

日期顯示:

類變量:

用static修飾的變量,是類共有的變量,可以通過類名來訪問。同時需要遵守訪問修飾符的權限。

類方法和類變量相似。

細節:

類方法中不能使用和對象有關的關鍵字,如this和super。

類方法只能訪問靜態變量或靜態方法。

要在靜態方法中訪問,非靜態方法或變量的話,可以通過在靜態方法中new一個類,通過類訪問非靜態成員。

main方法:

由java虛擬機調用,而虛擬機所在為不同類,因此為public

Java虛擬機在執行main方法時,不必創建對象,所以為static

Java執行的程序,參數1,參數2,參數3,作為三個字符串數組傳入args數組中

代碼塊:

(修飾符(static)){

代碼

}(;)

代碼塊在構造器被調用時優先執行。

當有static修飾時,代碼塊隨著類的加載而執行,并且只會執行一次

普通代碼塊:在對象創建時執行(new)

類的加載:在創建對象實例時(new)

創建子類對象實例,父類也會被加載(父類先加載)

使用類的靜態成員時

創建對象時:在一個類中調用順序:

(1)使用new創建對象之后,靜態代碼塊和靜態屬性初始化調用的優先級一樣,哪個在前先調用哪個,如上圖先調用靜態代碼塊。多個靜態代碼塊和多個靜態屬性初始化的調用順序同樣。

(2)普通代碼塊和普通對象初始化,順序同上

(3)調用構造方法

構造器代碼順尋:

(1).父類構造器

(2)本類代碼塊

(3)本類構造器代碼

總結:先執行靜態(先父類后子類),再普通(先父類后子類)。

靜態代碼塊只能調用靜態成員,普通代碼塊可以調用任意成員。

單例模式-餓漢式:

1將構造器私有化

2在類的內部直接創建

3提供一個公共的static方法,返回對象

缺點:創建了對象但是沒有使用,造成資源浪費

單例模式-餓漢式:

1構造器私有化

2定義一個static靜態對象

3提供一個public的static方法,可以返回一個對象

4當用戶使用getInstacnce時才返回對象,再次使用時返回同一個對象。

final關鍵詞:

1可以用來修飾類:使類無法被繼承(不希望被其中方法被重寫)

2修飾方法,使方法無法被改寫

3修飾屬性,使屬性無法被修改

4修飾局部變量,使無法被修改

細節:

1被final修飾的變量,需要在進行初始化,如在定義時,通過構造器,通過代碼塊

如果還有static修飾,則不能在構造器中賦值(代碼塊為靜態)

2.final不能修飾構造器

3..final和static搭配使用,效率更高,不會導致類加載

4.包裝類都是final類型,如String

抽象類:

當父類的一些方法不能確定時,用abstra修飾該方法。

  1. 用abstra修飾的方法沒有方法體

  1. 抽象類不能被實例化(不能通過new的方式創建)

  1. 抽象類可以沒有抽象方法,有抽象方法的類必須是抽象類

  1. abstra只能修飾類和方法

  1. 抽象類本質還是類,可以有任意成員

  1. 當一個類繼承抽象類后,它本身必須是一個抽象類或者實現父類中所有的抽象方法

  1. 抽象方法不能被private,final,static關鍵詞修飾

接口:

interface 接口名{}

class 類名 implements 接口{

自己的屬性

自己的方法:

必須實現的接口的抽象方法

}

細節:

  1. 接口不能被實例化(即new)

  1. 接口中的方法都是public方法,抽象方法可以不用abstra修飾

  1. 一個普通類實現接口,必須將改接口所有方法實現,可以使用alt+enter

  1. 抽象類去實現接口時,可以不實現接口的抽象方法

  1. 一個類可以實現多個接口

  1. 接口中的屬性都是public static final 修飾符

  1. 接口可以繼承接口,不能繼承類

  1. 接口的修飾符只能是public或者默認,和類相同

接口可以解決單繼承的問題

內部類:

  1. 局部內部類:

即在類中的一個方法中的類,該類可以直接訪問外部類所有的成員(包括私有),不能使用修飾符(本質上是局部變量),但是可以用final修飾

作用域:僅僅在定義它的方法或代碼塊中。

外部類在方法中可以創建內部類對象,然后調用成員

當外部類和內部類的成員重名時,訪問時默認遵循就近原則,可以通過外部類.this.成員,來訪問

匿名內部類:

是一個類,同時是一個對象。是一個局部變量。

作用:簡化開發

匿名內部類的本質是一個匿名類繼承一個類或者實現一個接口

第二個演示表示匿名內部類是一個對象。

匿名內部類可以當作實參直接傳遞

創建內部成員類的方法:

2.

靜態內部類:

是類的成員,遵循相同的訪問規則。

枚舉:

將構造器私有化,刪掉set方法,將定義常量對象寫在前面。

細節:

創建枚舉對象時,自動繼承了Enum類。

成員必須放在前面,且用逗號隔開,最后一個用分號。

如果調用的構造器是無參時,“()”可以省略。

Enum的成員方法:

name()返回成員名稱

ordinal()返回成員序號(從0開始)

values()返回成員數組

可以通過增強for循環來實現遍歷

valueOf(“常量名”),在枚舉中尋找該常量名

常量1.compare To(常量2),返回得到常量1的編號減常量2的編號。

注解:

如:重寫方法上的@Override

只能用在方法上,可以刪掉,加上后編譯器會檢驗方法是否被重寫。

@Deprecated

可以修飾方法,類,字段,參數等到,用于做版本升級過渡

@SuppressWarnings

用于抑制警告,可以使用@ SuppressWarnings({“all“})抑制所有警告,也可以換成其它類型用于抑制相應類型的警告。

異常處理:

當程序出現一個異常后,可以讓程序繼續向下執行

使用ctrl+alt+t對可能出現異常的代碼塊進行異常處理。

細節:

當異常發生時,異常后面的代碼不再執行,直接跳入catch代碼塊中

如果異常沒有發生,則catch代碼塊不執行

finall代碼塊無論如何都會執行

可以沒有catch,只有try和finally,此時若發生異常,程序會在執行完finally后結束。

Finally代碼塊必須執行,雖然在catch中返回3

Throws:

Throws的對象可以是異常類型本身也可以是它的父類

子類在重寫父類的方法時,拋出的異常類型要么和父類一致,要么是父類所拋出異常的子類異常

包裝類:

精度提升,三元運算符是一個整體

包裝類的轉換

包裝類中的方法:

String類

String類有很多構造器:

用finally修飾的變量指向的地址不可改變。

當常量池中有變量時

String字符串特性:

該語句創建了兩個對象(若常量池中無haha)

說明:String時一個finally類,其內容不可改變。

編譯器會優化:判斷創建的常量池對象是否有引用的指向

等價于 Sting a = “helloabc”;

String 中的intern方法:

如果池中有“s1+s2“字符串,則返回該字符串的地址,若沒有則創建一個該字符串

常用方法:

示例:如果找不到,則返回-1;第一次出現的位置。可以找字符串

從下標6開始截取字符串

前閉后開截取字符串

示例:

注意:原字符串沒有被替換

StringBuffer:

直接父類:AbstractStringBuilder

父類中有屬性 char[] value 不是final類型

StringBuffer是一個finally類,不能被繼承

String轉StringBuffer

StringBuffer轉String

StringBuffer中的方法:

如果要對String進行大量修改,就不要使用String,考慮StringBuffer,如果是單線程同時考慮StringBuilder

Math方法:

round為四舍五入保留整數

Arrays類:

如果傳入的值為負數,則會報錯

System方法:

System.exit(0)

0表示程序正常退出

Src:原數組

0:從原數組開始拷貝的位置

Dest:目的數組

0:從目的數字開始拷貝的位置

處理大數和需要保持高精度計算時使用

Date:

Calendar:

Local:

集合:

ArrayList演示:

迭代器:

List接口:

  1. 集合中的元素有序,且可以重復

  1. 每個元素都有對應的索引

  1. 可以根據其索引號來獲取元素

ArraysList:

1.ArrayList基本等同于vector,效率高,但是不安全

2.ArrayList中維護了一個Object類型的數組

Transient表示該屬性不會被序列化

  1. 當創建ArrayList對象時,如果用的是無參構造器,則初始容量為0,第一次添加時數組擴容為10,如果需要再次擴容則擴容為當前容量的1.5倍。

  1. 如果使用指定大小的構造器,則在需要再次擴容則擴容為當前容量的1.5倍。

Vector:

  1. 底層依然是一個可變的數組

  1. 安全,但是效率不高

  1. 如果是無參,則在第一次添加后擴容為10,以后每次需要擴容為當前的2倍

ArrayList和LinkList都是不安全的

Set接口:

  1. 無序,沒有索引

  1. 不允許重復元素

雖然取出的順序不是添加的順序,但是順序是固定的。

可以用迭代器和增強for循環進行遍歷,不能用普通for循環,因為沒有get方法

HashSet底層是hashmap,是一個數組加鏈表的結構

  1. 再添加一個元素時,先得到hash值,然后轉換成索引值。

  1. 根據索引值存放到數組對應的位置

  1. 若對應的位置已有元素,則調用equals方法與元素進行比較,如果相同則放棄添加,如果不相同則添加到最后。

  1. 當一條鏈表的元素個數超過8以后,并且table的大小>=64,就會進行樹化。

  1. 當添加的元素個數大于閾值(當前數組大小的0.75倍,數組初始化大小為16)時,數組會進行擴容,擴大為原來的兩倍,同時閾值也會擴大為2倍。

Map:

  1. 保存具有映射關系的數據

  1. Key和value可以是任何引用類型的數據,會封裝到HashMap$Node對象中

  1. Key不允許重復,否則會覆蓋

  1. Key和value都可以為null,但是key只能有一個,value可以有多個

5.k-v最后是HashMap$Nodenode = newNode(hash,key,value,null)

6.為了方便程序員遍歷,還會創建EntrySet集合,該集合存放的元素的類型Entry,而一個Entry對象就有k,v,EntrySet>

7.entrySet中定義的類型是Map.Entry,但是實際上存放的還是HashMap$Node,因為Node實現了Map.Entry

8.當把HashMap$Node對象存放到EntrySet就方便我們的遍歷,因為Map.Entry提供了重要的方法:getKey和getValue

遍歷方式:

HashTable:

  1. 鍵和值都不能為空,否則會拋出異常

  1. 使用方法基本和HashMap一樣

  1. 每次擴容變為原容量的2倍+1,初始容量為11

Properties:

Treeset:有序,可以自定義

自定義比較器的作用:決定了數據的順序,同時決定了數據能否被添加進去的規則,如上圖:以長度升序排列字符串,如果有長度相同的情況則無法添加

Collection工具類:

下面的代碼會報錯,原因是在底層要嘗試把加進去的對象轉換成Comparable,對象沒有實現comparable接口,因此會有轉換類型的異常。

泛型:

1.為了約束數據類型

2.省去轉型的麻煩

約束加入的類型只能為Dog

不用再向下轉型

用來解決數據的安全性問題

作用:可以在類聲明時通過一個表示表示類中的某個屬性,或是某個方法的返回類型,或是參數類型

泛型使用細節:

1.泛型指向的數據類型要求是引用類型,不能是基本數據類型。如:

Int是基本數據類型

2.在指定泛型后,傳入的數據類型可以是其本身。也可以是其子類

3.使用形式:后面的括號里的內容可以省略,推薦這種寫法

4.如果沒有指定泛型,則默認為Object類型

自定義泛型:

1.泛型標識符可以有多個,一般都是大寫字母

2.普通成員(屬性,方法)可以使用泛型

3.使用泛型的數組不能初始化(因為數組在new時,不能確定類型,因此無法開辟空間)

4.靜態方法中不能使用泛型(靜態方法在類加載時,對象還未創建,無法完成初始化)

自定義泛型接口:

1.接口中,靜態成員不能使用泛型

2.泛型接口的類型,在繼承接口或實現接口時確定

3.沒有指定類型,默認為Object

泛型在方法中的使用:

1.泛型方法可以定義在普通類中,也可以定義在泛型類中

2.當泛型方法被調用時,類型會確定

3.泛型方法,可以使用類聲明的泛型類型,也可以使用自己聲明的泛型

4.注意泛型方法和方法使用了泛型的區別

形如:

R要在參數中使用,在調用方法時,會根據傳入的參數的類型,變化R的類型

Say1方法使用了泛型

Say2方法是泛型方法,同時也使用了泛型

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


本文標題:循序漸進學java-創新互聯
地址分享:http://www.yuzhuanjia.cn/article/csgipo.html
主站蜘蛛池模板: av中文字幕综合 | 99久久久无码欧洲精品免费 | 91精品婷婷国产综合久久 | 99色综合 | 午夜成午夜成年片在线观看bd | 一区二区三区在线观看国产 | 123成人站| 日韩av免费无禁网站 | 国产不卡的一区二区三区四区 | 99久久综合给久久精品 | 国产av无码精 | 丰满人妻久久中文字幕免费 | 99久久亚洲综合精品成人网 | av色综合网 | 午夜无码免费影院 | 午夜无遮挡| 国产av旡码专区亚洲av | 91精品亚洲 | 久久国产精品久久 | av片在线观看网站免费的 | 91蜜桃麻豆媒体成人影院 | 东京热无码av一区二区 | 午夜在线观看免费影院 | 99久久这里只精品99欧美 | av高清毛片免费 | h无码精品 | 91成人在线日本中文字幕免费 | www.一区二区三| 99国产精品污污 | 国产91久久麻豆黄片 | 一区国产精品丝瓜 | 91免费视频网址完整版手机在线观看 | 一区二区三区国产亚 | 国产v一级毛多内射禁果a | 午夜自产精品一区二区三区 | 99久久免费只有精品国产免费视频在线播放 | 91精品国产麻豆91久久久久久 | 一区小说区中文字幕 | 午夜精品蜜臀一区二区三区免费 | 91久久精品国产成人久久 | 福利片免费亚洲 |