最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

JAVA期末復(fù)習(xí)攻略2022學(xué)年酸奶公園出品

2022-11-17 13:44 作者:酸奶公園  | 我要投稿

Java期末復(fù)習(xí)攻略

?

?

?

Java期末復(fù)習(xí)攻略

第一章 Java概述

Java運行原理

1.編寫

2.編譯

3.運行

JDK簡介

Java程序的分類

Application

Applet

Serverlets

1. Java區(qū)分大小寫

第二章 基本符號

變量

實例

Java 局部變量

實例 1

實例 2

實例變量

實例

類變量(靜態(tài)變量)

實例:

標識符

標識符組成

命名約定

Java的基本符號

1.注釋(單行注釋,多行注釋,文檔注釋)

(1)什么是注釋?請寫出單行注釋,多行注釋,以及文檔注釋

2.標識符規(guī)則_駝峰規(guī)則

(2)標識符的作用是什么,標識符的聲明需要遵循哪些規(guī)則,哪些規(guī)范,標識符可以使用漢字么?

(3)將課上的代碼敲兩遍,體驗一下標識符的聲明規(guī)則和規(guī)范

1.Java的關(guān)鍵字保留字

(1)將文檔中的關(guān)鍵字都手寫一遍,混個臉熟

2.變量的本質(zhì)_聲明格式和初始化問題

(1)變量的本質(zhì)是什么?

(2)變量的要素是哪三點?

3.變量分類(局部變量,成員變量,靜態(tài)變量)

(1)什么是局部變量?什么是成員變量?什么是靜態(tài)變量?它們的生命周期分別是?

局部變量:

成員變量;

靜態(tài)變量

4.常量和final

(1)什么是常量,什么是字面常量?什么是符號常量?

(2)變量和常量的命名規(guī)則有哪些?

5.基本數(shù)據(jù)類型介紹

(1)數(shù)據(jù)類型分為哪兩大類?

(2)基本數(shù)據(jù)類型中有幾大類?又細分為哪幾種?分別占據(jù)的空間是多少?

3大類

數(shù)值型:

浮點型 float 4字節(jié) double 8字節(jié)

字符型

布爾型

6.整型變量和整型常量

(1)整型分為哪幾種?整型常數(shù)默認為什么類型?

(2)整型常量的表示形式有哪幾種?分別是什么樣的格式?

7.浮點型變量和BigDecimal的使用

(1)浮點型的表示形式有幾種?分別是什么樣的格式?

(2)浮點型有幾種?分別精確到幾位有效數(shù)字?

(3)浮點型適合金融領(lǐng)域么?金融領(lǐng)域用什么比較好?

8.字符串類型_轉(zhuǎn)義字符

(1)表示一個char類型,用單引號還是雙引號?

(2)char類型占幾個字節(jié)?一個漢字占幾個字節(jié)?一個char變量能存儲一個漢字么?

2字節(jié) 2字節(jié) 能

(3)什么是轉(zhuǎn)義字符?

9.布爾型_if語句的使用要點

(1)布爾型的值有哪些,占用多少存儲空間?

(2)布爾值一般配合什么關(guān)鍵字一起使用?

10.運算符介紹

(1)運算符有哪些?

算數(shù)運算符

(1)算數(shù)運算符分為哪些?整型做運算,浮點數(shù)做運算,有什么需要注意的?

(2)取余操作,余數(shù)與誰的符號一致?

(3)++ – 操作在數(shù)字前后有什么區(qū)別?

賦值和賦值擴展運算符

(1)Int a =3 ,把誰賦值給了誰?

3賦值給了a

(2) A += 3 等價于什么?

關(guān)系運算符

(1)關(guān)系運算符的結(jié)果是什么?分別有哪些關(guān)系運算符,代表什么意思?

邏輯運算符_短路運算詳解

(1)邏輯運算符操作的是什么?邏輯與邏輯或的規(guī)則是什么?

(2)什么是短路與,短路或?

位運算符

(1)位運算符有哪些?分別代表什么意思?

(2)& 和 | 左右側(cè)如果是布爾值,就是邏輯運算符,如果是數(shù)字,就是位運算符,這句話對么?

(3)怎么樣計算3*16最快?

字符串連接符

(1)字符串是基本數(shù)據(jù)類型么?什么時候加號會變成字符串連接符?

條件運算符

(1)條件運算符的格式是什么?

(2)條件運算符也成為三目運算符,三目運算也可以用什么來代替

數(shù)據(jù)類型

1、 整數(shù)數(shù)據(jù)類型

2、 小數(shù)數(shù)據(jù)類型

3、 字符數(shù)據(jù)類型

4、 布爾數(shù)據(jù)類型

數(shù)據(jù)類型轉(zhuǎn)換

一、自動類型轉(zhuǎn)換

首先我們要了解自動類型轉(zhuǎn)換是什么,為什么要進行自動類型轉(zhuǎn)換呢?

注意事項

1.在表達式中,表達式的最終結(jié)果類型由表達式的最高類型決定。

二、強制類型轉(zhuǎn)換

為什么要進行強制類型轉(zhuǎn)換,強制類型轉(zhuǎn)換是什么?

運算符

保留字

1.定義數(shù)據(jù)類型(16)

2.用于流程控制(10)

3.用于修飾變量(常量)、方法、類(接口)和包等(16)

4.異常處理(6)

5.無意義保留字(2)

6.非關(guān)鍵字類型(3)

轉(zhuǎn)義字符

null符號

Void符號

一、void含義

二、void的作用

注釋

1、單行注釋

2、多行注釋

3、文檔注釋

Math類

Scanner類

3. Unicode 是一種字符編碼

第三章 選擇結(jié)構(gòu)

if語句

1:if語法

2:if --- else ---

3:if-- else if-- else

4:嵌套if

Switch語句

第四章 循環(huán)結(jié)構(gòu)

for循環(huán)

while循環(huán)

do while循環(huán)

continue和break

第五章 方法與重載

方法定義

方法調(diào)用

方法重載

3.與返回值、訪問修飾符無關(guān)。

第六章 類與對象

面對對象

類的定義

對象的創(chuàng)建

方法的調(diào)用

1.調(diào)用靜態(tài)方法

2非靜態(tài)方法

3.方法與方法之間的調(diào)用

(1)靜態(tài)方法內(nèi)部調(diào)用其他方法

(2)非靜態(tài)方法內(nèi)部調(diào)用

給方法傳遞對象參數(shù)

變量的作用域

This關(guān)鍵字

Static關(guān)鍵字

3.static修飾的變量是靜態(tài)變量

第七章 封裝

可見性修飾符

訪問器方法

第八章 繼承

繼承

· Java是單繼承模式:一個類只能繼承一個直接父類

方法的覆蓋

繼承關(guān)系中的構(gòu)造方法和super關(guān)鍵字

(2)當子類的成員出現(xiàn)同名時,可以用super來區(qū)分

Object類及其常用方法

1.toString()

2.hashCode()

3.equals()

Final關(guān)鍵字

Final關(guān)鍵字

第九章 多態(tài)

多態(tài)

父類子類對象的使用與轉(zhuǎn)化

Instanceof運算符

第十章 抽象類和接口

抽象類

接口

內(nèi)部類

第十一章 Lambda表達式

函數(shù)式接口

Lambda表達式

第十二章 異常與斷言

異常的概念

一、異常的概念以及常見的異常

2、常見的異常:數(shù)組索引越界、空指針異常、日期格式化異常,等

二、異常的體系

異常的處理

Finally子句

1.通過代碼強行使程序走到finally塊前停止。

2.出現(xiàn)“天災(zāi)”

Java的斷言機制

第十三章 字符串與日期

封裝類

數(shù)字的格式化

DecimalFormat

2,DecimalFormat 類包含一個模式和一組符號

正則表達式

單個符號

1、英文句點.符號:匹配單個任意字符。

4、表示匹配次數(shù)的符號

6、\S符號:非空字符

快捷符號

常用的正則表達式

3、JavaScript:/^\w+$/匹配字母數(shù)字下劃線。

日期

第十四章 數(shù)組

數(shù)組的基本知識

4、數(shù)組當中可以存儲基本數(shù)據(jù)類型也可以存取引用數(shù)據(jù)類型

6、數(shù)組在內(nèi)存方法是怎樣的

13、數(shù)組中首元素的地址作為整個數(shù)組對象的地址

15、數(shù)組的優(yōu)缺點

16、如何聲明、定義一個數(shù)組?

17、怎么初始化一個一維數(shù)組

18、當一個方法的參數(shù)是一個數(shù)組

21、一維數(shù)組擴容

(1)在Java中數(shù)組一旦確定,長度不可變

數(shù)組的復(fù)制

數(shù)組的排序

1、使用Arrays.sort()排序

2、冒泡排序

3、選擇排序

4、反轉(zhuǎn)排序

5、直接插入排序

數(shù)組的查找

普通查找

二分法查找

Arrays類

第十五章 集合

集合類概述

Collection接口

1、Collection接口包括的主要方法:

1)添加元素:

2)刪除元素:

3)查詢:

(1)查詢元素

(2)查詢集合

4)遍歷元素

5)轉(zhuǎn)換數(shù)組:

2、Collection接口的定義:

3、Iterable接口的定義方法:

4、Iterable是Java集合類中的一個重要接口,Iterable接口不用于存儲元素,而用來遍歷已有集合中的元素。例如List、Set和Map等。(于Set而言,Iterable是遍歷其中元素的唯一途徑)

5、在Collection的子接口中,List中的元素有位置(即index),而Set中的元素沒有位置和順序。

Llist集合

Set集合

Map集合

迭代器

泛型

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

第一章?Java概述

Java運行原理?

1.編寫

編寫是指在Java開發(fā)環(huán)境中進行程序代碼的編輯,最終生成后綴名為“.java”的Java源文件。

2.編譯

編譯是指使用Java編譯器對源文件進行錯誤排查的過程,編譯后將生成后綴名為.class的字節(jié)碼文件,該文件可以被Java虛擬機(JVM)的解釋器正常讀取。

3.運行

運行是指使用Java解釋器將字節(jié)碼文件翻譯成機器代碼,執(zhí)行并顯示結(jié)果。字節(jié)碼文件是一種和任何具體機器環(huán)境及操作系統(tǒng)環(huán)境無關(guān)的中間代碼,它是一種二進制文件,是Java源文件由Java編譯器編譯后生成的目標代碼文件。編程人員和計算機都無法直接讀懂字節(jié)碼文件,它必須由專用的Java解釋器來解釋執(zhí)行,因此Java是一種在編譯基礎(chǔ)上進行解釋運行的語言。

