欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章帶你復(fù)習(xí)java知識(shí)點(diǎn)

 更新時(shí)間:2021年06月28日 17:22:06   作者:中二病沒(méi)有蛀牙  
以下簡(jiǎn)單介紹了下我對(duì)于這些java基本知識(shí)點(diǎn)和技術(shù)點(diǎn)的一些看法和心得,這些內(nèi)容都源自于我這些年來(lái)使用java的一些總結(jié),希望能夠給你帶來(lái)幫助

JDK JRE JVM

JDK:

Java標(biāo)準(zhǔn)開(kāi)發(fā)包,它提供了編譯、運(yùn)行Java程序所需的各種工具和資源,包括Java編譯器、Java運(yùn)行時(shí)環(huán)境,以及常用的Java類(lèi)庫(kù)等。

JRE:

Java運(yùn)⾏環(huán)境,⽤于解釋執(zhí)⾏Java的字節(jié)碼⽂件。

JVM

Java虛擬機(jī),是JRE的一部分。負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件,是可運(yùn)⾏java字節(jié)碼文件的虛擬計(jì)算機(jī)

區(qū)別聯(lián)系:(問(wèn)答題會(huì)考可能)

JDK包含JRE,JDK 和 JRE 中都包含 JVM。JDK出了包含jre還包含⼀些常⽤開(kāi)發(fā)⼯具和基礎(chǔ)類(lèi)庫(kù)

JDK用于開(kāi)發(fā),JRE 用于運(yùn)⾏java程序

JVM 是 java 編程語(yǔ)言的核心并且具有平臺(tái)獨(dú)立性(不同的平臺(tái)有不同的VM)

JVM的好處:一次編譯,隨處運(yùn)行

javac: 編譯 java源文件->class字節(jié)碼文件(0,1) java: 解釋

基本語(yǔ)法

程序結(jié)構(gòu)

一個(gè)源文件中最多只能有一個(gè)public類(lèi),其他類(lèi)的個(gè)數(shù)不限,如果源文件中包含一個(gè)public類(lèi),它必須按該類(lèi)名命名

Java應(yīng)用程序的執(zhí)行入口時(shí)main()方法。它有固定的書(shū)寫(xiě)格式:

public static void main(String args[]){…..}

在這里插入圖片描述

命名規(guī)范

包名,包名是全小寫(xiě)的名詞,中間可以由點(diǎn)分隔開(kāi),例如:java.awt.event;

類(lèi)名,首字母大寫(xiě),通常由多個(gè)單詞合成一個(gè)類(lèi)名,要求每個(gè)單詞的首字母也要大寫(xiě),例如class WelcomeToJava;

接口名,命名規(guī)則與類(lèi)名相同,例如interface Collection;

方法名,往往由多個(gè)單詞合成,第一個(gè)單詞通常為動(dòng)詞,首字母小寫(xiě),中間的每個(gè)單詞的首字母都要大寫(xiě),例如:balanceAccount, isButtonPressed;

變量名,全小寫(xiě),一般為名詞,例如:length;

常量名,基本數(shù)據(jù)類(lèi)型的常量名為全大寫(xiě),如果是由多個(gè)單詞構(gòu)成,可以用下劃線(xiàn)隔開(kāi),例如:int YEAR, int WEEK_OF_MONTH;如果是對(duì)象類(lèi)型的常量,則是大小寫(xiě)混合,由大寫(xiě)字母把單詞隔開(kāi)。

標(biāo)識(shí)符

在這里插入圖片描述

不能以數(shù)字開(kāi)頭。

不能是Java中的關(guān)鍵字。

標(biāo)識(shí)符不能是true,flase和null(盡管這三個(gè)不是關(guān)鍵字)

關(guān)鍵字

在這里插入圖片描述

在這里插入圖片描述

變量和常量

只有public, protected, private, static, final, transient 和 volatile 能修飾成員變量

常量

JAVA常量就是在程序中固定不變的值,是不能改變的數(shù)據(jù)。例如數(shù)字1、字符“a”、浮點(diǎn)數(shù)3.2等。在Java中,常量包括整型常量、浮點(diǎn)數(shù)常量、布爾常量、字符常量等。

使用 final 關(guān)鍵字來(lái)定義一個(gè)常量,常量一旦初始化就不可以被修改。

變量

變量是程序中最基本的存儲(chǔ)單元,其要素包括變量名,變量類(lèi)型和作用域

每一個(gè)變量使用前必須要先聲明,然后必須進(jìn)行賦值,才能使用

分類(lèi):

按聲明位置

局部變量:方法或語(yǔ)句塊內(nèi)部定義的變量

成員變量:方法外部、類(lèi)的內(nèi)部定義的變量

在類(lèi)體內(nèi)定義的變量稱(chēng)為成員變量,它的作⽤域是整個(gè)類(lèi)在⼀個(gè)⽅法或⽅法內(nèi)代碼塊中定義的變量稱(chēng)為局部變量

注意

類(lèi)外面(與類(lèi)對(duì)應(yīng)的大括號(hào)外面)不能有變量的聲明方法體內(nèi)部聲明的變量(包括形參)稱(chēng)為局部變量:方法體內(nèi)部是指與方法對(duì)應(yīng)的大括號(hào)內(nèi)部在方法體外,類(lèi)體內(nèi)聲明的變量稱(chēng)為成員變量

按所屬類(lèi)型

基本數(shù)據(jù)類(lèi)型變量(8種)引用數(shù)據(jù)類(lèi)型變量

在這里插入圖片描述

在這里插入圖片描述

數(shù)據(jù)類(lèi)型

在這里插入圖片描述

boolean類(lèi)型數(shù)據(jù)只允許取值true或false,不可以0或非0的整數(shù)替代true和false,這點(diǎn)和C語(yǔ)言不通

Java字符采用Unicode編碼,每個(gè)字符占兩個(gè)字節(jié),因而可用十六進(jìn)制編碼形式表示

java中的char一定是無(wú)符號(hào)的,不允許用unsigned char修飾

基本類(lèi)型轉(zhuǎn)換:

boolean類(lèi)型不可以轉(zhuǎn)換為其他的數(shù)據(jù)類(lèi)型

