溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何使用關鍵字

發(fā)布時間:2021-06-22 17:54:42 來源:億速云 閱讀:190 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Java中如何使用關鍵字,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、關鍵字:return--跳出

  • 使用在方法體中,用于:① 結束方法② 針對于返回值類型的方法,使用"return 數據"方法返回所要的數據。

  • return關鍵字后面不可以聲明執(zhí)行語句。

  • 在異常處理中try-catch-finally的結構中,如果try或catch中的結構中寫了return,但是finally中的結構仍會執(zhí)行。

二、關鍵字:this--本類的

1.this關鍵字概述

this理解為:當前對象 或 當前正在創(chuàng)建的對象,可以調用的結構:屬性、方法;構造器

2. this關鍵字的使用

2.1 this調用屬性、方法:
  • 在類的方法中,我們可以使用"this.屬性"或"this.方法"的方式,調用當前對象屬性或方法。但是,通常情況下,我們都擇省略"this."。特殊情況下,如果***方法的形參和類的屬性同名時***,我們必須顯式的使用"this.變量"的方式,表明此變量是屬性,而非形參。

  • 在類的構造器中,我們可以使用"this.屬性"或"this.方法"的方式,調用當前正在創(chuàng)建的對象屬性或方法。但是,通常情況下,我們都擇省略"this."。特殊情況下,如果***構造器的形參和類的屬性同名***時,我們必須顯式的使用"this.變量"的方式,表明此變量是屬性,而非形參。

2.2 this調用構造器:

① 我們在類的構造器中,可以顯式的使用***"this(形參列表)"***方式,調用本類中指定的其他構造器

② 構造器中不能通過"this(形參列表)"方式調用自己

③ 如果一個類中有n個構造器,則最多有 n - 1構造器中使用了"this(形參列表)"

④ 規(guī)定:"this(形參列表)"必須聲明在當前構造器的首行

構造器內部,最多只能聲明一個"this(形參列表)",用來調用其他的構造器

三、關鍵字:super--父類的

1. super關鍵字概述

super 關鍵字可以理解為:父類的,可以用來調用的結構:屬性、方法、構造器

  • 尤其當子父類出現同名成員時,可以用supe表明調用的是父類中的成員

  • super的追溯不僅限于直接父類

  • super和this的用法相像,this代表本類對象的引用, super代表父類的內存空間的標識

2. super關鍵字使用

2.1super調用屬性、方法:

與this關鍵字使用方式相同,只不過調用的是父類的屬性

2.2 在子類的方法或構造器中使用

通過使用"super.屬性"或"super.方法"的方式,顯式的調用父類中聲明的屬性或方法。但是,通常情況下,我們習慣省略"super."

特殊情況

  • 當子類和父類中定義了同名的屬性時,我們要想在子類中調用父類中聲明的屬性,則必須顯式的使用"super.屬性"的方式,表明調用的是父類中聲明的屬性。

  • 當子類重寫了父類中的方法以后,我們想在子類的方法中調用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式,表明調用的是父類中被重寫的方法。

2.3 super調用構造器:
  • 我們可以在子類的構造器中顯式的使用"super(形參列表)"的方式,調用父類中聲明的指定的構造器

  • "super(形參列表)"的使用,必須聲明在子類構造器的首行!

  • 我們在類的構造器中,針對于"this(形參列表)"或"super(形參列表)"只能二選一,不能同時出現

  • 在構造器的首行,沒顯式的聲明"this(形參列表)"或"super(形參列表)",則默認調用的是父類中空參的構造器:super()

  • 在類的多個構造器中,至少一個類的構造器中使用了"super(形參列表)",調用父類中的構造器

3. this與super的區(qū)別

區(qū)別點thissuper
訪問屬性訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續(xù)查找直接訪問父類中的屬性
調用方法訪問本類中的方法,如果本類沒有此方法則從父類中繼續(xù)查找直接訪問父類中的方法
調用構造器調用本類構造器,必須放在構造器的首行調用父類構造器,必須放在子類構造器的首行

四、關鍵字:package/import

1. package關鍵字概述

  1. 為了更好的實現項目中類的管理,提供包的概念

  2. 使用package聲明類或接口所屬的包,聲明在源文件的首行

  3. 包,屬于標識符,遵循標識符的命名規(guī)則、規(guī)范(xxxyyyzzz)、“見名知意”

  4. 每"."一次,就代表一層文件目錄。

2. 包結構應用舉例

MVC設計模式