在運行Java程序時,首先會啟動JVM,然后由它來負責(zé)解釋執(zhí)行Java的字節(jié)碼,并且Java字節(jié)碼只能運行于JVM之上。這樣利用JVM就可以把Java字節(jié)碼程序和具體的硬件平臺以及操作系統(tǒng)環(huán)境分隔開來,只要在不同的計算機上安裝了針對于特定具體平臺的JVM,Java程序就可以運行,而不用考慮當前具體的硬件平臺及操作系統(tǒng)環(huán)境,也不用考慮字節(jié)碼文件是在何種平臺上生成的。JVM把這種不同軟硬件平臺的具體差別隱藏起來,從而實現(xiàn)了真正的二進制代碼級的跨平臺移植。JVM是Java平臺無關(guān)的基礎(chǔ),Java的跨平臺特性正是通過在JVM中運行Java程序?qū)崿F(xiàn)的。

JDK簡介

JDK是?Java?語言的軟件開發(fā)工具包,主要用于移動設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。JDK是整個java開發(fā)的核心,它包含了JAVA的運行環(huán)境(JVM+Java系統(tǒng)類庫)和JAVA工具。

Java程序的分類

Application

―Java應(yīng)用程序”是可以獨立運行的Java程序。

由Java解釋器控制執(zhí)行。

Applet

―Java小程序”不能獨立運行(嵌入到Web頁中)。

由Java兼容瀏覽器控制執(zhí)行。

Serverlets

是Java技術(shù)對CGI 編程的解決方案。

是運行于Web server上的、作為來自于Web browser 或其他HTTP client端的請求和在server上的數(shù)據(jù)庫及其他應(yīng)用程序之間的中間層程序。

Serverlets的工作是:

讀入用戶發(fā)來的數(shù)據(jù)(通常在web頁的form中)

找出隱含在HTTP請求中的其他請求信息(如瀏覽器功能細節(jié)、請求端主機名等。

產(chǎn)生結(jié)果(調(diào)用其他程序、訪問數(shù)據(jù)庫、直接計算)

格式化結(jié)果(網(wǎng)頁)

設(shè)置HTTP response參數(shù)(如告訴瀏覽器返回文檔格式)

將文檔返回給客戶端。

1.?Java區(qū)分大小寫

2.?Java源程序文件的擴展名是.java。字節(jié)碼文件的擴展名是.class。

3.?編譯Java程序的命令是javaco

4.?運行Java程序的命令是java

第二章?基本符號

變量

在Java語言中,所有的變量在使用前必須聲明。聲明變量的基本格式如下:

type identifier [ = value][, identifier [= value] ...] ;

格式說明:type為Java數(shù)據(jù)類型。identifier是變量名。可以使用逗號隔開來聲明多個同類型變量。

以下列出了一些變量的聲明實例。注意有些包含了初始化過程。

int a, b, c;???????? // 聲明三個int型整數(shù):a、 b、c int d = 3, e = 4, f = 5; // 聲明三個整數(shù)并賦予初值 byte z = 22;???????? // 聲明并初始化 z String s = "runoob"; // 聲明并初始化字符串 s double pi = 3.14159; // 聲明了雙精度浮點型變量 pi char x = 'x';??????? // 聲明變量 x 的值是字符 'x'。

Java語言支持的變量類型有:

類變量:獨立于方法之外的變量,用 static 修飾。

實例變量:獨立于方法之外的變量,不過沒有 static 修飾。

局部變量:類的方法中的變量。

實例

public class Variable{ static int allClicks=0; // 類變量 String str="hello world"; // 實例變量 public void method(){ int i =0; // 局部變量 } }

Java 局部變量

局部變量聲明在方法、構(gòu)造方法或者語句塊中;

局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行的時候創(chuàng)建,當它們執(zhí)行完成后,變量將會被銷毀;

訪問修飾符不能用于局部變量;

局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見;

局部變量是在棧上分配的。

局部變量沒有默認值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。

實例 1

在以下實例中age是一個局部變量。定義在pupAge()方法中,它的作用域就限制在這個方法中。

package com.runoob.test; public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("小狗的年齡是: " + age); } public static void main(String[] args){ Test test = new Test(); test.pupAge(); } }

以上實例編譯運行結(jié)果如下:

小狗的年齡是: 7

實例 2

在下面的例子中 age 變量沒有初始化,所以在編譯時會出錯:

package com.runoob.test; public class Test{ public void pupAge(){ int age; age = age + 7; System.out.println("小狗的年齡是 : " + age); } public static void main(String[] args){ Test test = new Test(); test.pupAge(); } }

以上實例編譯運行結(jié)果如下:

Test.java:4:variable number might not have been initialized

age = age + 7;

^1 error

實例變量

實例變量聲明在一個類中,但在方法、構(gòu)造方法和語句塊之外;

當一個對象被實例化之后,每個實例變量的值就跟著確定;

實例變量在對象創(chuàng)建的時候創(chuàng)建,在對象被銷毀的時候銷毀;

實例變量的值應(yīng)該至少被一個方法、構(gòu)造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;

實例變量可以聲明在使用前或者使用后;

訪問修飾符可以修飾實例變量;

實例變量對于類中的方法、構(gòu)造方法或者語句塊是可見的。一般情況下應(yīng)該把實例變量設(shè)為私有。通過使用訪問修飾符可以使實例變量對子類可見;

實例變量具有默認值。數(shù)值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值可以在聲明時指定,也可以在構(gòu)造方法中指定;

實例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中,就應(yīng)該使用完全限定名:ObjectReference.VariableName。

實例

Employee.java 文件代碼:

import java.io.*; public class Employee{ // 這個實例變量對子類可見 public String name; // 私有變量,僅在該類可見 private double salary; //在構(gòu)造器中對name賦值 public Employee (String empName){ name = empName; } //設(shè)定salary的值 public void setSalary(double empSal){ salary = empSal; } // 打印信息 public void printEmp(){ System.out.println("名字 : " + name ); System.out.println("薪水 : " + salary); } public static void main(String[] args){ Employee empOne = new Employee("RUNOOB"); empOne.setSalary(1000.0); empOne.printEmp(); } }

以上實例編譯運行結(jié)果如下:

$ javac Employee.java

$ java Employee名字 : RUNOOB薪水 : 1000.0



類變量(靜態(tài)變量)

類變量也稱為靜態(tài)變量,在類中以 static 關(guān)鍵字聲明,但必須在方法之外。

無論一個類創(chuàng)建了多少個對象,類只擁有類變量的一份拷貝。

靜態(tài)變量除了被聲明為常量外很少使用,靜態(tài)變量是指聲明為 public/private,final 和 static 類型的變量。靜態(tài)變量初始化后不可改變。

靜態(tài)變量儲存在靜態(tài)存儲區(qū)。經(jīng)常被聲明為常量,很少單獨使用 static 聲明變量。

靜態(tài)變量在第一次被訪問時創(chuàng)建,在程序結(jié)束時銷毀。

與實例變量具有相似的可見性。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為 public 類型。

默認值和實例變量相似。數(shù)值型變量默認值是 0,布爾型默認值是 false,引用類型默認值是 null。變量的值可以在聲明的時候指定,也可以在構(gòu)造方法中指定。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化。

靜態(tài)變量可以通過:ClassName.VariableName的方式訪問。

類變量被聲明為 public static final 類型時,類變量名稱一般建議使用大寫字母。如果靜態(tài)變量不是 public 和 final 類型,其命名方式與實例變量以及局部變量的命名方式一致。

實例:

Employee.java 文件代碼:

import java.io.*; public class Employee { //salary是靜態(tài)的私有變量 private static double salary; // DEPARTMENT是一個常量 public static final String DEPARTMENT = "開發(fā)人員"; public static void main(String[] args){ salary = 10000; System.out.println(DEPARTMENT+"平均工資:"+salary); } }

以上實例編譯運行結(jié)果如下:

開發(fā)人員平均工資:10000.0

注意:如果其他類想要訪問該變量,可以這樣訪問:Employee.DEPARTMENT。

標識符

Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。

Java語言中,對于變量,常量,函數(shù),語句塊也有名字,我們統(tǒng)統(tǒng)稱之為Java標識符。

標識符組成

Java標識符由數(shù)字,字母和下劃線(_),美元符號($)或人民幣符號(¥)組成。在Java中是區(qū)分大小寫的,而且還要求首位不能是數(shù)字。最重要的是,Java關(guān)鍵字不能當作Java標識符。

下面的標識符是合法的:

myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_

下面的標識符是非法的:

#name,25name,class,&time,if

命名約定

1.類和接口名。每個字的首字母大寫,含有大小寫。例如,MyClass,HelloWorld,Time等。

2.方法名。首字符小寫,其余的首字母大寫,含大小寫。盡量少用下劃線。例如,myName,setTime等。這種命名方法叫做駝峰式命名。

3.常量名?;緮?shù)據(jù)類型的常量名使用全部大寫字母,字與字之間用下劃線分隔。對象常量可大小混寫。例如,SIZE_NAME。

4.變量名??纱笮懟鞂懀鬃址?,字間分隔符用字的首字母大寫。不用下劃線,少用美元符號。給變量命名是盡量做到見名知義。

Java的基本符號?

1.注釋(單行注釋,多行注釋,文檔注釋)

(1)什么是注釋?請寫出單行注釋,多行注釋,以及文檔注釋

為了方便程序的閱讀,Java語言允許程序員在程序中寫上一些說明性的文字,用來提高程序的可讀性,這些文字性的說明就稱為注釋。

單行注釋:使用“//”開頭,“//”后面的單行內(nèi)容均為注釋

多行注釋:以“/”開頭以“/”結(jié)尾

文檔注釋:以“/**”開頭以“*/”結(jié)尾

2.標識符規(guī)則_駝峰規(guī)則

(2)標識符的作用是什么,標識符的聲明需要遵循哪些規(guī)則,哪些規(guī)范,標識符可以使用漢字么?

標識符是用來給變量、類、方法以及包進行命名的;不可以。

(3)將課上的代碼敲兩遍,體驗一下標識符的聲明規(guī)則和規(guī)范

1.Java的關(guān)鍵字保留字

(1)將文檔中的關(guān)鍵字都手寫一遍,混個臉熟

Abstract assert Boolean break byte case

Catch char class const continue default

Do double else extends final finally

Float for goto if implements import

Instanceof int interface long native new

Null package private protected public return

Short statics strictfp super switch synchronized

This throw throws transient try void

Volatile while

2.變量的本質(zhì)_聲明格式和初始化問題

(1)變量的本質(zhì)是什么?

可操作的存儲空間

(2)變量的要素是哪三點?

變量名稱 變量類型 作用域

3.變量分類(局部變量,成員變量,靜態(tài)變量)

(1)什么是局部變量?什么是成員變量?什么是靜態(tài)變量?它們的生命周期分別是?

局部變量:方法或語句塊內(nèi)部定義的變量。生命周期是從聲明位置開始到到方法或語句塊執(zhí)行完畢為止。

成員變量;方法外部、類的內(nèi)部定義的變量。從屬于對象,生命周期伴隨對象始終。

靜態(tài)變量;使用static定義。 從屬于類,生命周期伴隨類始終,從類加載到卸載。

4.常量和final

(1)什么是常量,什么是字面常量?什么是符號常量?

常量通常指的是一個固定的值;

將1,2,3,a,b,true,false等稱為字面常量

Final修飾的 PI稱為符號常量

(2)變量和常量的命名規(guī)則有哪些?

1.見名知意

2.首字母小寫和駝峰規(guī)則

5.基本數(shù)據(jù)類型介紹

(1)數(shù)據(jù)類型分為哪兩大類?

基本數(shù)據(jù)類型 引用數(shù)據(jù)類型

(2)基本數(shù)據(jù)類型中有幾大類?又細分為哪幾種?分別占據(jù)的空間是多少?

3大類?

數(shù)值型:?整數(shù)類型byte1字節(jié)short2字節(jié)int4字節(jié)long8字節(jié)

浮點型?float 4字節(jié) double 8字節(jié)

字符型: char 2字節(jié)

布爾型: 1位

6.整型變量和整型常量

(1)整型分為哪幾種?整型常數(shù)默認為什么類型?

4種 byte-128~127 short-32768~32767 int long int為默認

(2)整型常量的表示形式有哪幾種?分別是什么樣的格式?

四種表現(xiàn)形式 , 十 , 八:以0開頭 , 十六:以0x開頭 , 二進制:0b開頭

7.浮點型變量和BigDecimal的使用

(1)浮點型的表示形式有幾種?分別是什么樣的格式?

十進制數(shù)形式,例如:3.14 314.0 0.314

科學(xué)記數(shù)法形式,如314e2 314E2 314E-2

·

(2)浮點型有幾種?分別精確到幾位有效數(shù)字?

兩種 ,float 7位

double 14位

(3)浮點型適合金融領(lǐng)域么?金融領(lǐng)域用什么比較好?

不適用 BinDecimal

8.字符串類型_轉(zhuǎn)義字符

(1)表示一個char類型,用單引號還是雙引號?

單引號

(2)char類型占幾個字節(jié)?一個漢字占幾個字節(jié)?一個char變量能存儲一個漢字么?

2字節(jié) 2字節(jié) 能

(3)什么是轉(zhuǎn)義字符?

用\將后面字符換變?yōu)槠渌x