整型、字符型、浮點(diǎn)型的數(shù)據(jù)在混合運(yùn)算中相互轉(zhuǎn)換,轉(zhuǎn)換規(guī)則:

容量小的類(lèi)型自動(dòng)轉(zhuǎn)換為容量大的數(shù)據(jù)類(lèi)型,數(shù)據(jù)類(lèi)型按照容量大小排序?yàn)椋?/p>

byte,short,char->int,->long->float->double

byte,short,char之間不會(huì)互相轉(zhuǎn)換,三者在計(jì)算時(shí)首先轉(zhuǎn)換為int型

容量大的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為容量小的數(shù)據(jù)類(lèi)型時(shí),要加上強(qiáng)制轉(zhuǎn)換符,但可能造成精度降低或溢出

有多種類(lèi)型的數(shù)據(jù)混合運(yùn)算時(shí),系統(tǒng)首先自動(dòng)將所有數(shù)據(jù)類(lèi)型轉(zhuǎn)換為容量最大的那一種數(shù)據(jù)類(lèi)型,然后在進(jìn)行計(jì)算

實(shí)數(shù)常量默認(rèn)為double,整數(shù)常量默認(rèn)為int

數(shù)組

數(shù)組初始化

動(dòng)態(tài)初始化

數(shù)組定義與為數(shù)組元素分配空間和賦值的操作分開(kāi)進(jìn)行

靜態(tài)初始化

在定義數(shù)組的同時(shí)為數(shù)組元素分配空間并賦值

在這里插入圖片描述

Java語(yǔ)言中聲明數(shù)組時(shí)不能指定其長(zhǎng)度

每個(gè)數(shù)組都有一個(gè)屬性length指明它的長(zhǎng)度

a.length的值為數(shù)組a的長(zhǎng)度(元素個(gè)數(shù))

輸入輸出

輸⼊
 Scanner s=new Scanner(System.in);
 s.nextInt()
 s.nextLine()
 s.nextFloat()
 scanner.next()
 輸出
System.out.println("XX")

運(yùn)算符與語(yǔ)句

運(yùn)算符

左移<<

"a<<b; "將二進(jìn)制形式的a逐位左移b位,最低位空出的b位補(bǔ)0

帶符號(hào)右移

"a>>b; "將二進(jìn)制形式的a逐位右移b位,最高位空出的b位補(bǔ)原來(lái)的符號(hào)位

無(wú)符號(hào)右移

"a>>>b;"將二進(jìn)制形式的a逐位右移b位,最高位空出的b位補(bǔ)0

優(yōu)先順序:

在這里插入圖片描述

語(yǔ)句

條件分支語(yǔ)句

1.if

else if

else

2.switch

switch(XX){ //java特有 枚舉 short byte C語(yǔ)⾔:字符,int
case 1 : XX ;break;
case 2: XX ;break;
default(可有可⽆): XX break;
}

switch表達(dá)式的返回值必須是下述幾種類(lèi)型之一:int, byte, char, short

case子句中的值必須是常量,且所有case子句中的值應(yīng)是不同的;

循環(huán)語(yǔ)句

  1. while
  2. for
  3. do while
  4. for each

修飾符

訪(fǎng)問(wèn)控制修飾符

Java中,可以使用訪(fǎng)問(wèn)控制符來(lái)保護(hù)對(duì)類(lèi)、變量、方法和構(gòu)造方法的訪(fǎng)問(wèn)。Java 支持 4 種不同的訪(fǎng)問(wèn)權(quán)限。

default (即默認(rèn),什么也不寫(xiě)): 在同一包內(nèi)可見(jiàn),不使用任何修飾符。使用對(duì)象:類(lèi)、接口、變量、方法。

private : 在同一類(lèi)內(nèi)可見(jiàn)。使用對(duì)象:變量、方法。 注意:不能修飾類(lèi)(外部類(lèi))

public : 對(duì)所有類(lèi)可見(jiàn)。使用對(duì)象:類(lèi)、接口、變量、方法

protected : 對(duì)同一包內(nèi)的類(lèi)和所有子類(lèi)可見(jiàn)。使用對(duì)象:變量、方法。 注意:不能修飾類(lèi)(外部類(lèi))。

非訪(fǎng)問(wèn)修飾符

為了實(shí)現(xiàn)一些其他的功能,Java 也提供了許多非訪(fǎng)問(wèn)修飾符。

static 修飾符,用來(lái)修飾類(lèi)方法和類(lèi)變量。

final 修飾符,用來(lái)修飾類(lèi)、方法和變量,final 修飾的類(lèi)不能夠被繼承,修飾的方法不能被繼承類(lèi)重新定義,修飾的變量為常量,是不可修改的。

abstract 修飾符,用來(lái)創(chuàng)建抽象類(lèi)和抽象方法。

synchronized 和 volatile 修飾符,主要用于線(xiàn)程的編程。

synchronized 關(guān)鍵字聲明的方法同一時(shí)間只能被一個(gè)線(xiàn)程訪(fǎng)問(wèn)。synchronized 修飾符可以應(yīng)用于四個(gè)訪(fǎng)問(wèn)修飾符。

volatile 修飾符

volatile 修飾的成員變量在每次被線(xiàn)程訪(fǎng)問(wèn)時(shí),都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值

類(lèi)與對(duì)象

面對(duì)對(duì)象三⼤特征:封裝、繼承、多態(tài)

1.封裝

通過(guò) private、default 、protected、 public 關(guān)鍵字實(shí)現(xiàn)屬性或⽅法的封裝, 僅對(duì)外提供公共訪(fǎng)問(wèn)⽅式。 “⾼內(nèi)聚,低耦合”

2.繼承

實(shí)現(xiàn)數(shù)據(jù)項(xiàng)和⽅法的隱藏

實(shí)現(xiàn)隱藏隔離,允許外部對(duì)類(lèi)做有限的訪(fǎng)問(wèn),開(kāi)發(fā)者可以⾃由的改變類(lèi)的內(nèi)部實(shí)現(xiàn)

提⾼了代碼的重⽤性

3.多態(tài)