Java中如何使用關鍵字

3. JDK中的主要包介紹:

  • java. lang--包含一些Java語言的核心類,如 String、Math、 integer、 System和Thread,提供常用功能

  • java. net--包含執(zhí)行與網絡相關的操作的類和接口

  • java.io--包含能提供多種輸入/輸出功能的類

  • java util--包含一些實用工具類,如定義系統(tǒng)特性、接口的集合框架類、使用與日期日歷相關的函數。

  • java. text--包含了一些java格式化相關的類

  • java.sql--包含了java進行JDBC數據庫編程的相關類/接口

  • java. awt--包含了構成抽象窗口工具集 (abstract window toolkits)的多個類,這些類被用來構建和管理應用程序的圖形用戶界面GU)。 B/S C/S

4. import的使用:

  1. 在源文件中顯式的使用import結構導入指定包下的類、接口

  2. 聲明在包的聲明和類的聲明之間

  3. 如果需要導入多個結構,則并列寫出即可

  4. 可以使用"xxx.*"的方式,表示可以導入xxx包下的所結構

  5. 如果使用的類或接口是java.lang包下定義的,則可以省略import結構

  6. 如果使用的類或接口是本包下定義的,則可以省略import結構

  7. 如果在源文件中,使用了不同包下的同名的類,則必須至少一個類需要以全類名的方式顯示。

  8. 使用"xxx.*"方式表明可以調用xxx包下的所結構。但是如果使用的是xxx子包下的結構,則仍需要顯式導入

  9. import static:導入指定類或接口中的靜態(tài)結構:屬性或方法。

五、關鍵字:static--靜態(tài)的

1. Static關鍵字簡述

主要用來修飾類的內部結構,如:屬性、方法、代碼塊、內部類

2. static關鍵字使用

2.1static修飾屬性:靜態(tài)變量(或類變量)

屬性是否使用static修飾,可分為:靜態(tài)屬性 vs 非靜態(tài)屬性(實例變量)

  • 實例變量:我們創(chuàng)建了類的多個對象,每個對象都獨立的擁一套類中的非靜態(tài)屬性。當修改其中一個對象中的非靜態(tài)屬性時,不會導致其他對象中同樣的屬性值的修改。

  • 靜態(tài)變量:我們創(chuàng)建了類的多個對象,多個對象共享同一個靜態(tài)變量。當通過某一個對象修改靜態(tài)變量時,會導致其他對象調用此靜態(tài)變量時,是修改過了的。

static修飾屬性的其他說明:

  • 靜態(tài)變量隨著類的加載而加載??梢酝ㄟ^"類.靜態(tài)變量"的方式進行調用

  • 靜態(tài)變量的加載要早于對象的創(chuàng)建。

  • 由于類只會加載一次,則靜態(tài)變量在內存中也只會存在一份:存在方法區(qū)的靜態(tài)域中。


類變量實例變量
yesno
對象yesyes

靜態(tài)屬性舉例:System.out; Math.PI;

靜態(tài)變量內存解析:

Java中如何使用關鍵字

2.2 static修飾方法:靜態(tài)方法、類方法
  • 隨著類的加載而加載,可以通過"類.靜態(tài)方法"的方式進行調用

  • 靜態(tài)方法中,只能調用靜態(tài)的方法或屬性

  • 非靜態(tài)方法中,既可以調用非靜態(tài)的方法或屬性,也可以調用靜態(tài)的方法或屬性


靜態(tài)方法非靜態(tài)方法
yesno
對象yesyes

使用的注意點:

  • 在靜態(tài)的方法內,不能使用this關鍵字、super關鍵字

  • 關于靜態(tài)屬性和靜態(tài)方法的使用,大家都從生命周期的角度去理解。

2.3. 如何判定屬性和方法應該使用static關鍵字:

關于屬性:

  • 屬性是可以被多個對象所共享的,不會隨著對象的不同而不同的。

  • 類中的常量也常常聲明為static

關于方法:

  • 操作靜態(tài)屬性的方法,通常設置為static的

  • 工具類中的方法,習慣上聲明為static的。 比如:Math、Arrays、Collections

**使用舉例:**記錄創(chuàng)建的圓的個數

class Circle{
	
	private double radius;
	private int id;//自動賦值
	
	public Circle(){
		id = init++;
		total++;
	}
	
	public Circle(double radius){
		this();
//		id = init++;
//		total++;
		this.radius = radius;
		
	}
	