9.布爾型_if語句的使用要點

(1)布爾型的值有哪些,占用多少存儲空間?

True,false 占1位

(2)布爾值一般配合什么關(guān)鍵字一起使用?

Boolean

10.運算符介紹

(1)運算符有哪些?

算術(shù)運算符 邏輯運算符 賦值運算符 條件運算符 關(guān)系運算符 擴展運算符 位運算符 字符串運算符

算數(shù)運算符

(1)算數(shù)運算符分為哪些?整型做運算,浮點數(shù)做運算,有什么需要注意的?

算術(shù)運算符:二元運算符:+,-,,/,%

一元運算符:++,–

整數(shù)/整數(shù) 得整數(shù)

有 long 結(jié)果為long

有double 結(jié)果為double

只有兩個為float 結(jié)果才為float

(2)取余操作,余數(shù)與誰的符號一致?

符號和左邊操作數(shù)相同

(3)++ – 操作在數(shù)字前后有什么區(qū)別?

判斷是先加先減還是后加后減

賦值和賦值擴展運算符

(1)Int a =3 ,把誰賦值給了誰?

3賦值給了a

(2) A += 3 等價于什么?

a = a + 3

關(guān)系運算符

(1)關(guān)系運算符的結(jié)果是什么?分別有哪些關(guān)系運算符,代表什么意思?

結(jié)果為 ture或false

邏輯運算符_短路運算詳解

(1)邏輯運算符操作的是什么?邏輯與邏輯或的規(guī)則是什么?

運算符 說明

邏輯與 &( 與) 兩個操作數(shù)為true,結(jié)果才是true,否則是false

邏輯或 |(或) 兩個操作數(shù)有一個是true,結(jié)果就是true

短路與 &&( 與) 只要有一個為false,則直接返回false

短路或 ||(或) 只要有一個為true, 則直接返回true

邏輯非 !(非) 取反:!false為true,!true為false

邏輯異或 ^(異或) 相同為false,不同為true

(2)什么是短路與,短路或?

短路與 &&( 與) 只要有一個為false,則直接返回false

短路或 ||(或) 只要有一個為true, 則直接返回true

位運算符

(1)位運算符有哪些?分別代表什么意思?

位運算符 說明

~ 取反

& 按位與

| 按位或

^ 按位異或

<< 左移運算符,左移1位相當于乘2

右移運算符,右移1位相當于除2取商

(2)& 和 | 左右側(cè)如果是布爾值,就是邏輯運算符,如果是數(shù)字,就是位運算符,這句話對么?

后半句不對,如果兩側(cè)的操作數(shù)是整數(shù)類型,就是位運算符

(3)怎么樣計算3*16最快?

3<<4

字符串連接符

(1)字符串是基本數(shù)據(jù)類型么?什么時候加號會變成字符串連接符?

不是 ,是對象 ;“+”運算符兩側(cè)的操作數(shù)中只要有一個是字符串(String)類型,系統(tǒng)會自動將另一個操作數(shù)轉(zhuǎn)換為字符串然后再進行連接。

條件運算符

(1)條件運算符的格式是什么?

X ? Y : Z

(2)條件運算符也成為三目運算符,三目運算也可以用什么來代替

If else

數(shù)據(jù)類型

1、 整數(shù)數(shù)據(jù)類型

byte:1個字節(jié),8位,256種狀態(tài),取值范圍為【-128,127】

short:2個字節(jié),16位,65536種狀態(tài),取值范圍為【-32768,32767】

int:4個字節(jié),32位,整數(shù)類型默認是int類型,取值范圍約21億

long:8個字節(jié),64位,long類型表示long類型常量,要加L或者l,建議加L

2、 小數(shù)數(shù)據(jù)類型

float:4個字節(jié),32位,單精度,能精確到6~7位,聲明一個小數(shù)類型,要加F或者f,建議加F

double:8個字節(jié),64位,雙精度,能精確到15~16位,小數(shù)類型默認是double類型

3、 字符數(shù)據(jù)類型

char:2個字節(jié),16位,字符表示Unicode(萬國碼)編碼表中的每一個符號,每個符號使用單引號引起來,其中前128個符號和ASCII表相同

4、 布爾數(shù)據(jù)類型

boolean:占1位,有true和false2個值,一個表示真,一個表示假,一般用于表示邏輯運算

數(shù)據(jù)類型轉(zhuǎn)換

一、自動類型轉(zhuǎn)換

首先我們要了解自動類型轉(zhuǎn)換是什么,為什么要進行自動類型轉(zhuǎn)換呢?

1.自動類型轉(zhuǎn)換就是類型范圍小的變量,可以直接賦值給類型范圍大的變量。比如以下代碼:

其中int類型的范圍大于byte類型,故a的值可以直接賦予b,這就叫自動類型轉(zhuǎn)換。

2.自動類型轉(zhuǎn)換就是讓存在不同類型的變量賦值給其他類型的變量。簡而言之就是讓類型小的數(shù)據(jù)可以直接賦值給類型大的數(shù)據(jù),讓數(shù)據(jù)類型大的去得到它。

數(shù)據(jù)類型的大小關(guān)系,從小到大:

byte→short→char→int→long→float→double

注意事項

1.在表達式中,表達式的最終結(jié)果類型由表達式的最高類型決定。

2.在表達式中,byte 、short、char是直接轉(zhuǎn)換成int類型參與運算的。

二、強制類型轉(zhuǎn)換

為什么要進行強制類型轉(zhuǎn)換,強制類型轉(zhuǎn)換是什么?

1.類型范圍大的數(shù)據(jù)或者變量是不能直接賦值給類型范圍小的變量的,所以就必須使用強制類型轉(zhuǎn)換來幫忙實現(xiàn)數(shù)據(jù)的轉(zhuǎn)換。

2.強制類型轉(zhuǎn)換就是可以強制將類型范圍大的數(shù)據(jù)或者變量賦值給類型范圍小的變量。

3.強制類型轉(zhuǎn)換的一般寫法: 數(shù)據(jù)類型 變量2 = (數(shù)據(jù)類型)變量 ;

運算符

?

?

保留字?

1.定義數(shù)據(jù)類型(16)

基本數(shù)據(jù)類型(8):boolean,byte,char,int,short,long,float,double

實例相關(guān)(4):new,this,super,instanceof

其他類型(4):class,interface,enum,void

2.用于流程控制(10)

選擇(5):if,else,switch,case,break

循環(huán)(3):do,while,for

其他(2):continue,return

3.用于修飾變量(常量)、方法、類(接口)和包等(16)

訪問權(quán)限(4):private,protected,public,default

類、接口間關(guān)系(2):extends,implements

包相關(guān)(2):import,package

常用(4):abstract,final,static,synchronized

不常用(4):native,strictfp,transient, volatile

4.異常處理(6):try,catch,throw,throws,finally,assert

5.無意義保留字(2):goto,const

6.非關(guān)鍵字類型(3):false,true,null

轉(zhuǎn)義字符

?

null符號

null是代表不確定的對象

Java中,null是一個關(guān)鍵字,用來標識一個不確定的對象。因此可以將null賦給引用類型變量,但不可以將null賦給基本類型變量。

比如:int a = null;是錯誤的。Ojbect o = null是正確的。

Java中,變量的適用都遵循一個原則,先定義,并且初始化后,才可以使用。我們不能在int a后,不給a賦值,就去打印a的值。這條對對于引用類型變量也是適用的。

有時候,我們定義一個引用類型變量,在剛開始的時候,無法給出一個確定的值,但是不指定值,程序可能會在try語句塊中初始化值。這時候,我們下面使用變量的時候就會報錯。這時候,可以先給變量指定一個null值,問題就解決了。

Void符號

一、void含義

void是無返回值的意思

void的字面意思是“無類型”,void *則為“無類型指針”,void *可以指向任何類型的數(shù)據(jù)。void幾乎只有“注釋”和限制程序的作用,定義一個void變量沒有意義。

二、void的作用?

void的作用在于對函數(shù)返回的限定以及對函數(shù)參數(shù)的限定。如果7a6431333366306535JAVA里指針p1和p2的類型相同,那么我們可以直接在p1和p2間互相賦值,如果p1和p2指向不同的數(shù)據(jù)類型,則必須使用強制類型轉(zhuǎn)換運算符把賦值運算符右邊的指針類型轉(zhuǎn)換為左邊指針的類型。

注釋

1、單行注釋

以雙斜杠“//”標識,只能注釋一行內(nèi)容,用在注釋信息內(nèi)容少的地方。打開 Eclipse,在 Java 代碼中使用單行注釋。

2、多行注釋

包含在“/*”和“*/”之間,能注釋很多行的內(nèi)容。為了可讀性比較好,一般首行和尾行不寫注釋信息(這樣也比較美觀好看)。

注意:多行注釋可以嵌套單行注釋,但是不能嵌套多行注釋和文檔注釋。

3、文檔注釋

包含在“/**”和“*/”之間,也能注釋多行內(nèi)容,一般用在類、方法和變量上面,用來描述其作用。注釋后,鼠標放在類和變量上面會自動顯示出我們注釋的內(nèi)容。

注意:文檔注釋能嵌套單行注釋,不能嵌套多行注釋和文檔注釋,一般首行和尾行也不寫注釋信息。

Math類

在 Java 中 Math 類封裝了常用的數(shù)學(xué)運算,提供了基本的數(shù)學(xué)操作,如指數(shù)、對數(shù)、平方根和三角函數(shù)等。Math 類位于 java.lang 包,它的構(gòu)造方法是?private?的,因此無法創(chuàng)建 Math 類的對象,并且 Math 類中的所有方法都是類方法,可以直接通過類名來調(diào)用它們。

Scanner類

Scanner類是一個可以解析基本類型和字符串的簡單文本掃描器。

使用Scanner類:通過new一個Scanner對象,從控制臺輸入語句:Scanner s = new Scanner(System.in);

常用的輸入的內(nèi)容分為:

nextInt():輸入整數(shù) ??

nextDouble():輸入雙精度數(shù) ???

nextLine():輸入字符串(包括單詞之間的空格和除回車以外的所有符號)

next():輸入字符串(只從有效字符計算,對輸入有效字符之前遇到的空格鍵、Tab鍵、換行符或Enter鍵等結(jié)束符,next()方法會自動將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結(jié)束符以空格結(jié)束)

1.?數(shù)據(jù)類型的精度由高到低的順序是double, float, int, byte

2.?對于一個三位的正整數(shù)n,取出它的十位數(shù)字k(k為整型)的表達式是k = n/10% 10

3.?Unicode 是一種字符編碼

4.?6+5%3+2 的值是10

5.?-20能正確表示Java語言中的一個整型常量

6.?在Java語言中,邏輯常量只有true和false兩個值

7.?Java中的字符使用的是16位的Unicode編碼

8.?Java語言中的浮點型數(shù)據(jù)根據(jù)數(shù)據(jù)存儲長度和數(shù)值精度的不同,進一步分為float和double 兩種具體類型

第三章 選擇結(jié)構(gòu)

if語句

If語句主要用于分支結(jié)構(gòu),表示判斷的意思,主要分為3種表現(xiàn)方式

1:if語法

If一般用于單個判斷,表示如果的意思;條件成立則會執(zhí)行相應(yīng)的代碼。

語法:

If(表達式){

//代碼塊,當表達式為true時,才會執(zhí)行這里的代碼

}

注意:表達式的結(jié)果必須是一個布爾值,如果條件有多個可以使用邏輯運算符&&-并且, || - 或者, !-非,取反

2:if --- else ---

If-else結(jié)構(gòu)一般用于二選一的情況,如果if成立執(zhí)行if的代碼塊,否則執(zhí)行else中的代碼塊。

If(表達式){

//代碼塊,當表達式為true時,才會執(zhí)行這里的代碼

}else{

//表達式為false時,執(zhí)行這里的代碼

}

3:if-- else if-- else

多重if結(jié)構(gòu)主要用于多重判斷的情況,語法如下:

if(表達式1){

//表達式1為true時,執(zhí)行這里的代碼

}else if(表達式2){

//表達式2為true時,執(zhí)行這里的代碼

}else if(表達式3){

//表達式3為true時,執(zhí)行這里的代碼

}

-----

else{

//所有條件都不滿足的時候,會執(zhí)行這里的代碼

}

If小結(jié):

一次判斷用if語句

兩次判斷(一個真一個假)用if - else 語句

兩次以上判斷使用 if - else if - else

4:嵌套if

嵌套if就是在if判斷語句中還有if判斷的語句,嵌套if控制語句可以通過外層語句和內(nèi)層語句的協(xié)作,增強程序的靈活性。

Switch語句

Switch語句可以實現(xiàn)根據(jù)某一變量選則執(zhí)行代碼塊。當然直接使用If語句也可以做到,但是有時候使用Switch語句往往更加簡潔優(yōu)美。

第四章 循環(huán)結(jié)構(gòu)

for循環(huán)

for 語句是一種在程序執(zhí)行前就要先判斷條件表達式是否為真的循環(huán)語句。假如條件表達式的結(jié)果為假,那么它的循環(huán)語句根本不會執(zhí)行。for 語句通常使用在知道循環(huán)次數(shù)的循環(huán)中。

?

for 語句語法格式如下所示。

for(條件表達式1;條件表達式2;條件表達式3) {

語句塊;

}

for 循環(huán)中 3 個條件表達式的含義如表 1 所示。

表 1 for 循環(huán)中 3 個表達式的含義 表達式 形式 功能 舉例 條件表達式 1 賦值語句 循環(huán)結(jié)構(gòu)的初始部分,為循環(huán)變量賦初值 int i=1 條件表達式 2 條件語句 循環(huán)結(jié)構(gòu)的循環(huán)條件 i>40 條件表達式 3 迭代語句,通常使用

++ 或 -- 運算符 循環(huán)結(jié)構(gòu)的迭代部分,通常用來修改循環(huán)

變量的值 i++

for 關(guān)鍵字后面括號中的 3 個條件表達式必須用“;”隔開。for 循環(huán)中的這 3 部分以及大括號中使循環(huán)體必需的 4 個組成部分完美地結(jié)合在一起,簡單明了。

?

for 循環(huán)語句執(zhí)行的過程為:首先執(zhí)行條件表達式 1 進行初始化,然后判斷條件表達式 2 的值是否為 true,如果為 true,則執(zhí)行循環(huán)體語句塊;否則直接退出循環(huán)。最后執(zhí)行表達式 3,改變循環(huán)變量的值,至此完成一次循環(huán)。接下來進行下一次循環(huán),直到條件表達式 2 的值為 false,才結(jié)束循環(huán)

while循環(huán)

while循環(huán)在每次循環(huán)開始前,先會判斷條件是否成立。如果計算結(jié)果為true,就把循環(huán)體內(nèi)的語句執(zhí)行一遍,如果計算結(jié)果為false,那就直接跳到while循環(huán)的末尾,繼續(xù)往下執(zhí)行。

舉個例子,用while循環(huán)來計算1到100的累加。

public class Main {

public static void main(String[] args) {

int sum = 0; // 累加的和,初始化為0

int n = 1;

while (n <= 100) { // 循環(huán)條件是n <= 100

sum = sum + n; // 把n累加到sum中

n ++; // n自身加1

}

System.out.println(sum); // 5050

}

}

1

2

3

4

5

6

7

8

9

10

11

12

執(zhí)行結(jié)果:

5050

1

值得注意的是while循環(huán)是先判斷循環(huán)條件,再循環(huán),因此,有可能一次循環(huán)都不做。如果循環(huán)條件永遠滿足,那這個循環(huán)就變成了死循環(huán)。死循環(huán)將導(dǎo)致100%的CPU占用,用戶會感覺電腦運行緩慢,所以要避免編寫死循環(huán)代碼。

如果循環(huán)條件的邏輯寫得有問題,也會造成意料之外的結(jié)果。

do while循環(huán)

do-while循環(huán)總是先執(zhí)行循環(huán)體,然后再計算條件表達式。如果表達式為真,則循環(huán)繼續(xù)。否則,循環(huán)結(jié)束。對所有的Java循環(huán)都一樣,條件condition必須是一個布爾表達式。

下面是一個重寫的“tick”程序,用來演示do-while循環(huán)。它的輸出與先前程序的輸出相同。

// Demonstrate the do-while loop.

class DoWhile {

public static void main(String args[]) {

int n = 10;

do {

System.out.println("tick " + n);

n--;

} while(n > 0);

}

}

1

2

3

4

5

6

7

8

9

10

該程序中的循環(huán)雖然在技術(shù)上是正確的,但可以像如下這樣編寫更為高效:

do {

System.out.println("tick " + n);

} while(--n > 0);

1

2

3

在本例中,表達式“-- n > 0 ”將n值的遞減與測試n是否為0組合在一個表達式中。它的執(zhí)行過程是這樣的。首先,執(zhí)行-- n 語句,將變量n遞減,然后返回n的新值。這個值再與0比較,如果比0大,則循環(huán)繼續(xù)。否則結(jié)束。

do-while循環(huán)在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環(huán)體至少執(zhí)行一次。

continue和break?

break的用法:1.break用于switch語句中,終止switch語句

2.break用于循環(huán)時,跳出循環(huán)

3.break用于其他位置時,毫無意義

在循環(huán)結(jié)構(gòu)中,當我們遇到不滿足某些條件時,不需要繼續(xù)執(zhí)行下去,這時就可以用break跳出循環(huán)結(jié)構(gòu)。break通常在循環(huán)中與條件語句一起使用。

continue語句的作用是跳過當前循環(huán)而執(zhí)行下一次循環(huán),它只能用在循環(huán)中。

第五章 方法與重載

方法定義

1.方法的名稱 2.方法返回的數(shù)據(jù)類型 3.方法體(方法里不能定義方法)。

方法的返回值:void是無返回值的,有返回值有return(return跳出方法,給出結(jié)果,返回類型為該方法返回值的類型,只能返回一個值。);

方法只允許單繼承,可以有多個接口。

static靜態(tài)的 調(diào)用為 類名.方法名(),不是靜態(tài)的要實例化然后 對象名.方法名()。

靜態(tài)的方法不能訪問非靜態(tài)的。

方法調(diào)用

第一種:通過對象名.方法名進行調(diào)用,這是最普通的也是最常見的一種調(diào)用方式。

第二種:通過new關(guān)鍵字調(diào)用構(gòu)造方法,這種是在實例化對象時使用的方式。

第三種:通過類名.方法名調(diào)用,當需要調(diào)用的那個方法為靜態(tài)(有static的)方法時使用。

方法重載

1.同一個類中,方法名稱一致;

2.方法參數(shù)的個數(shù)、類型或者順序不一致;

有多個方法名相同,編譯器只能通過獨一無二的參數(shù)列表來表示。參數(shù)個數(shù)、類型、順序不同均可表示。(順序不同也可以區(qū)分兩個方法,但是建議不要這樣用,否則將增加代碼維護的難度)。

3.與返回值、訪問修飾符無關(guān)。

重載的判斷依據(jù)調(diào)用時能否區(qū)分開,故傳入?yún)?shù)類型、參數(shù)個數(shù)都是可以區(qū)分,然而返回類型當調(diào)用時是不能區(qū)分開的(這樣應(yīng)該就可以理解特點2和特點3的原因了吧……——……)。

*區(qū)分重載的方法是只能依據(jù)類名和方法的形參列表作為標準,這種正向使用方法的角度進行判斷更利于程序員的運用。

第六章 類與對象

面對對象

·?面向?qū)ο笫窍鄬γ嫦蜻^程而言

·?面向?qū)ο蠛兔嫦蜻^程都是一種思想

·?面向過程強調(diào)的是功能、行為

·?面向?qū)ο螅簩⒐δ芊庋b進對象,強調(diào)具備了功能的對象

·?面向?qū)ο笫腔诿嫦蜻^程的

類的定義

java類的定義: ???類是一類事物的抽象概念,是一個模型。

java對象: ???對象是由這個模型所創(chuàng)造的一個個具體存在的,實實在在存在的實例。

所以創(chuàng)建對象的過程也叫實例化對象。

類的結(jié)構(gòu):

成員變量:類中的屬性 名詞:品牌,顏色,價格,型號等

方法:類中行為 動詞:行駛,加速,停止。

對象的創(chuàng)建

1. new

2. clone

3. 通過反射newInstance

4. 反序列化

5. String s = “abc”(這個是比較特殊的)

方法的調(diào)用

1.調(diào)用靜態(tài)方法

靜態(tài)方法就是用 static 修飾的方法,靜態(tài)方法的調(diào)用是通過類名來調(diào)用的, 表現(xiàn)形式如下:

類名.方法()

eg:

public class InvokeMethod{

public static void main (String[] args){

InvokeMethod.t2();

}

public static void t2(){

System.out.println("static t2....");

}

}

2非靜態(tài)方法

非靜態(tài)方法就是沒有 static 修飾的方法,對于非靜態(tài)方法的調(diào)用,是通過對 象來調(diào)用的,表現(xiàn)形式如下。 ??

對象名.方法()

eg:

public class InvokeMethod{

public static void main(String[] args){

InvokeMethod in = new InvokeMethod();

in.t1();

}

public void t1(){

System.out.printfln("t1");

}

}

3.方法與方法之間的調(diào)用

方法與方法之間的調(diào)用,主要是在一個方法內(nèi)部如何調(diào)用其他方法。

(1)靜態(tài)方法內(nèi)部調(diào)用其他方法

如果在本類當中,靜態(tài)方法可以直接調(diào)用靜態(tài)方法,

除了在 main 方法中,還可以在自定義的靜態(tài)方法中直接調(diào)用。

如果在本類當中是非靜態(tài)方法,就必須通過對象來調(diào)用。

public class InvokeMethod{

public static void main (String[] args){

t2();

}

public static void t2(){

System.out.println("static t2...");

}

public static void t1(){

//靜態(tài)方法調(diào)用非靜態(tài)方法需通過對象來調(diào)用

//InvokeMethod in =new InvokeMethod();

//in.t2();

t2();

System.out.println("static t1");

}

}

如果不在一個類當中,靜態(tài)方法調(diào)用其他類中的靜態(tài)方法,必須通過

類名.靜態(tài)方法();

如果在不同類當中,靜態(tài)方法調(diào)用其他類的非靜態(tài)方法,需要導(dǎo)入該類中的包,以及通過創(chuàng)建對象調(diào)用。

(2)非靜態(tài)方法內(nèi)部調(diào)用

如果在本類中,非靜態(tài)方法可以直接調(diào)用靜態(tài)方法與非靜態(tài)方法。

在不同類中,非靜態(tài)方法調(diào)用其他類的靜態(tài)方法,需要通過導(dǎo)入該類中的包,并且需要通過類名來調(diào)用。

在不用類中,非靜態(tài)方法調(diào)用其他類的非靜態(tài)方法時,需要導(dǎo)入該類中的包,還需要通過創(chuàng)建對象來調(diào)用。

給方法傳遞對象參數(shù)

java中給方法傳遞對象參數(shù),和傳遞數(shù)組一樣,傳遞對象實際上是傳遞對象的引用。

變量的作用域

* 類級變量又稱全局級變量或靜態(tài)變量,需要使用static關(guān)鍵字修飾。類級變量在類定義后就已經(jīng)存在,占用內(nèi)存空間,可以通過類名來訪問,不需要實例化。

* 對象實例級變量就是成員變量,實例化后才會分配內(nèi)存空間,才能訪問。成員變量是定義在方法之外,類之內(nèi)的。成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失。

* 方法級變量就是在方法內(nèi)部定義的變量,就是局部變量。局部變量在調(diào)用了對應(yīng)的方法時執(zhí)行到了創(chuàng)建該變量的語句時存在,局部變量的作用域從它被聲明的點開始,一旦出了自己的作用域馬上從內(nèi)存中消失。

* 塊級變量就是定義在一個塊內(nèi)部的變量,變量的生存周期就是這個塊,出了這個塊就消失了,比如 if、for 語句的塊。塊是指由大括號包圍的代碼,

This關(guān)鍵字

1、this是一個關(guān)鍵字,翻譯為:這個。

2、this是一個引用,this變量中保存了內(nèi)存地址指向自身,this存儲在JVM內(nèi)存java對象內(nèi)部。

3、創(chuàng)建1001個java對象,每一個對象都有this,也就說有100個不同的this

4、this可以實現(xiàn)出現(xiàn)在“實例方法中”當中,this指向當前正在執(zhí)行這個動作的對象

Static關(guān)鍵字

1.static英語單詞翻譯為靜態(tài)的

2.static修飾的方法是靜態(tài)方法

3.static修飾的變量是靜態(tài)變量

4.所有static修飾的元素都稱為靜態(tài)級的,都可以使用“類名.”的方式訪問,當然也可以用引用.的方式訪問【但不建議】

5.static修飾的所有元素都是類級別的特征,和具體的對象無關(guān)

第七章 封裝

包(package) 是組織的一種方式.

使用包的主要目的是保證類的唯一性.

可見性修飾符

?

訪問器方法

更改器就是會改變原來的數(shù)據(jù);

訪問器只是會查看數(shù)據(jù);

而構(gòu)造器就是創(chuàng)建。

第八章 繼承

繼承

·??子類可以繼承父類的屬性和行為,但是子類不能繼承父類的構(gòu)造器

·?Java是單繼承模式:一個類只能繼承一個直接父類

·?Java不支持多繼承、但是支持多層繼承

·?Java中所有的類都是object類的子類?

Q:子類是否可以繼承父類的構(gòu)造器?

A:不可以,子類有自己的構(gòu)造器,父類構(gòu)造器用于初始化父類對象。

Q:子類是否可以繼承父類的私有成員?

A:可以,只是不能直接訪問。

Q:子類是否可以繼承父類的靜態(tài)成員?

A:子類可以直接使用父類的靜態(tài)成員,但是不能繼承父類的靜態(tài)成員(共享并不是繼承)。

Q:Java中為什么不支持多繼承?

A:若子類繼承的兩個父類中有一個同名方法時,無法選擇調(diào)用哪一個方法。

Q:Java中為什么支持多層繼承(A繼承B,B繼承C)?

A:即使B和C中有同名方法,A可以通過就近原則來調(diào)用B的方法。

方法的覆蓋

·?方法的重寫發(fā)生在具有繼承關(guān)系的父子類之間

·?方法名相同返回值類型相同,返回值列表相同(盡量復(fù)制粘貼)

·?訪問權(quán)限不能更低,可以更高

·?拋出異??梢愿?,可以更少。

繼承關(guān)系中的構(gòu)造方法和super關(guān)鍵字

(1)super和this關(guān)鍵字的特點類似:super代表的是父類對象的引用

(2)當子類的成員出現(xiàn)同名時,可以用super來區(qū)分

(3)在子類構(gòu)造方法中,通過super關(guān)鍵字調(diào)用父類的構(gòu)造方法,完成對相關(guān)字段值的初始化

強調(diào):當構(gòu)造一個子類對象的時候一定會先調(diào)用父類的構(gòu)造方法來構(gòu)造父類的對象。調(diào)用父類構(gòu)造方法的語句必須是子類構(gòu)造方法中的第一條指令

Object類及其常用方法

1.toString()

用于返回對應(yīng)對象的字符串表示

println(對象名);這個方法會層層調(diào)用,一直到object中的toString()

object中toString()默認實現(xiàn):對象名@十六進制的哈希碼值

子類重寫toString()后 打印的是對象的的類型+屬性+屬性值

2.hashCode()

用于返回對應(yīng)對象的哈希碼值

哈希碼值的得出是通過一種算法,讓不同的對象具有不同的哈希碼值,用戶區(qū)分不同的對象

有時存在不同對象相同哈希碼值的情況,稱之為“哈希碰撞”現(xiàn)象

Object默認實現(xiàn)哈希碼值根據(jù)地址值生成

子類重寫后哈希碼值根據(jù)重寫后傳入的對象的屬性生成

3.equals()

用于指示其他某個對象是否與當前對象“相等”

Object中默認實現(xiàn)使用的是==比較

==比較的是左右兩邊的值,如果是基本類型,比較的就是字面值,引用類型比較的是引用類

型變量保存的地址值

子類重寫后,比較的是對象的類型+屬性+屬性值

Final關(guān)鍵字

Final關(guān)鍵字

第九章 多態(tài)

多態(tài)

多態(tài),就是方法或?qū)ο笥卸喾N形態(tài),包括方法的多態(tài)和對象的多態(tài)。

父類子類對象的使用與轉(zhuǎn)化

實例化是誰,誰提供成員變量以及屬性,誰聲明,用誰的變量與函數(shù)的范圍。

這個可能與對象的實現(xiàn)機制有關(guān),后面扒一扒java底層和jvm應(yīng)該好理解。

關(guān)系

父類就是被繼承的那個類,也叫做基類、超類。子類就是繼承父類的類。他們之間的關(guān)系主要

是以下幾點

1.聲明表示調(diào)用范圍。

2. 實例化表示最終的對象類型。

父類與子類之間,除了父類實例化的不能強制轉(zhuǎn)換成子類,其他的都可以。比如父類聲明子類實例化,可以將父類強制轉(zhuǎn)換成子類,而子類聲明子類實例化的也可以強制轉(zhuǎn)化成父類。

對于調(diào)用范圍一說,看它聲明是父類還是子類,父類只能調(diào)用父類所包含的屬性,但調(diào)用的還是實例化對象的。

Instanceof運算符

java instanceof運算符用于測試指定對象是否是指定類型(類或子類或接口)的實例。

java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 它返回true或false。 如果對任何具有null值的變量應(yīng)用instanceof運算符,則返回false。

第十章 抽象類和接口

抽象類

普通類是一個完善的功能類,可以直接產(chǎn)生實例化對象,并且在普通類中可以包含有構(gòu)造方法、普通方法、static方法、常量和變量等內(nèi)容。而抽象類是指在普通類的結(jié)構(gòu)里面增加抽象方法的組成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都會有一個“{}”,這個表示方法體,有方法體的方法一定可以被對象直接使用。而抽象方法,是指沒有方法體的方法,同時抽象方法還必須使用關(guān)鍵字abstract做修飾。

而擁有抽象方法的類就是抽象類,抽象類要使用abstract關(guān)鍵字聲明

接口

官方解釋:Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。

我的解釋:接口可以理解為一種特殊的類,里面全部是由全局常量和公共的抽象方法所組成。接口是解決Java無法使用多繼承的一種手段,但是接口在實際中更多的作用是制定標準的?;蛘呶覀兛梢灾苯影呀涌诶斫鉃?00%的抽象類,既接口中的方法必須全部是抽象方法。(JDK1.8之前可以這樣理解)

內(nèi)部類

內(nèi)部類與外部類的關(guān)系

a.成員內(nèi)部類的創(chuàng)建需要依賴于外部類對象-(成員方法必須通過對象調(diào)用),在沒有外部類實例之前無法創(chuàng)建成員內(nèi)部類對象

b.內(nèi)部類與外部類相對獨立,不是is a 的關(guān)系(發(fā)動機-汽車)

c.私有屬性的互相訪問,內(nèi)部類可以直接訪問外部類,而外部類訪問內(nèi)部類需要內(nèi)部類的對象來訪問

d.創(chuàng)建內(nèi)部類的語法

1.在外部類內(nèi)部創(chuàng)建內(nèi)部類對象(Inner inner = new Inner())

2.在外部類外部創(chuàng)建內(nèi)部類對象,外部類.內(nèi)部類 inner = new Outter().new Inner();

e.在內(nèi)部類內(nèi)部使用隱藏的外部類對象(隱藏的this)

第十一章 Lambda表達式

函數(shù)式接口

函數(shù)式接口在Java中是指:有且僅有一個抽象方法的接口。

函數(shù)式接口,即適用于函數(shù)式編程場景的接口。而Java中的函數(shù)式編程體現(xiàn)就是Lambda,所以函數(shù)式接口就是可 以適用于Lambda使用的接口。只有確保接口中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導(dǎo)。

備注:“語法糖”是指使用更加方便,但是原理不變的代碼語法。例如在遍歷集合時使用的for-each語法,其實 底層的實現(xiàn)原理仍然是迭代器,這便是“語法糖”。從應(yīng)用層面來講,Java中的Lambda可以被當做是匿名內(nèi)部 類的“語法糖”,但是二者在原理上是不同的。

Lambda表達式

Lambda表達式(閉包):java8的新特性,lambda運行將函數(shù)作為一個方法的參數(shù),也就是函數(shù)作為參數(shù)傳遞到方法中。使用lambda表達式可以讓代碼更加簡潔。

Lambda表達式的使用場景:用以簡化接口實現(xiàn)。

關(guān)于接口實現(xiàn),可以有很多種方式來實現(xiàn)。例如:設(shè)計接口的實現(xiàn)類、使用匿名內(nèi)部類。 但是lambda表達式,比這兩種方式都簡單。

第十二章 異常與斷言

異常的概念

一、異常的概念以及常見的異常

1、異常是程序在“編譯”或者“執(zhí)行”的過程中出現(xiàn)的問題。ps:語法錯誤不算在一場體系中

2、常見的異常:數(shù)組索引越界、空指針異常、日期格式化異常,等

異常的作用:異常一旦出現(xiàn)了,如果沒有提前處理,程序就會退出JVM虛擬機而終止。研究異常并且避免異常,然后提前處理異常,體現(xiàn)的是程序的安全、健壯性。

二、異常的體系

1、Error:系統(tǒng)級別的問題、JVM推退出等,代碼無法控制。

2、Exception:java.lang包下,稱為異常類,它表示程序本身可以處理的問題。

①RuntimeException及其子類:運行時異常,編譯階段不會報錯。(空指針異常、數(shù)組越界異常)

②除RuntimeException之外所有的異常:編譯時異常,編譯期必須處理的,否則程序不能通過編譯。(日期格式化異常)

異常的處理

第一種方式:在方法聲明的位置上,使用throws關(guān)鍵字,拋給上一級。誰調(diào)用我,我就拋給誰。

第二種方式:使用try…catch語句進行異常的捕捉。

異常發(fā)生之后,如果我選擇了上拋,拋給了我的調(diào)用者,調(diào)用者需要對這個異常繼續(xù)處理,那么調(diào)用者處理這個異常同樣有兩種處理方式。Java中異常發(fā)生之后如果一直上拋,最終拋給了main方法,main方法向上拋,拋給了調(diào)用者JVM,JVM知道這個異常發(fā)生,只有一個結(jié)果:終止java程序。(方法1 --> 方法2 --> … --> JVM)

Finally子句

不論try塊中是否出現(xiàn)異?;蛘弋惓J欠癖徊东@,finally塊一定會執(zhí)行。

說finally塊一定會執(zhí)行,當然是理想條件下的(程序不會異常停止),但是在現(xiàn)實生活中,會出現(xiàn)突發(fā)情況(也可以是人為),在下面的兩種情況下,finally塊不會執(zhí)行

1.通過代碼強行使程序走到finally塊前停止。

System.exit(status:0); //此行代碼的作用是結(jié)束當前正在運行的Java虛擬機,其中status表示退出狀態(tài)碼,0.正常退出 非零.非正常退出

2.出現(xiàn)“天災(zāi)”

軟件異常關(guān)閉、電腦突然關(guān)機(如果小伙伴使用的是臺式機器突然停電機會導(dǎo)致突然關(guān)機)、等等。

需要注意的是,當return和finally同時出現(xiàn)的時候許多小伙伴就在這絆倒了。下面我分享一下小伙伴可能會遇到的題目或情況。

首先finally語句應(yīng)用在我們需要捕獲異常的時候(說了句廢話),finally語句的作用呢,相信小伙伴們都已經(jīng)了如指掌,正是因為finally的特殊性,在做項目的時候也通常會將關(guān)閉數(shù)據(jù)庫、釋放資源等類似的代碼放入其中。return是指結(jié)束該方法,繼續(xù)執(zhí)行方法后的語句。但是有些題目,就是那么刁鉆,將return和finally放在一塊,在考驗我們對知識掌握的深度。

Java的斷言機制

J2SE 1.4 在語言上提供了一個新特性,就是 assertion 功能,他是該版本在 Java 語言方面最大的革新。從理論上來說,通過 assertion 方式可以證明程序的正確性,但是這是一項相當復(fù)雜的工作,目前還沒有太多的時間意義。

在實現(xiàn)中,assertion 就是在程序中的一條語句,它對一個 boolean 表達式進行檢查,一個正確程序必須保證這個 boolean 表達式的值為 true;如果該值為 false,說明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。

一般來說,assertion 用于保證程序最基本、關(guān)鍵的正確性。assertion 檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后,assertion 檢查通常是關(guān)閉的。

編寫代碼時,我們總是會做出一些假設(shè),斷言就是用于在代碼中捕捉這些假設(shè)。

程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。

使用斷言可以創(chuàng)建更穩(wěn)定、品質(zhì)更好且不易于出錯的代碼。當需要在一個值為 FALSE 時中斷當前操作的話,可以使用斷言。單元測試必須使用斷言(Junit/JunitX)。

除了類型檢查和單元測試外,斷言還提供了一種確定各種特性是否在程序中得到維護的極好的方法。使用斷言使我們向按契約式設(shè)計更近了一步。

斷言主要使用在代碼開發(fā)和測試時期,用于對某些關(guān)鍵數(shù)據(jù)的判斷,如果這個關(guān)鍵數(shù)據(jù)不是你程序所預(yù)期的數(shù)據(jù),程序就提出警告或退出。

簡而言之,斷言就是一個幫助程序員來簡化入?yún)z測代碼的工具類

常見的斷言特性:

前置條件斷言:代碼執(zhí)行之前必須具備的特性。

后置條件斷言:代碼執(zhí)行之后必須具備的特性。

前后不變斷言:代碼執(zhí)行前后不能變化的特性。

斷言使用格式:

斷言可以有兩種形式:

assert

assert :

使用第一種格式,當布爾類型表達式為 false 時,拋出 AssertionError 異常;如果是第二種格式,則輸出錯誤消息。

何時需要使用斷言:

可以在預(yù)計正常情況下程序不會到達的地方放置斷言:assert false。

斷言可以用于檢查傳遞給私有方法的參數(shù)(對于公有方法,因為是提供給外部的接口,所以必須在方法中有相應(yīng)的參數(shù)檢驗才能保證代碼的健壯性)。

使用斷言測試方法執(zhí)行的前置條件和后置條件。

使用斷言檢查類的不變狀態(tài),確保任何情況下,某個變量的狀態(tài)必須滿足(如 age 屬性應(yīng)大于 0 小于某個合適值)。

什么地方不要使用斷言:

斷言語句不是永遠會執(zhí)行,可以屏蔽也可以啟用,因此:

不要使用斷言作為公共方法的參數(shù)檢查,公共方法的參數(shù)永遠都要執(zhí)行。

斷言語句不可以有任何邊界效應(yīng),不要使用斷言語句去修改變量和改變方法的返回值。

第十三章 字符串與日期

封裝類

1.1.每一個基本類型都有與之對應(yīng)的對象(包裝類型),所謂的面向?qū)ο缶幊?!操作對象一定比操作基本類型簡單因為對象提供了強大的功能供我們使用?/p>

1.2.java一共有8種基本數(shù)據(jù)類型,分別為:byte、short、int、long、float、double、char、boolea。其對應(yīng)的對象(包裝類型)分別為:Byte、Short、Integer、Long、Float、Double、Character、Boolean。

基本類型-> 包裝類 ?Integer.valueOf(int i)

包裝類-> 基本類型 ?x.intValue()

基本類型 -> String ?String.valueOf(String s)

String ->基本類型 ??Integer.parseInt(Sting s)

包裝類 ->String ?????integer2.toString();

String -> 包裝類 ???Integer.valueOf(s2);

數(shù)字的格式化

DecimalFormat

1,是?NumberFormat?的一個子類,用于格式化十進制數(shù)字

2,DecimalFormat 類包含一個模式和一組符號

?

正則表達式

用來描述或者匹配一系列符合某個語句規(guī)則的字符串

單個符號

1、英文句點.符號:匹配單個任意字符。

表達式t.o 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。

2、中括號[]:只有方括號里面指定的字符才參與匹配,也只能匹配單個字符。

表達式:t[abcd]n 只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。

3、| 符號。相當與“或”,可以匹配指定的字符,但是也只能選擇其中一項進行匹配。

表達式:t(a|b|c|dd)n 只可以匹配:tan,tbn,tcn,tddn。不可以匹配taan,tn,tabcn等。

4、表示匹配次數(shù)的符號

表達式:[0—9]{ 3 } \— [0-9]{ 2 } \— [0-9]{ 3 } 的匹配格式為:999—99—999

因為—符號在正則表達式中有特殊的含義,它表示一個范圍,所以在前面加轉(zhuǎn)義字符\。

5、^符號:表示否,如果用在方括號內(nèi),^表示不想匹配的字符。

表達式:[^x] 第一個字符不能是x

6、\S符號:非空字符

7、\s符號:空字符,只可以匹配一個空格、制表符、回車符、換頁符,不可以匹配自己輸入的多個空格。

8、\r符號:空格符,與\n、\tab相同

快捷符號

1、\d表示[0—9]

2、\D表示[^0—9]

3、\w表示[0—9A—Z_a—z]

4、\W表示[^0—9A—Z_a—z]

5、\s表示[\t\n\r\f]

6、\S表示[^\t\n\r\f]

常用的正則表達式

1、Java:(([a-z]|_)(\\w*)){6,20}匹配以字母或下劃線開頭,字母數(shù)字下劃線結(jié)尾的字符串

2、JavaScript:/^(\-?)(\d+)$/匹配數(shù)字

3、JavaScript:/^\w+$/匹配字母數(shù)字下劃線。

日期

yyyy-MM-dd HH:mm:ss.SSSSSS

y-年,M-月,d-日,H-24小時制(0-23),h-12小時制(1-12),m-分鐘,s-秒,S-毫秒

java只能取到毫秒,微秒級別全是零,但是可以取出到微秒的這種格式化時間戳形式:

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");

LocalDateTime now = LocalDateTime.now();

System.out.println(now.format(dateTimeFormatter)); //2022-01-06 11:18:20.044000

第十四章 數(shù)組

數(shù)組的基本知識

1、idea換背景色:File->Setimgs->Editer->Color Schame

2、Java語言中的數(shù)組是一種引用數(shù)據(jù)類型,不屬于基本數(shù)據(jù)類型。數(shù)組的父類是object類

3、數(shù)組是一個容器,可以同時容納多個元素(數(shù)組是一個數(shù)據(jù)的集合)

4、數(shù)組當中可以存儲基本數(shù)據(jù)類型也可以存取引用數(shù)據(jù)類型

5、數(shù)組因為是引用數(shù)據(jù)類型,所以數(shù)組對象是堆內(nèi)存當中(數(shù)組是存儲在堆內(nèi)存當中的)

6、數(shù)組在內(nèi)存方法是怎樣的

7、數(shù)組當中如果存儲的是“Java對象”,實際上存儲的是對象的引用(對象的內(nèi)存地址),數(shù)組中不能直接存儲Java對象

8、數(shù)組一旦創(chuàng)建,Java中規(guī)定長度不可變

9、數(shù)組的分類包括一維數(shù)組,二維數(shù)組及其多維數(shù)組

10、所有的數(shù)組對象都有l(wèi)ength屬性,用于獲取數(shù)組中元素的個數(shù)

11、Java中數(shù)組要求數(shù)組元素類型統(tǒng)一,比如int類型數(shù)組只能存儲int類型元素

12、數(shù)組在內(nèi)存方面,存儲的時候,存儲元素的內(nèi)存地址是連續(xù)的(存儲的每一個元素都是有規(guī)則的),數(shù)組實際上是一種數(shù)據(jù)結(jié)構(gòu)

13、數(shù)組中首元素的地址作為整個數(shù)組對象的地址

14、數(shù)組中每個元素都是有下標的,從0開始以1遞增,最后一個元素下標為length-1

15、數(shù)組的優(yōu)缺點

優(yōu)點:查詢、查找、檢索某個下標上的元素時效率極高,可以說是查詢效率最高一個數(shù)據(jù)結(jié)構(gòu)(第一、每一個元素的內(nèi)存地址是連續(xù)的;第二、每一個元素的類型相同,所以占用空間大小一樣;第三、知道元素內(nèi)存地址,知道下標,所以通過一個數(shù)學(xué)表達式可以計算出某個元素的內(nèi)存地址,通過內(nèi)存地址定位元素,所以數(shù)組的檢索效率是最高的)

缺點:第一、由于為了保證數(shù)組中每個元素的存儲是連續(xù)的,所以在數(shù)組上隨機增加刪除元素效率較低,因為隨機增加刪除元素涉及后面元素的移位(注意:對于數(shù)組中最后一個元素的增加刪除是不受影響的)

第二、數(shù)組不能存儲大數(shù)據(jù)量,因為很難在內(nèi)存空間上找到一塊大的連續(xù)的內(nèi)存空間

16、如何聲明、定義一個數(shù)組?

語法格式:int[] array1; double[]array2; String[]array2…..

17、怎么初始化一個一維數(shù)組

靜態(tài)初始化一維數(shù)組:

int[] array ={1,2,3}

動態(tài)初始化一維數(shù)組:

int[] aray = new int[5] //這里的5表示數(shù)組的元素個數(shù);初始化一個5個長度的int類型數(shù)組,每個元素默認值0

String[] array = new String[5]// 初始化一個5個長度的String類型數(shù)組,每個元素默認值null

18、當一個方法的參數(shù)是一個數(shù)組

Public class ArrayTest{

Public static void main(String[] args){

int[] a = {1,2,3};//靜態(tài)初始化一維數(shù)組

printArray(a);

int[] a2 =new int[4]; //動態(tài)初始化一維數(shù)組

printArray(a2);

printArray(new int[3]);//這樣也可以

printArray(new int[]{1,2,3});//如果直接傳遞一個靜態(tài)數(shù)組語法應(yīng)該這樣寫

}

//為什么使用靜態(tài)方法:方便不需要你new對象

public static void printArray(int[] array){

for(int I = 0;i<array.length;i++){

System.out.println(array[i]);

}

}

}

19、main方法中的一維數(shù)組有什么用(JVM調(diào)用main方法的時候會自動傳遞一個String數(shù)組過來)

注意:args.length = 0 //默認長度為0(空數(shù)組)

20、對于數(shù)組來說,實際上只能存儲Java對象的“內(nèi)存地址”數(shù)據(jù)中存儲的每個元素是“引用”

21、一維數(shù)組擴容

(1)在Java中數(shù)組一旦確定,長度不可變

(2)Java中對數(shù)組的擴容:新建一個大容量的數(shù)組,然后將小容量數(shù)組的數(shù)據(jù)一個一個拷貝到大數(shù)組中(數(shù)組擴容效率較低)

(3)調(diào)用System.arraycopy(五個參數(shù))進行數(shù)組拷貝

public class ArrayTest{

public static void main(String[] args){

int[] src = {1,2,3,4,5};

int[] dest = new int[20];

System.arraycopy(src,1, dest,3,3);//(源,源的起始位置,目標,目標的起始地址,拷貝長度)

}

}

數(shù)組的復(fù)制

1.?Arrays 類的 copyOf() 方法

2.?Arrays 類的 copyOfRange() 方法

3.?System 類的 arraycopy() 方法

4.?Object 類的 clone() 方法

數(shù)組的排序

1、使用Arrays.sort()排序

Arrays.sort()排序方法在java中是最簡單且最常用的排序方法。int []arr1= {45,34,59,55};

Arrays.sort(arr1);//調(diào)用方法排序即可

Arrays.sort()的使用主要分為對基本數(shù)據(jù)類型數(shù)組的排序和對對象數(shù)組的排序。

2、冒泡排序

簡單來說,冒泡排序就是重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。//array[]為待排序數(shù)組,n為數(shù)組長度

void BubbleSort(int array[], int n)

{

int i, j, k;

for(i=0; i

for(j=0; j

{

if(array[j]>array[j+1])

{

k=array[j];

array[j]=array[j+1];

array[j+1]=k;

}

}

}

3、選擇排序

先找到最小元素所在位置的索引,然后將該元素與第一位上的元素進行交換。int arr3[]= {23,12,48,56,45};

for(int i=0;i

int tem=i;

//將數(shù)組中從i開始的最小的元素所在位置的索引賦值給tem

for(int j=i;j

if(arr3[j]

tem=j;

}

}

//上面獲取了數(shù)組中從i開始的最小值的位置索引為tem,利用該索引將第i位上的元素與其進行交換

int temp1=arr3[i];

arr3[i]=arr3[tem];

arr3[tem]=temp1;

}

4、反轉(zhuǎn)排序

將原數(shù)組按逆序排列//將數(shù)組第i位上的元素與第arr.length-i-1位上的元素進行交換

int []arr4={23,12,48,56,45};

for(int i=0;i

int tp=arr4[i];

arr4[i]=arr4[arr4.length-i-1];

arr4[arr4.length-i-1]=tp;

}

5、直接插入排序int []arr5={23,12,48,56,45};

for (int i = 1; i < arr5.length; i++) {

for (int j = i; j > 0; j--) {

if (arr5[j - 1] > arr5[j]) {//大的放后面

int tmp = arr5[j - 1];

arr5[j - 1] = arr5[j];

arr5[j] = tmp;

}

}

}

數(shù)組的查找

普通查找

? ? ? ? 對數(shù)組循環(huán)遍歷,依次比較匹配,時查找算法中最基礎(chǔ),最簡單的算法

二分法查找

與插入排序算法類似,它作用對象的前提是一個有序數(shù)組

先設(shè)立最小值角標、最大值角標以及中間值角標。從最中間值開始比較,若比較值比查找值大,則在剩下數(shù)列的左半軸重新劃分最大值、最小值以及中間值,再進行比較查找;否則在右半軸進行相關(guān)操作;若不存在該值,最后會使得min<max,退出循環(huán)

Arrays類

·?Arrays位于java.util包下(Arrays是一個操作數(shù)組的工具類)

·?Arrays包含各種操作數(shù)組的方法(例如排序和搜索)。該類還包含一個靜態(tài)工廠,允許將數(shù)組視為列表。

·?Arrays類里的方法都是靜態(tài)方法可以通過Arrays.方法名()直接調(diào)用

第十五章?集合

集合類概述

集合類是Java數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)。Java的集合類是java.util包中的重要內(nèi)容,它允許以各種方式將元素分組,并定義了各種使這些元素更容易操作的方法。Java集合類是Java將一些基本的和使用頻率極高的基礎(chǔ)類進行封裝和增強后再以一個類的形式提供。集合類是可以往里面保存多個對象的類,存放的是對象,不同的集合類有不同的功能和特點,適合不同的場合,用以解決一些實際問題。百度百科

集合是一個容器,是一個載體,可以一次容納多個對象。數(shù)組其實就是一個集合,集合實際上就是一個容器。

在實際開發(fā)中,假設(shè)鏈接數(shù)據(jù)庫,數(shù)據(jù)庫中有10條記錄,那么假設(shè)把十條記錄查詢出來,這時java程序會把十條數(shù)據(jù)封裝成10個java對象,然后將Java對象放到一個集合中,將集合傳到前端,然后遍歷集合,將數(shù)據(jù)一個個展現(xiàn)出來。

集合不能直接存儲基本數(shù)據(jù)類型,另外集合也不能直接存儲Java對象,集合里面存儲Java對象的內(nèi)存地址(集合中存儲的是引用)?!咀⒁狻?list.add(100)//這里存的不是基本數(shù)據(jù)類型int,自動裝箱-->Integer

在Java中每一個不同的集合,底層對應(yīng)有不同的數(shù)據(jù)結(jié)構(gòu), 往不同的集合中存儲元素,等于將數(shù)據(jù)放到不同的數(shù)據(jù)結(jié)構(gòu)中。使用不同的集合,等同于使用了不同的數(shù)據(jù)結(jié)構(gòu)。不需要精通數(shù)據(jù)結(jié)構(gòu),Java中已經(jīng)寫好了常用的集合類,只需要掌握如何使用就好。在合適的情況,選擇合適的集合。

所有集合類和集合接口都在java.until包下。

Collection接口

1、Collection接口包括的主要方法

添加元素:add(E),addAll()

刪除元素:remove(Object),removeAll,removeIf,clear

是否包含元素:contains(Object)

獲取元素個數(shù):size

是否為空集合:isEmpty

遍歷所有元素:iterator()

轉(zhuǎn)換為數(shù)組:toArray,toArray(T[])

1)添加元素

public boolean add(E object);

public boolean addAll(Collection<? extends E>collection);

(add方法可以添加單個指定的元素,而addAll是把參數(shù)collection中的所有元素批量添加到當前Collection結(jié)構(gòu)中。)

2)刪除元素

public boolean remove(Object object);

public boolean removeAll(Collection<?>collection);

public boolean retainAll(Collection<?>collection);

(remove用于刪除單個指定對象;removeAll用于刪除參數(shù)collection中的所有元素;retainAll僅保留參數(shù)collection中的所有元素,不在參數(shù)collection中的元素都刪除。)

public void clear();//快速刪除所有元素,調(diào)用此方法后Collection集合是空集

3)查詢:

(1)查詢元素:(如果包含,contains方法返回true,否則返回false)

public boolean contains(Object object);

(2)查詢集合:(size方法返回Collection中元素的數(shù)量,isEmpty方法判斷Collection是否為空)

public int size();

public boolean isEmpty();

4)遍歷元素:(Collection本身不提供對元素的遍歷方法,元素的遍歷由Iterator完成)

public Iterator<E> iterator();

注:該方法返回一個Iterator類型的對象,使用該對象對原有的Collection進行元素的遍歷。

5)轉(zhuǎn)換數(shù)組

public Object[] toArray();//轉(zhuǎn)換為Object類型的數(shù)組

public <T> T[] toArray(T[] array);//轉(zhuǎn)換為元素類型為T的數(shù)組

2、Collection接口的定義

public interface Collection<E> extends Iterable<E>

注:Collection繼承了接口Iterable,Iterable是Collection接口的父類

3、Iterable接口的定義方法

(通過該方法可以獲得一個Iterable類型的對象,一般稱為迭代器,主要用于遍歷當前集合中的元素)

Iterable<T> iterable();

4、Iterable是Java集合類中的一個重要接口,Iterable接口不用于存儲元素,而用來遍歷已有集合中的元素。例如List、Set和Map等。(于Set而言,Iterable是遍歷其中元素的唯一途徑)

5、在Collection的子接口中,List中的元素有位置(即index),而Set中的元素沒有位置和順序。

注:Collection接口中的元素沒有位置的概念,所以Collection接口不包含獲得指定元素下標的方法。

Llist集合

~List有序集合也稱為序列。該界面的用戶可以精確的控制列表中每個元素的插入位置。用戶可以通過整數(shù)索引訪問元素。并搜索列表中的元素。

~與Set集合不同,列表通常允許重復(fù)元素。

List集合特點:

有序:存儲和取出的元素順序一致;

可重復(fù):存儲的元素可以重復(fù)。

Set集合

(1)Set集合是由一串無序的,不能重復(fù)得相同類型元素構(gòu)成的集合。以下是一個班級的Set集合,這個Set集合中有一些學(xué)生,這些學(xué)生是無序的,不能通過類似于List集合的序號訪問。而且不能有重復(fù)的同學(xué)。

(2)提示:List集合中的元素是有序的,可重復(fù)的,而Set集合中的元素是無序的。不能重復(fù)得,List集合強調(diào)的是有序的,Set集合強調(diào)的是不重復(fù),當不考慮順序,且沒有重 復(fù)元素時,Set集合和List集合可以互相替換的。

(3)Set接口直接實現(xiàn)類主要是HashSet,HashSet是基于散列表數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)

Map集合

1.Map是一個雙列集合,一個元素包含兩個值(一個key,一個value)

2.Map集合中的元素,key和value的數(shù)據(jù)類型可以相同,也可以不同

3.Map中的元素,key不允許重復(fù),value可以重復(fù)

4.Map里的key和value是一一對應(yīng)的。

迭代器

迭代器是用來遍歷容器內(nèi)所有元素對象的,也是一種常見的設(shè)計模式。

迭代器包含以下四個方法:

hasNext() :boolean —— 容器內(nèi)是否還有可以訪問的元素。

next() :E —— 返回下一個元素。

remove() :void —— 刪除當前元素。

forEachRemaining(Consumer) :void —— JDK 8 中添加的,提供一個 lambda 表達式遍歷容器元素。

泛型

·?泛型的本質(zhì)就是"參數(shù)化類型"。一提到參數(shù),最熟悉的就是定義方法的時候需要形參,調(diào)用方法的時候,需要傳遞實參。那"參數(shù)化類型"就是將原來具體的類型參數(shù)化

·?泛型的出現(xiàn)避免了強轉(zhuǎn)的操作,在編譯器完成類型轉(zhuǎn)化,也就避免了運行的錯誤。

?


JAVA期末復(fù)習(xí)攻略2022學(xué)年酸奶公園出品的評論 (共 條)

分享到微博請遵守國家法律
房产| 永昌县| 普陀区| 抚远县| 阜新| 龙井市| 凤冈县| 秭归县| 金门县| 大埔县| 嘉定区| 温泉县| 扎鲁特旗| 宝兴县| 成武县| 平果县| 永嘉县| 福鼎市| 平顺县| 团风县| 南乐县| 镶黄旗| 治县。| 磴口县| 鹤峰县| 宁都县| 镇沅| 台中市| 宁强县| 和硕县| 封开县| 富阳市| 镇原县| 潮安县| 花莲县| 古蔺县| 扎鲁特旗| 塔河县| 佛山市| 南涧| 青海省|