⼀個(gè)對(duì)象變量可以指向多種實(shí)際類(lèi)型對(duì)象的現(xiàn)象被稱(chēng)為“多態(tài)”

三個(gè)必要條件:繼承、⽅法的重寫(xiě)、⽗類(lèi)⼸|⽤指向⼦類(lèi)對(duì)象

多態(tài)的好處:

提⾼了代碼的維護(hù)性(繼承保證);提⾼了代碼的擴(kuò)展性

Java中多態(tài)的實(shí)現(xiàn)⽅式:接⼝實(shí)現(xiàn),繼承⽗類(lèi)進(jìn)⾏⽅法重寫(xiě),同個(gè)類(lèi)中進(jìn)⾏⽅法重載。⽗類(lèi)⼸|⽤指向⼦類(lèi)對(duì)象

類(lèi)

類(lèi)是用于描述同一類(lèi)型的對(duì)象的一個(gè)抽象的概念,類(lèi)中定義了這一類(lèi)對(duì)象所應(yīng)具有的靜態(tài)和動(dòng)態(tài)屬性

類(lèi)的定義包括:類(lèi)聲明,類(lèi)體

類(lèi)可以看成一類(lèi)對(duì)象的模板,對(duì)象可以看成該類(lèi)的一個(gè)具體實(shí)例

對(duì)象可以看成是靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬性(方法)的封裝體

在這里插入圖片描述

對(duì)象的創(chuàng)建和使用

  • 必須使用new關(guān)鍵字創(chuàng)建對(duì)象
  • 使用對(duì)象(引用).成員變量或來(lái)引用對(duì)象的成員變量
  • 使用對(duì)象(引用).方法(參數(shù)列表)來(lái)調(diào)用對(duì)象的方法
  • 同一類(lèi)的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間
  • 同一類(lèi)的每個(gè)對(duì)象共享該類(lèi)的方法

構(gòu)造方法

作用:主要⽤來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象, 即為對(duì)象成員變量賦初始值,總與new運(yùn)算符⼀起使⽤在創(chuàng)建對(duì)象的語(yǔ)句中。

注意 :

  • ⼀個(gè)類(lèi)可以有多個(gè)構(gòu)造函數(shù) ,可根據(jù)其參數(shù)個(gè)數(shù)的不同或參數(shù)類(lèi)型的不同來(lái)區(qū)分它們,即構(gòu)造函數(shù)的重載
  • 使用new+構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象
  • 構(gòu)造函數(shù)的名字必須和所在類(lèi)名字完全相同
  • 構(gòu)造函數(shù)與類(lèi)同名且沒(méi)有返回值
  • 如果沒(méi)有編寫(xiě)指定構(gòu)造函數(shù)時(shí),編譯會(huì)自動(dòng)添加無(wú)參數(shù)的構(gòu)造函數(shù)
  • 特別: 構(gòu)造函數(shù)不能用final,static,abstract修飾

為什么?

1.final修飾函數(shù)的主要目的是避免函數(shù)被重寫(xiě),構(gòu)造器不是通過(guò)繼承得到的,所以沒(méi)有必要把它聲明為final的。

2.同理,一個(gè)抽象的構(gòu)造器將永遠(yuǎn)不會(huì)被實(shí)現(xiàn),所以它也不能聲明為abstract的。

3.構(gòu)造器總是關(guān)聯(lián)一個(gè)對(duì)象而被調(diào)用,所以把它聲明為static是沒(méi)有意義的。

重載與重寫(xiě)

方法的重載是指一個(gè)類(lèi)中可以定義有相同的名字,但參數(shù)不同的多個(gè)方法。調(diào)用時(shí),系統(tǒng)會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)的方法

重載:

  1. 必須載同⼀個(gè)類(lèi)中
  2. ⽅法名相同
  3. ⽅法的參數(shù)的個(gè)數(shù)、順序或類(lèi)型不同
  4. ⽅法的修飾符和或返回值沒(méi)有關(guān)系
  5. 可以有同的返回類(lèi)型,只要參數(shù)列表不同就可以了;
  6. 可以有不同的訪(fǎng)問(wèn)修飾符;

重寫(xiě):

1. 重寫(xiě)的⽅法必須要和⽗類(lèi)⼀模⼀樣(包括返回值類(lèi)型,⽅法名,參數(shù)列表)

2. 重寫(xiě)的⽅法可以使⽤@Override注解來(lái)標(biāo)識(shí)

3. ⼦類(lèi)中重寫(xiě)的⽅法的訪(fǎng)問(wèn)權(quán)限不能低于⽗類(lèi)中⽅法的訪(fǎng)問(wèn)權(quán)限

權(quán)限修飾符 : private < 默認(rèn)(什么都不寫(xiě)) < protected < public

常用關(guān)鍵字

this

Java中為解決變量的命名沖突和不確定性問(wèn)題,引⼊關(guān)鍵字this代表其所在⽅法的當(dāng)前對(duì)象的引⽤,使用this可以處理方法中成員變量和參數(shù)重名的情況

1.構(gòu)造⽅法中指該構(gòu)造器所創(chuàng)建的新對(duì)象;

public class B{
 	A a; //A是⼀個(gè)類(lèi)
  	public B(A a){
 		this.a = a;
 	}
}

2.⽅法中指調(diào)⽤該⽅法的對(duì)象;

 public class Baby{
 	public void wakeUp(){
 		System.out.println("寶寶醒啦");
 	}
 	public void eat(){
 		this.wakeUp();
 		System.out.println("吃東⻄");
 	}

在類(lèi)本身的⽅法或構(gòu)造器中引⽤該類(lèi)的實(shí)例變量(全局變量)和⽅法

public void setName(String name){
 	this.name=name
}

this只能在類(lèi)中的⾮靜態(tài)⽅法中使⽤,靜態(tài)⽅法和靜態(tài)的代碼塊中絕對(duì)不能出現(xiàn)this

原因:static⽅法在類(lèi)加載時(shí)就已經(jīng)存在了,但是對(duì)象是在創(chuàng)建時(shí)才在內(nèi)存中⽣成

static 關(guān)鍵字

在類(lèi)中,用static聲明的成員變量為靜態(tài)成員變量,它是該類(lèi)的公用變量,在第一次使用時(shí)被初始化,對(duì)應(yīng)該類(lèi)的所有對(duì)象來(lái)說(shuō),static成員變量只有一份

  • 在類(lèi)的定義體中、方法的外部可包含static語(yǔ)句塊
  • static語(yǔ)句塊僅在其所屬的類(lèi)被載入時(shí)執(zhí)行一次
  • 用static聲明的方法為靜態(tài)方法,在調(diào)用方法時(shí),不會(huì)將對(duì)象的引用傳遞給它,所以在static方法中不可訪(fǎng)問(wèn)非static的成員。
  • 靜態(tài)方法不再是針對(duì)某個(gè)對(duì)象調(diào)用,所以不能訪(fǎng)問(wèn)非靜態(tài)成員
  • 被static修飾的變量屬于類(lèi)變量,可以通過(guò)類(lèi)名.變量名直接引⽤,⽽不需要new出⼀個(gè)類(lèi)來(lái)
  • 被static修飾的⽅法屬于類(lèi)⽅法,可以通過(guò)類(lèi)名.⽅法名直接引⽤,⽽不需要new出⼀個(gè)類(lèi)來(lái)

類(lèi)的成員變量包括實(shí)例變量和類(lèi)變量,實(shí)例變量在不同對(duì)象互不相同,類(lèi)變量被所用對(duì)象共享。

package語(yǔ)句作為java源文件的第一條語(yǔ)句,指明該文件中定義的類(lèi)所在的包(若缺省該語(yǔ)句,則指定為無(wú)名包)

JDK包介紹

java.lang——包含一些java語(yǔ)言的核心類(lèi),如String、Math、Integer、System和Thread,提供常用功能

java.awt——包含了構(gòu)成抽象窗口工具包(abstract window toolkits)的多個(gè)類(lèi),這些類(lèi)被用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶(hù)界面(GUI)

java.applet——包含applet運(yùn)行所需的一些類(lèi)

java.net——包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類(lèi)

java.io——包含能提供多種輸入/輸出功能的類(lèi)

java.util——包含一些使用工具類(lèi),如定義系統(tǒng)特性,使用與日期日歷相關(guān)的函數(shù)

打包命令:jar –cvf xx.jar .

訪(fǎng)問(wèn)控制

在這里插入圖片描述

子類(lèi)和繼承

java中使用extends關(guān)鍵字實(shí)現(xiàn)類(lèi)的繼承機(jī)制

通過(guò)繼承,子類(lèi)自動(dòng)擁有了基類(lèi)(superclass)的所有成員(成員變量和方法)

Object類(lèi)是所有Java類(lèi)的最高層父類(lèi)

java只支持單繼承,不允許多繼承

一個(gè)子類(lèi)只能有一個(gè)基類(lèi),一個(gè)基類(lèi)可以派生出多個(gè)子類(lèi)

子類(lèi)繼承的方法只能操作子類(lèi)繼承和隱藏的成員變量。

子類(lèi)重寫(xiě)或新增的方法可以操作子類(lèi)繼承和新聲明的成員變量,但是不能直接操作隱藏的成員變量

子類(lèi)的繼承性

如果子類(lèi)和父類(lèi)在同一個(gè)包,那么子類(lèi)可以繼承父類(lèi)中的所有的非private變量和方法。

如果不在同一個(gè)包,那么父類(lèi)中的private和友好訪(fǎng)問(wèn)權(quán)限的成員變量和方法不會(huì)被子類(lèi)繼承。

繼承中的構(gòu)造方法

子類(lèi)的構(gòu)造的過(guò)程必須調(diào)用其基類(lèi)的構(gòu)造方法

子類(lèi)可以在自己的構(gòu)造方法中使用super調(diào)用基類(lèi)的構(gòu)造方法,使用this調(diào)用本類(lèi)的另外的構(gòu)造方法

使用super,必須寫(xiě)在子類(lèi)構(gòu)造方法的第一行

如果子類(lèi)的構(gòu)造方法沒(méi)有顯示地調(diào)用基類(lèi)構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類(lèi)無(wú)參數(shù)的構(gòu)造方法

如果子類(lèi)構(gòu)造方法中既沒(méi)有顯式調(diào)用基類(lèi)構(gòu)造方法,而基類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)

在這里插入圖片描述

在這里插入圖片描述

對(duì)象轉(zhuǎn)型

  • 一個(gè)基類(lèi)的引用類(lèi)型變量可以“指向”其子類(lèi)的對(duì)象
  • 一個(gè)基類(lèi)的引用不可以訪(fǎng)問(wèn)其子類(lèi)對(duì)象新增加的成員(屬性和方法)
  • 可以使用引用變量instanceof類(lèi)名來(lái)判斷該引用型變量所“指向”的對(duì)象是否屬于該類(lèi)或該類(lèi)的子類(lèi)
  • 子類(lèi)的對(duì)象可以當(dāng)做基類(lèi)的對(duì)象來(lái)使用稱(chēng)作向上轉(zhuǎn)型(upcasting),反之稱(chēng)為向下轉(zhuǎn)型(downcasting)

向上轉(zhuǎn)型:

class A {
 public void print() {
 System.out.println("A:print");
 }
}
class B extends A {
 public void print() { 
 System.out.println("B:print");
 }
}
public class Test{
 public static void main(String args[])
 {
 A a = new B(); //通過(guò)⼦類(lèi)去實(shí)例化⽗類(lèi)
 a.print();
 }
}

向下轉(zhuǎn)型:

class A {
 public void print() {
 System.out.println("A:print");
 }
}
class B extends A {
 public void print() { 
 System.out.println("B:print");
 }
 public void funcB(){System.out.println("funcB");
 }
}
public class Test{
 public static void main(String args[])
 {
 B b = (B)a; //向下轉(zhuǎn)型,通過(guò)⽗類(lèi)實(shí)例化⼦類(lèi)
 b.funcB(); //調(diào)⽤B類(lèi)獨(dú)有的⽅法
 }
}
  • 無(wú)繼承關(guān)系的引用類(lèi)型間的轉(zhuǎn)換是非法的

多態(tài)

定義:多態(tài)是同⼀個(gè)⾏為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能⼒。

一個(gè)對(duì)象只能有一種確定數(shù)據(jù)類(lèi)型

一個(gè)引用類(lèi)型變量可能指向(引用)多種不同類(lèi)型的對(duì)象

實(shí)現(xiàn)繼承方法重寫(xiě)父類(lèi)引用指向子類(lèi)對(duì)象

抽象類(lèi)

public abstract class Action {
 public abstract void doSomething(); //抽象⽅法
 public void test(){
 };
 }
  • 用abstract關(guān)鍵字來(lái)修飾一個(gè)類(lèi)時(shí),這個(gè)類(lèi)叫做抽象類(lèi),用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法
  • 含有抽象方法的類(lèi)必須被聲明為抽象類(lèi),抽象類(lèi)必須被繼承,抽象方法必須被重寫(xiě)
  • 抽象類(lèi)不能被實(shí)例化

抽象方法只需聲明,而不需實(shí)現(xiàn)

常用關(guān)鍵字

super關(guān)鍵字

  • super關(guān)鍵字主要存在于⼦類(lèi)⽅法中,⽤于指向⼦類(lèi)對(duì)象中的⽗類(lèi)對(duì)象;可以訪(fǎng)問(wèn)⽗類(lèi)的屬性、函數(shù)以及構(gòu)造函數(shù)。
  • ⼦⽗類(lèi)存在著同名的成員(包括變量和⽅法)時(shí),在⼦類(lèi)中默認(rèn)是訪(fǎng)問(wèn)⼦類(lèi)的成員,可以通過(guò)super關(guān)鍵字指定訪(fǎng)問(wèn)⽗類(lèi)的成員;
  • 默認(rèn)會(huì)先調(diào)⽤⽗類(lèi)⽆參的構(gòu)造⽅法,可以通過(guò)super關(guān)鍵字指定調(diào)⽤⽗類(lèi)的構(gòu)造⽅法。

final

在這里插入圖片描述

可以修飾:類(lèi),成員變量和方法中的局部變量

final的變量的值不能夠被改變

final修飾類(lèi):不能被繼承

Final修飾⽅法: 不能被重寫(xiě),但是⼦類(lèi)可以⽤⽗類(lèi)中final修飾的⽅法

final修飾變量:

  1. 基本類(lèi)型變量使⽤final修飾了就不可變了,成員變量或局部變量被修飾為final就是常量,聲明常量時(shí)必須指定常量的值
  2. 對(duì)于引⽤類(lèi)型變量被final修飾了:引⽤變量引⽤不可變,但是引⽤對(duì)象的內(nèi)容可以改變

接口

  • 接口中只能有常量和abstract方法
  • 多個(gè)無(wú)關(guān)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口
  • 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口
  • 與繼承關(guān)系類(lèi)似,接口與實(shí)現(xiàn)類(lèi)之間存在多態(tài)性

語(yǔ)法格式:

< modifier > class < name > [ extends< superclass > ] [ implements < interface > ,< interface > ]

public interface UserService {
 //接⼝中的所有定義的⽅法中其實(shí)都是抽象的 public abstract
 //變量只能為 public static final 類(lèi)型的
 //public abstract void add();
 //等效于 void add();
 //int age = 99; 等效于
 //public static final int age = 99;
 int age = 99;
 void add(String name);
 void delete(String name);
 void update(String name);
 void query(String name);
 }
  • 接口中聲明屬性默認(rèn)為public static final的;也只能是public static final的;
  • 接口中只能定義抽象方法,而且這些方法默認(rèn)為public的、也只能是public的
  • 接口可以繼承其他的接口,并添加新的屬性和抽象方法

接口和類(lèi)的比較

  • 接口與類(lèi)相似點(diǎn):

一個(gè)接口可以有多個(gè)方法。

接口文件保存在 .java 結(jié)尾的文件中,文件名使用接口名。

接口的字節(jié)碼文件保存在 .class 結(jié)尾的文件中。

接口相應(yīng)的字節(jié)碼文件必須在與包名稱(chēng)相匹配的目錄結(jié)構(gòu)中。

  • 接口與類(lèi)的區(qū)別:

接口不能用于實(shí)例化對(duì)象。

接口沒(méi)有構(gòu)造方法。

接口中所有的方法必須是抽象方法。

接口不能包含成員變量,除了 static 和 final 變量。

接口不是被類(lèi)繼承了,而是要被類(lèi)實(shí)現(xiàn)。

接口支持多繼承。

實(shí)體類(lèi) 抽象類(lèi) 接口
常量 常量 常量
變量 變量 抽象方法
方法 方法
抽象方法

異常類(lèi)

異常是在運(yùn)行期出現(xiàn)的錯(cuò)誤

  • Java異常是Java提供的用于處理程序中錯(cuò)誤的一種機(jī)制
  • 所謂錯(cuò)誤是指在程序運(yùn)行的過(guò)程中發(fā)生的一些異常事件(如:除0溢出,數(shù)組下標(biāo)越界,所要讀取的文件不存在)
  • 設(shè)計(jì)良好的程序應(yīng)該在異常發(fā)生時(shí)提供處理這些錯(cuò)誤的地方,使得程序不會(huì)因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可預(yù)見(jiàn)的結(jié)果
  • Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常事件,可以生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象封裝了異常事件的信息并將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱(chēng)為拋出(throw)異常
  • 當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋求能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱(chēng)為捕獲(catch)異常

在這里插入圖片描述

異常和錯(cuò)誤的區(qū)別是:異常能被程序本身可以處理,錯(cuò)誤是⽆法處理。

異常的分類(lèi)

  • Error:稱(chēng)為錯(cuò)誤,由Java虛擬機(jī)生成并拋出,包括動(dòng)態(tài)鏈接失敗、虛擬機(jī)錯(cuò)誤等,程序?qū)ζ洳蛔鎏幚?/li>

Exception:所有異常類(lèi)的父類(lèi),其子類(lèi)對(duì)應(yīng)了各種各樣可能出現(xiàn)的異常事件,一般需要用戶(hù)顯式的聲明或捕獲

Exception(異常)分兩⼤類(lèi):運(yùn)⾏時(shí)異常和⾮運(yùn)⾏時(shí)異常(編譯異常)。

運(yùn)⾏時(shí)異常:

如NullPointerException(空指針異常)、 IndexOutOfBoundsException(下標(biāo)越界異常)

等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理 ⾮運(yùn)⾏時(shí)異常 (編譯異常):

是RuntimeException以外的異常,類(lèi)型上都屬于Exception類(lèi)及其⼦類(lèi)。從程序語(yǔ)法⻆度講是必須進(jìn)⾏ 處理的異常,如果不處理,程序就不能編譯通過(guò)。如IOException、SQLException等以及⽤戶(hù)⾃定義的Exception異常.

  • Runtime Exception:一類(lèi)特殊的異常,如被0除、數(shù)組下標(biāo)越界等,其產(chǎn)生比較頻繁,處理麻煩,如果顯式的聲明或捕獲將會(huì)對(duì)程序可讀性和運(yùn)行效率影響很大,因此由系統(tǒng)自動(dòng)檢測(cè)并將它們交給缺省的異常處理程序(用戶(hù)可不必對(duì)其處理)

代碼

try{
//可能拋出異常的語(yǔ)句
}catch(SomeException1 e){
……
}catch(SomeException2 e){
......
}finally{
……
}
  • try代碼塊包含可能產(chǎn)生異常的代碼
  • try代碼段后跟有一個(gè)或多個(gè)catch代碼段
  • 每個(gè)catch代碼段聲明其能處理的一種特定類(lèi)型的異常并提供處理的方法
  • 當(dāng)異常發(fā)生時(shí),程序會(huì)中止當(dāng)前的流程,根據(jù)獲取異常的類(lèi)型去執(zhí)行相應(yīng)的catch代碼段
  • finally代碼段無(wú)論是否發(fā)生異常都要執(zhí)行

java中的常用類(lèi)

String 類(lèi)

string類(lèi)是不可以變序列

String不變的性質(zhì)是因?yàn)槊看味紡腟tring 池⾥⾯取,如果有則直接⽤,否則創(chuàng)建新的放⼊

靜態(tài)重載方法

public static String valueOf(…)可以將基本類(lèi)型數(shù)據(jù)轉(zhuǎn)換為字符串

String類(lèi)初始化

String str1 = “HelloWorld”;
Sting str2 = new String();
str2="HelloWorld"
String str3 = new String(“HelloWorld”);

String 類(lèi)的常見(jiàn)操作

1 char charAt(int index)
返回指定索引處的 char 值。
String concat(String str)
將指定字符串連接到此字符串的結(jié)尾。
int indexOf(char ch)
返回指定字符在此字符串中第⼀次出現(xiàn)處的索引
boolean equals(Object anObject)
將此字符串與指定的對(duì)象⽐較。
 String replace(char oldChar, char newChar)
返回⼀個(gè)新的字符串,它是通過(guò)⽤ newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的。
String replaceAll(String regex, String replacement)
使⽤給定的 replacement 替換此字符串所有匹配給定的正則表達(dá)式的⼦字符串。
int compareTo( NumberSubClass referenceName )
如果指定的數(shù)與參數(shù)相等返回0。
如果指定的數(shù)小于參數(shù)返回 -1。
如果指定的數(shù)大于參數(shù)返回 1。

基本數(shù)據(jù)類(lèi)型包裝類(lèi)

在這里插入圖片描述

  • ⾃動(dòng)裝箱

⾃動(dòng)裝箱即⾃動(dòng)將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換成包裝類(lèi)型

//早期基本數(shù)據(jù)類(lèi)型->包裝類(lèi)型
Integer i1 = new Integer(8); //int->Integer
Integer i2 = Integer.valueOf(8); //int->Integer
//現(xiàn)在是⾃動(dòng)裝箱(⾃動(dòng)基本數(shù)據(jù)類(lèi)型->包裝類(lèi)型轉(zhuǎn)換)
Integer i3 = 8;//8是int類(lèi)型
  • ⾃動(dòng)拆箱

⾃動(dòng)拆箱即⾃動(dòng)將包裝類(lèi)型轉(zhuǎn)換成基本數(shù)據(jù)類(lèi)型,與⾃動(dòng)裝箱相反 //早期包裝數(shù)據(jù)類(lèi)型->基本類(lèi)型轉(zhuǎn)換

Float i=3.3;
float i5 = i.floatValue();
Integer i2=3;
int m=i2.intValue();
// ⾃動(dòng)拆箱(⾃動(dòng)包裝數(shù)據(jù)類(lèi)型->基本類(lèi)型轉(zhuǎn)換)
Integer i=3;
int i4 = i;

多線(xiàn)程

線(xiàn)程和進(jìn)程的區(qū)別

  • 每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會(huì)有較大的開(kāi)銷(xiāo)
  • 線(xiàn)程可以看成是輕量級(jí)的進(jìn)程,同一類(lèi)線(xiàn)程共享代碼和數(shù)據(jù)空間,每個(gè)線(xiàn)程都有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線(xiàn)程切換開(kāi)銷(xiāo)小

多進(jìn)程:在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)任務(wù)(程序)

多線(xiàn)程:在同一應(yīng)用程序中有多個(gè)順序流同時(shí)執(zhí)行

線(xiàn)程的基本概念

  • Java的線(xiàn)程通過(guò)java.lang.Thread類(lèi)來(lái)實(shí)現(xiàn)的
  • VM啟動(dòng)時(shí),會(huì)有一個(gè)由主方法(public static void main())定義的線(xiàn)程
  • 可以通過(guò)創(chuàng)建Thread類(lèi)的實(shí)例來(lái)創(chuàng)建線(xiàn)程
  • 每個(gè)線(xiàn)程都是通過(guò)某個(gè)特定Thread對(duì)象所對(duì)應(yīng)的方法run()來(lái)完成其操作的,方法run()稱(chēng)為線(xiàn)程體
  • 通過(guò)調(diào)用Thread類(lèi)的start()方法來(lái)啟動(dòng)一個(gè)線(xiàn)程