	private static int total;//記錄創(chuàng)建的圓的個數
	private static int init = 1001;//static聲明的屬性被所對象所共享
	
	public double findArea(){
		return 3.14 * radius * radius;
	}

	public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}

	public int getId() {
		return id;
	}

	public static int getTotal() {
		return total;
	}

}

3. 單例模式

3.1 設計模式的說明

設計模式是在大量的實踐中總結和理論化之后優(yōu)的代碼結構、編程風格、以及解決問題的思考方式。

常用設計模式 --- 23種經典的設計模式 GOF

  • 創(chuàng)建型模式,共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

  • 結構型模式,共7種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

  • 行為型模式,共11種:策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。

3.2 單例模式

所謂類的單例設計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例。

代碼實現:

餓漢式1:
class Bank{
	
	//1.私化類的構造器
	private Bank(){
		
	}
	
	//2.內部創(chuàng)建類的對象
	//4.要求此對象也必須聲明為靜態(tài)的
	private static Bank instance = new Bank();
	
	//3.提供公共的靜態(tài)的方法,返回類的對象
	public static Bank getInstance(){
		return instance;
	}
}

餓漢式2:使用了靜態(tài)代碼塊
class Order{
	
	//1.私化類的構造器
	private Order(){
		
	}
	
	//2.聲明當前類對象,沒初始化
	//4.此對象也必須聲明為static的
	private static Order instance = null;

	static{
		instance = new Order();
 	}
	
	//3.聲明public、static的返回當前類對象的方法
	public static Order getInstance(){
		return instance;
	}
	
}

//懶漢式:
class Order{
	
	//1.私化類的構造器
	private Order(){
		
	}
	
	//2.聲明當前類對象,沒初始化
	//4.此對象也必須聲明為static的
	private static Order instance = null;
	
	//3.聲明public、static的返回當前類對象的方法
	public static Order getInstance(){
		
		if(instance == null){
			
			instance = new Order();
			
		}
		return instance;
	}
	
}

兩種方式的對比

  • 餓漢式:上來就創(chuàng)建對象

    • 壞處:對象加載時間過長。

    • 好處:餓漢式是線程安全的

  • 懶漢式:什么時候用什么時候造對象

    • 好處:延遲對象的創(chuàng)建。

    • 目前的寫法壞處:線程不安全。--->到多線程內容時,再修改

六、關鍵字:final--最終的

可以用來修飾:類、方法、變量

  1. final 用來修飾一個類:此類不能被其他類所繼承。

    比如:String類、System類、StringBuffer類

  2. final 用來修飾方法:表明此方法不可以被重寫

    比如:Object類中getClass();

  3. final 用來修飾變量:此時的"變量"就稱為是一個常量

    • final修飾屬性:可以考慮賦值的位置:顯式初始化、代碼塊中初始化、構造器中初始化

    • final修飾局部變量:尤其是使用final修飾形參時,表明此形參是一個常量。當我們調用此方法時,給常量形參賦一個實參。一旦賦值以后,就只能在方法體內使用此形參,但不能進行重新賦值。

  4. static final 用來修飾屬性:全局常量

七、關鍵字:abstract--抽象的

1. abstract關鍵字簡述

abstract: 抽象的,可以用來修飾:類、方法

2. abstract關鍵字的使用

2.1 abstract修飾類:抽象類
  • 此類不能實例化

  • 抽象類中一定有構造器,便于子類實例化時調用(涉及:子類對象實例化的全過程)

  • 開發(fā)中,都會提供抽象類的子類,讓子類對象實例化,完成相關的操作 --->抽象的使用前提:繼承性

2.2 abstract修飾方法:抽象方法
  • 抽象方法只方法的聲明,沒方法體

  • 包含抽象方法的類,一定是一個抽象類。反之,抽象類中可以沒有抽象方法的。

  • 若子類重寫了父類中的所的抽象方法后,此子類方可實例化

  • 若子類沒重寫父類中的所的抽象方法,則此子類也是一個抽象類,需要使用abstract修飾

注意點:

  • abstract不能用來修飾:屬性、構造器等結構

  • abstract不能用來修飾私有方法、靜態(tài)方法(靜態(tài)方法不能被重寫,抽象方法不能調用)、final的方法、final的類

abstract的應用舉例:

舉例一