線(xiàn)程的創(chuàng)建

Java中線(xiàn)程的創(chuàng)建常⻅有如2種基本形式

1.繼承Thread類(lèi),重寫(xiě)該類(lèi)的run()⽅法

class MyThread extends Thread {
	private int i = 0;
	 @Override
 	public void run() {
 		for (i = 0; i < 100; i++) {
 			System.out.println(Thread.currentThread().getName() + " " + i);
		}
 	}
}

2、實(shí)現(xiàn)Runnable接⼝,并重寫(xiě)該接⼝的run()⽅法,該run()⽅法同樣是線(xiàn)程執(zhí)⾏體,創(chuàng)建Runnable實(shí)現(xiàn)類(lèi)的實(shí)例,并以此實(shí)例作為T(mén)hread類(lèi)的target來(lái)創(chuàng)建Thread對(duì)象,該Thread對(duì)象才是真正的線(xiàn)程對(duì)象

class MyRunnable implements Runnable {
	private int i = 0;
 	@Override
 	public void run() {
	 	for (i = 0; i < 100; i++) {
	 		System.out.println(Thread.currentThread().getName() + " " + i);
	 	}
 	}
 }

Thread myThread=new Thread(target);//target為Runnable接口類(lèi)型

Runnabel接口中只有一個(gè)方法

public void run();//用以定義線(xiàn)程運(yùn)行體

使用Runnable接口可以為多個(gè)線(xiàn)程提供共享的數(shù)據(jù)

在實(shí)現(xiàn)Runnable接口的類(lèi)的run方法定義中可以使用Thread的靜態(tài)方法

public static Thread currentThread()獲取當(dāng)前線(xiàn)程的引用

線(xiàn)程控制基本方法

在這里插入圖片描述

由于是靜態(tài)方法,sleep可以由類(lèi)名直接調(diào)用

sleep()⽅法和wait()⽅法:

  • 相同點(diǎn):⼀旦執(zhí)⾏⽅法以后,都會(huì)使得當(dāng)前的進(jìn)程進(jìn)⼊阻塞狀態(tài)。
  • 不同點(diǎn):
  1. ⽅法聲明⽅式不同,sleep()⽅法在Thread類(lèi)中聲明,wait()⽅法在Object類(lèi)中聲明。
  2. 調(diào)⽤的條件不同,sleep可以在任何需要的場(chǎng)景下調(diào)⽤,wait必須使⽤在同步代碼塊或者同步⽅法中。
  3. 是否釋放鎖,sleep不會(huì)釋放,wait會(huì)釋放
  4. sleep()⽅法 :sleep()使當(dāng)前線(xiàn)程進(jìn)⼊阻塞狀態(tài),在指定時(shí)間內(nèi)不會(huì)執(zhí)⾏。⾃動(dòng)蘇醒

wait()⽅法: 不會(huì)主動(dòng)蘇醒,需要另外的線(xiàn)程調(diào)⽤notify()/notifyAll()⽅法喚醒。

進(jìn)程狀態(tài)

1、新建狀態(tài)(New):新創(chuàng)建了一個(gè)線(xiàn)程對(duì)象。

2、就緒狀態(tài)(Runnable):線(xiàn)程對(duì)象創(chuàng)建后,其他線(xiàn)程調(diào)用了該對(duì)象的start()方法。該狀態(tài)的線(xiàn)程位于可運(yùn)行線(xiàn)程池中,變得可運(yùn)行,等待獲取CPU的使用權(quán)。

3、運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線(xiàn)程獲取了CPU,執(zhí)行程序代碼。

4、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線(xiàn)程因?yàn)槟撤N原因放棄CPU使用權(quán),暫時(shí)停止運(yùn)行。直到線(xiàn)程進(jìn)入就緒狀態(tài),才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞的情況分三種:

(一)、等待阻塞:運(yùn)行的線(xiàn)程執(zhí)行wait()方法,JVM會(huì)把該線(xiàn)程放入等待池中。

(二)、同步阻塞:運(yùn)行的線(xiàn)程在獲取對(duì)象的同步鎖時(shí),若該同步鎖被別的線(xiàn)程占用,則JVM會(huì)把該線(xiàn)程放入鎖池中。

(三)、其他阻塞:運(yùn)行的線(xiàn)程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線(xiàn)程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線(xiàn)程終止或者超時(shí)、或者I/O處理完畢時(shí),線(xiàn)程重新轉(zhuǎn)入就緒狀態(tài)。

5、死亡狀態(tài)(Dead):線(xiàn)程執(zhí)行完了或者因異常退出了run()方法,該線(xiàn)程結(jié)束生命周期。

問(wèn)答題

  • 面向?qū)ο蟮奶卣饔心男┓矫??

答:主要有以下四方面:

1.抽象:

抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。

2.繼承:

繼承是一種聯(lián)結(jié)類(lèi)的層次模型,并且允許和鼓勵(lì)類(lèi)的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類(lèi)可以從現(xiàn)有的類(lèi)中派生,這個(gè)過(guò)程稱(chēng)為類(lèi)繼承。新類(lèi)繼承了原始類(lèi)的特性,新類(lèi)稱(chēng)為原始類(lèi)的派生類(lèi)(子類(lèi)),而原始類(lèi)稱(chēng)為新類(lèi)的基類(lèi)(父類(lèi))。派生類(lèi)可以從它的基類(lèi)那里繼承方法和實(shí)例變量,并且類(lèi)可以修改或增加新的方法使之更適合特殊的需要。

3.封裝:

封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪(fǎng)問(wèn)其他對(duì)象。

4.多態(tài)性:

多態(tài)性是指允許不同類(lèi)的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。

String是最基本的數(shù)據(jù)類(lèi)型嗎?

答:基本數(shù)據(jù)類(lèi)型包括byte、int、char、long、float、double、boolean和short。(8個(gè))

java.lang.String類(lèi)是final類(lèi)型的,因此不可以繼承這個(gè)類(lèi)、不能修改這個(gè)類(lèi)。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類(lèi)

int 和 Integer 有什么區(qū)別?

答:Java 提供兩種不同的類(lèi)型:引用類(lèi)型和原始類(lèi)型(或內(nèi)置類(lèi)型)。Int是java的原始數(shù)據(jù)類(lèi)型,Integer是java為int提供的封裝類(lèi)。Java為每個(gè)原始類(lèi)型提供了封裝類(lèi)。

一個(gè)".java"源文件中是否可以包括多個(gè)類(lèi)(不是內(nèi)部類(lèi))?有什么限制?

答:可以。必須只有一個(gè)類(lèi)名與文件名相同。

闡述實(shí)體類(lèi)、抽象類(lèi)和接口的區(qū)別

1、類(lèi)只能繼承類(lèi),接口只能繼承接口,類(lèi)可以實(shí)現(xiàn)接口,其它都不行。

2、java中支持單繼承,多實(shí)現(xiàn)規(guī)則。

抽象類(lèi)與接口都用于抽象,但是抽象類(lèi)(JAVA中)可以有自己的部分實(shí)現(xiàn),而接口則完全是一個(gè)標(biāo)識(shí)(同時(shí)有多重繼承的功能)。

重載和重寫(xiě)的區(qū)別

  • 方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。
  • 重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被"屏蔽"了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型

throws 關(guān)鍵字和 throw 關(guān)鍵字有什么區(qū)別和聯(lián)系?

  • throw⽤來(lái)在⽅法體內(nèi)拋出異常,⽽throws⽤來(lái)在⽅法聲明處聲明異常。
  • 這兩個(gè)關(guān)鍵字有著⼀定的聯(lián)系。如果⼀個(gè)⽅法中使⽤了throw關(guān)鍵字拋出了異常,那么要么⽴即⽤try/catch語(yǔ)句進(jìn)⾏捕獲,要么就是⽤throws進(jìn)⾏聲明,否則將出現(xiàn)編譯錯(cuò)誤。
  • 然⽽, 并不是只有使⽤了throw關(guān)鍵字之后才能使⽤throws關(guān)鍵字,語(yǔ)法上來(lái)說(shuō),任何⼀個(gè)⽅法都可以直接使⽤throws關(guān)鍵字,抽象⽅法也可以使⽤。

什么是多態(tài)?如何實(shí)現(xiàn)多態(tài)?

  • 多態(tài)性(Polymorphism)是指在基類(lèi)中定義的屬性或⽅法被派⽣類(lèi)繼承后,可以具有不同的數(shù)據(jù)類(lèi)型,或表現(xiàn)出不同的⾏為,從⽽使得同⼀個(gè)屬性或⽅法在基類(lèi)及其各個(gè)派⽣類(lèi)中具有不同的語(yǔ)義。
  • Java的多態(tài)性體現(xiàn)在兩個(gè)⽅⾯:(1) ⽅法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性,⼜稱(chēng)為編譯時(shí)多態(tài);(2) ⽅法覆蓋/重寫(xiě)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性,⼜稱(chēng)為運(yùn)⾏時(shí)多態(tài)。

error和exception有什么區(qū)別

  • error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況

exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況

接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)

  • 接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)是否可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構(gòu)造函數(shù)

總結(jié)

本篇文章就到這里了,希望更夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • MyBatis注解方式之@Update/@Delete使用詳解

    MyBatis注解方式之@Update/@Delete使用詳解

    這篇文章主要介紹了MyBatis注解方式之@Update/@Delete使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • struts2如何使用攔截器進(jìn)行用戶(hù)權(quán)限控制實(shí)例

    struts2如何使用攔截器進(jìn)行用戶(hù)權(quán)限控制實(shí)例

    本篇文章主要介紹了struts2如何使用攔截器進(jìn)行用戶(hù)權(quán)限控制實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法

    Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法

    這篇文章主要介紹了Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • mybatis trim標(biāo)簽的使用詳解

    mybatis trim標(biāo)簽的使用詳解

    這篇文章主要介紹了mybatis trim標(biāo)簽的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解Java串行化接口的用法和原理

    詳解Java串行化接口的用法和原理

    在Java開(kāi)發(fā)中,我們經(jīng)常需要將對(duì)象進(jìn)行序列化和反序列化,以便在網(wǎng)絡(luò)傳輸或存儲(chǔ)到持久化介質(zhì)中,Java提供了一種機(jī)制,即通過(guò)實(shí)現(xiàn)Serializable接口來(lái)實(shí)現(xiàn)對(duì)象的串行化,本文將詳細(xì)介紹Java串行化接口的用法和原理,以及一些相關(guān)的注意事項(xiàng),需要的朋友可以參考下
    2023-11-11
  • Java Swing組件單選框JRadioButton用法示例

    Java Swing組件單選框JRadioButton用法示例

    這篇文章主要介紹了Java Swing組件單選框JRadioButton用法,結(jié)合具體實(shí)例形式分析了Swing單選框JRadioButton的使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • java.lang.UnsupportedOperationException的問(wèn)題解決

    java.lang.UnsupportedOperationException的問(wèn)題解決

    本文主要介紹了java.lang.UnsupportedOperationException的問(wèn)題解決,該錯(cuò)誤表示調(diào)用的方法不被支持或不可用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • MyBatis按時(shí)間排序方式

    MyBatis按時(shí)間排序方式

    這篇文章主要介紹了MyBatis按時(shí)間排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Data JPA 整合QueryDSL的使用案例

    Spring Data JPA 整合QueryDSL的使用案例

    QueryDSL 是一個(gè)用于構(gòu)建類(lèi)型安全的 SQL 查詢(xún)的 Java 庫(kù),它的主要目標(biāo)是簡(jiǎn)化在 Java 中構(gòu)建和執(zhí)行 SQL 查詢(xún)的過(guò)程,同時(shí)提供類(lèi)型安全性和更好的編碼體驗(yàn),對(duì)Spring Data JPA 整合QueryDSL使用案例感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 基于strict-origin-when-cross-origin問(wèn)題的解決

    基于strict-origin-when-cross-origin問(wèn)題的解決

    這篇文章主要介紹了基于strict-origin-when-cross-origin問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論