public abstract class Vehicle{//抽象類
public abstract double calcFuelEfficiency();//計算燃料效率的抽象方法
public abstract double calcTripDistance();//計算行駛距離的抽象方法
}
public class Truck extends Vehiclel{
public double calcFuelEfficiency( ){//寫出計算卡車的燃料效率的具體方法}
public double calcTripDistance( ){//寫出計算卡車行駛距離的具體方法}
}
public class River Barge extends Vehicle{
public double calcFuelEfficiency( ){//寫出計算駁船的燃料效率的具體方法}
public double calcTripDistance( ){//寫出計算駁船行駛距離的具體方法}
}

舉例二

abstract class GeometricObject{//抽象類
public abstract double findArea();
}
class Circle extends GeometricObject{
private double radius;
public double findArea(){
		return 3.14 * radius * radius;
};
}

舉例三

IO流中設計到的抽象類:InputStream/OutputStream / Reader /Writer。在其內部定義了抽象的read()、write()方法。

3. 模板方法的設計模式

3.1 解決的問題

在軟件開發(fā)中實現一個算法時,整體步驟很固定、通用,這些步驟已經在父類中寫好了。但是某些部分易變,易變 部分可以抽象出來,供不同子類實現。這就是一種模板模式。

3.2 應用舉例
abstract class Template{
	
	//計算某段代碼執(zhí)行所需要花費的時間
	public void spendTime(){
		
		long start = System.currentTimeMillis();
		
		this.code();//不確定的部分、易變的部分
		
		long end = System.currentTimeMillis();
		
		System.out.println("花費的時間為:" + (end - start));
		
	}
	
	public abstract void code();
	
}

class SubTemplate extends Template{

	@Override
	public void code() {
		
		for(int i = 2;i <= 1000;i++){
			boolean isFlag = true;
			for(int j = 2;j <= Math.sqrt(i);j++){
				
				if(i % j == 0){
					isFlag = false;
					break;
				}
			}
			if(isFlag){
				System.out.println(i);
			}
		}

	}
	
}
3.3 應用場景

模板方法設計模式是編程中經常用得到的模式。各個框架、類庫中都有他的影子,比如常見的有:

  • 數據庫訪問的封裝

  • Junt單元測試

  • JavaWeb的 Servlet中關于 doGet/doPost方法調用

  • Hibernate中模板程序

  • Spring中 JDBCTemlate、 Hibernate Template等

八、關鍵字:interface--接口

1.interface關鍵字簡述

  1. 接口使用interface來定義

  2. Java中,接口和類是并列的兩個結構

1.interface關鍵字使用說明:

  1. 如何定義接口:定義接口中的成員

  2. 接口中不能定義構造器的!意味著接口不可以實例化

  3. Java開發(fā)中,接口通過讓類去實現(implements)的方式來使用.

    • 如果實現類覆蓋了接口中的所抽象方法,則此實現類就可以實例化

    • 如果實現類沒覆蓋接口中所的抽象方法,則此實現類仍為一個抽象類

  4. Java類可以實現多個接口 --->彌補了Java單繼承性的局限性

    格式:class AA extends BB implements CC,DD,EE

  5. 接口與接口之間可以繼承,而且可以多繼承

  6. 接口的具體使用,體現多態(tài)性

  7. 接口,實際上可以看做是一種規(guī)范

使用舉例:不同的設備通過USB口接入電腦

class Computer{
	
	public void transferData(USB usb){//USB usb = new Flash();
		usb.start();
		
		System.out.println("具體傳輸數據的細節(jié)");
		
		usb.stop();
	}
	
	
}

interface USB{
	//常量:定義了長、寬、最大最小的傳輸速度等
	
	void start();
	
	void stop();
	
}

class Flash implements USB{

	@Override
	public void start() {
		System.out.println("U盤開啟工作");
	}

	@Override
	public void stop() {
		System.out.println("U盤結束工作");
	}
	
}

class Printer implements USB{
	@Override
	public void start() {
		System.out.println("打印機開啟工作");
	}

	@Override
	public void stop() {
		System.out.println("打印機結束工作");
	}
	
}

使用總結

  1. 接口使用上也滿足多態(tài)性

  2. 接口,實際上就是定義了一種規(guī)范

  3. 開發(fā)中,體會面向接口編程!

2. 面向接口編程的思想

Java中如何使用關鍵字

面向接口編程:我們在應用程序中,調用的結構都是JDBC中定義的接口,不會出現具體某一個 數據庫廠商的API。

3. Java8中關于接口的新規(guī)范

  • JDK7及以前:只能定義全局常量和抽象方法

    • 全局常量:public static final的,書寫時可以省略不寫

    • 抽象方法:public abstract的

  • JDK8:除了定義全局常量和抽象方法之外,還可以定義靜態(tài)方法、默認方法

    • Java8中,可以為接口添加靜態(tài)方法和默認方法。從技術角度來說,這是完全合法的,只是它看起來違反了接口作為一個抽象定義的理念。

    • 靜態(tài)方法:使用 static關鍵字修飾。

      可以通過接口直接調用靜態(tài)方法,并執(zhí)行其方法體。我們經常在相互一起使用的類中使用靜態(tài)方法。你可以在標準庫中找到像 Collection/co| ections或者Path/ Paths這樣成對的接口和類。

    • 默認方法:默認方法使用 default關鍵字修飾。

    • 可以通過實現類對象來調用。我們在已有的接口中提供新方法的同時,還保持了與舊版本代碼的兼容性比如:java8API中對 Collection、List、 Comparator等接口提供了豐富的默認方法。

JDK 8后接口使用總結

  • 知識點1:接口中定義的靜態(tài)方法,只能通過接口來調用。

  • 知識點2:通過實現類的對象,可以調用接口中的默認方法。

    如果實現類重寫了接口中的默認方法,調用時,仍然調用的是重寫以后的方法

  • 知識點3:如果子類(或實現類)繼承的父類和實現的接口中聲明了同名同參數的默認方法,那么子類在沒重寫此方法的情況下,默認調用的是父類中的同名同參數的方法。-->類優(yōu)先原則

  • 知識點4:如果實現類實現了多個接口,而這多個接口中定義了同名同參數的默認方法,

    那么在實現類沒重寫此方法的情況下,報錯。-->接口沖突。

    這就需要我們必須在實現類中重寫此方法

  • 知識點5:如何在子類(或實現類)的方法中調用父類、接口中被重寫的方法

public void myMethod(){
		method3();//調用自己定義的重寫的方法
		super.method3();//調用的是父類中聲明的
		//調用接口中的默認方法
		CompareA.super.method3();
		CompareB.super.method3();
}

4. 面試題:

抽象類和接口的異同? 相同點:都不能實例化;都可以被繼承;都可以包含抽象方法的。

不同點:

抽象類:有構造器。接口:沒有構造器

1)把抽象類和接口(java7,java8,java9)的定義、內部結構解釋說明

2)類:單繼承性 接口:多繼承

類與接口:多實現

5. 代理模式

5.1. 解決的問題

代理模式是Java開發(fā)中使用較多的一種設計模式。代理設計就是為其他對象提供一種代理以控制對這個對象的訪問。

代碼示例

interface NetWork{
	
	public void browse();
	
}

//被代理類
class Server implements NetWork{

	@Override
	public void browse() {
		System.out.println("真實的服務器訪問網絡");
	}

}
//代理類
class ProxyServer implements NetWork{
	
	private NetWork work;
	
	public ProxyServer(NetWork work){
		this.work = work;
	}
	

	public void check(){
		System.out.println("聯(lián)網之前的檢查工作");
	}
	
	@Override
	public void browse() {
		check();
		
		work.browse();
		
	}
	
}
5.2 應用場景
  • 安全代理:屏蔽對真實角色的直接訪問

  • 遠程代理:通過代理類處理遠程方法調用(RM)

  • 延遲加載:先加載輕量級的代理對象,真正需要再加載真實對象 比如你要開發(fā)一個大文檔查看軟件,大文檔中有大的圖片,有可能一個圖片有100MB,在打開文件時,不可能將所有的圖片都顯示出來,這樣就可以使用代理模式,當需要查看圖片時,用 proxy來進行大圖片的打開。

5.3 分類
  • 靜態(tài)代理(靜態(tài)定義代理類)

  • 動態(tài)代理(動態(tài)生成代理類)JDK自帶的動態(tài)代理,需要反射等知識

6. 工廠的設計模式

解決的問題

實現了創(chuàng)建者與調用者的分離,即將創(chuàng)建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

具體模式:

  • 簡單工廠模式:用來生產同一等級結構中的任意產品。(對于增加新的產品,需要修改已有代碼)

  • 工廠方法模式:用來生產同一等級結構中的固定產品。(支持增加任意產品)

  • 抽象工廠模式:用來生產不同產品族的全部產品。(對于增加新的產品,無能為力;支持增加產品族)

看完上述內容,你們對Java中如何使用關鍵字有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI