JAVA入門(mén)
java特性和優(yōu)勢(shì)
- 簡(jiǎn)單性
- 面向?qū)ο?/strong>
- 可移植性
- 高性能
- 分布式
- 動(dòng)態(tài)性
- 多線程
- 安全性
- 健壯性
java三大版本
- JavaSE:標(biāo)準(zhǔn)版(桌面程序,控制臺(tái)開(kāi)發(fā)等)
- JavaME:嵌入式開(kāi)發(fā)(手機(jī)股淡、小家電等)
- JavaEE:企業(yè)級(jí)開(kāi)發(fā)(web端,服務(wù)器開(kāi)發(fā)等)
JDK壮不、JRE蔼夜、JVM
- JDK: Java Development Kit (java開(kāi)發(fā)者工具)
- JRE: Java Runtime Environment (java運(yùn)行時(shí)環(huán)境)
- JVM: Java Virtual Machine (java虛擬機(jī))
安裝開(kāi)發(fā)環(huán)境
卸載JDK
- 刪除jdk的安裝目錄
- 刪除環(huán)境變量立的JAVA_HOME
- 刪除path下關(guān)于java 的目錄
- cmd中測(cè)試是否刪除成功:java -version
安裝JDK
網(wǎng)上搜索下載JDK8
安裝JDK
記住安裝路徑
-
配置環(huán)境變量
- JAVA_HOME設(shè)為jdk的安裝路徑
- 新增path的變量:%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin
測(cè)試JDK是否安裝成功:cmd中java -version
Hello World
-
新建Hello.java文件
public class Hello{ public static void main (String [] args) { System.out.print("Hello World!"); } }
在cmd中切換到上面文件的目錄下判呕,執(zhí)行編譯:javac Hello.java
該文件目錄下會(huì)自動(dòng)生成可執(zhí)行的文件Hello.class
執(zhí)行該文件:java Hello
注意
- Java是大小寫(xiě)敏感的
- 文件名和類(lèi)名必須保持一致尘喝,并且首字母大寫(xiě)
原理
- javac是調(diào)用的java的編譯器磁浇,將代碼編譯成.class文件
- java執(zhí)行.class文件相當(dāng)于一個(gè)解釋器去執(zhí)行,使用的JVM
- 這也是java能夠跨平臺(tái)執(zhí)行的關(guān)鍵
- java既有編譯型的特點(diǎn)又有解釋型的特點(diǎn)
JAVA基礎(chǔ)
注釋
java的注釋有三種:
-
單行注釋
//這是一行注釋
-
多行注釋
/* 這是一個(gè)多行注釋 */
-
文檔注釋
/** *@Author bGpi */
參數(shù)信息
- @author 作者名
- @version 版本號(hào)
- @since 指明需要最早使用的jdk版本
- @param 參數(shù)名
- @return 返回值情況
- @throws 異常拋出情況
標(biāo)識(shí)符
-
關(guān)鍵字
關(guān)鍵字 含義 abstract 表明類(lèi)或者成員方法具有抽象屬性 assert 斷言朽褪,用來(lái)進(jìn)行程序調(diào)試 boolean 基本數(shù)據(jù)類(lèi)型之一置吓,聲明布爾類(lèi)型的關(guān)鍵字 break 提前跳出一個(gè)塊 byte 基本數(shù)據(jù)類(lèi)型之一,字節(jié)類(lèi)型 case 用在switch語(yǔ)句之中缔赠,表示其中的一個(gè)分支 catch 用在異常處理中衍锚,用來(lái)捕捉異常 char 基本數(shù)據(jù)類(lèi)型之一,字符類(lèi)型 class 聲明一個(gè)類(lèi) const 保留關(guān)鍵字嗤堰,沒(méi)有具體含義 continue 回到一個(gè)塊的開(kāi)始處 default 默認(rèn)构拳,例如,用在switch語(yǔ)句中梁棠,表明一個(gè)默認(rèn)的分支。Java8 中也作用于聲明接口函數(shù)的默認(rèn)實(shí)現(xiàn) do 用在do-while循環(huán)結(jié)構(gòu)中 double 基本數(shù)據(jù)類(lèi)型之一斗埂,雙精度浮點(diǎn)數(shù)類(lèi)型 else 用在條件語(yǔ)句中符糊,表明當(dāng)條件不成立時(shí)的分支 enum 枚舉 extends 表明一個(gè)類(lèi)型是另一個(gè)類(lèi)型的子類(lèi)型。對(duì)于類(lèi)呛凶,可以是另一個(gè)類(lèi)或者抽象類(lèi)男娄;對(duì)于接口,可以是另一個(gè)接口 final 用來(lái)說(shuō)明最終屬性漾稀,表明一個(gè)類(lèi)不能派生出子類(lèi)模闲,或者成員方法不能被覆蓋,或者成員域的值不能被改變崭捍,用來(lái)定義常量 finally 用于處理異常情況尸折,用來(lái)聲明一個(gè)基本肯定會(huì)被執(zhí)行到的語(yǔ)句塊 float 基本數(shù)據(jù)類(lèi)型之一,單精度浮點(diǎn)數(shù)類(lèi)型 for 一種循環(huán)結(jié)構(gòu)的引導(dǎo)詞 goto 保留關(guān)鍵字殷蛇,沒(méi)有具體含義 if 條件語(yǔ)句的引導(dǎo)詞 implements 表明一個(gè)類(lèi)實(shí)現(xiàn)了給定的接口 import 表明要訪問(wèn)指定的類(lèi)或包 instanceof 用來(lái)測(cè)試一個(gè)對(duì)象是否是指定類(lèi)型的實(shí)例對(duì)象 int 基本數(shù)據(jù)類(lèi)型之一实夹,整數(shù)類(lèi)型 interface 接口 long 基本數(shù)據(jù)類(lèi)型之一橄浓,長(zhǎng)整數(shù)類(lèi)型 native 用來(lái)聲明一個(gè)方法是由與計(jì)算機(jī)相關(guān)的語(yǔ)言(如C/C++/FORTRAN語(yǔ)言)實(shí)現(xiàn)的 new 用來(lái)創(chuàng)建新實(shí)例對(duì)象 package 包 private 一種訪問(wèn)控制方式:私用模式 protected 一種訪問(wèn)控制方式:保護(hù)模式 public 一種訪問(wèn)控制方式:共用模式 return 從成員方法中返回?cái)?shù)據(jù) short 基本數(shù)據(jù)類(lèi)型之一,短整數(shù)類(lèi)型 static 表明具有靜態(tài)屬性 strictfp 用來(lái)聲明FP_strict(單精度或雙精度浮點(diǎn)數(shù))表達(dá)式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算術(shù)規(guī)范 super 表明當(dāng)前對(duì)象的父類(lèi)型的引用或者父類(lèi)型的構(gòu)造方法 switch 分支語(yǔ)句結(jié)構(gòu)的引導(dǎo)詞 synchronized 表明一段代碼需要同步執(zhí)行 this 指向當(dāng)前實(shí)例對(duì)象的引用 throw 拋出一個(gè)異常 throws 聲明在當(dāng)前定義的成員方法中所有需要拋出的異常 transient 聲明不用序列化的成員域 try 嘗試一個(gè)可能拋出異常的程序塊 void 聲明當(dāng)前成員方法沒(méi)有返回值 volatile 表明兩個(gè)或者多個(gè)變量必須同步地發(fā)生變化 while 用在循環(huán)結(jié)構(gòu)中 java所有的組成部分都需要名字。類(lèi)名亮航、變量名以及方法名都被稱為標(biāo)識(shí)符
表示符注意點(diǎn)
- 所有的標(biāo)識(shí)符都應(yīng)該以字母(A-Z或者a-z)荸实、美元符($)或者下劃線(_)開(kāi)始
- 首字母之后可以是字母、美元符缴淋、下劃線或數(shù)字的任何字符組合
- 不能使用關(guān)鍵字作為變量名或方法名
- 標(biāo)識(shí)符是大小寫(xiě)敏感的
數(shù)據(jù)類(lèi)型
-
Java是一種強(qiáng)類(lèi)型語(yǔ)言
要求變量的使用要嚴(yán)格符合規(guī)定准给,所有變量都必須先定義后才能使用
-
Java的數(shù)據(jù)類(lèi)型分為兩類(lèi)
-
基本類(lèi)型
-
數(shù)值類(lèi)型
-
整數(shù)類(lèi)型
- byte占1個(gè)字節(jié)范圍:-128~127
- short占2個(gè)字節(jié)范圍:-32768~32767
- int占4個(gè)字節(jié)范圍:-21474832147483647
- long占8個(gè)字節(jié)范圍
-
浮點(diǎn)類(lèi)型
- float占4個(gè)字節(jié)
- double占8個(gè)字節(jié)
-
字符類(lèi)型
char占2個(gè)字節(jié)
-
-
boolean類(lèi)型
占1位,其值只有true和false
-
-
引用類(lèi)型
- 類(lèi)
- 接口
- 數(shù)組
-
什么是字節(jié)
- 位(bit):是計(jì)算機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)的最小單位重抖,11001100是一個(gè)8位二進(jìn)制數(shù)
- 字節(jié)(byte):是計(jì)算機(jī)數(shù)據(jù)處理的基本單位露氮,習(xí)慣上用大寫(xiě)B(tài)來(lái)表示
- 1B=8bit
- 字符:是指計(jì)算機(jī)中使用的字母、數(shù)字仇哆、字和符號(hào)
-
進(jìn)制
- 二進(jìn)制(0b開(kāi)頭)
- 十進(jìn)制
- 八進(jìn)制(0開(kāi)頭)
- 十六進(jìn)制(0x開(kāi)頭)
-
常見(jiàn)轉(zhuǎn)義字符
轉(zhuǎn)義字符 意義 ASCII碼值(十進(jìn)制) \b 退格(BS) 沦辙,將當(dāng)前位置移到前一列 008 \f 換頁(yè)(FF),將當(dāng)前位置移到下頁(yè)開(kāi)頭 012 \n 換行(LF) 讹剔,將當(dāng)前位置移到下一行開(kāi)頭 010 \r 回車(chē)(CR) 油讯,將當(dāng)前位置移到本行開(kāi)頭 013 \t 水平制表(HT) (跳到下一個(gè)TAB位置) 009 \v 垂直制表(VT) 011 \ 代表一個(gè)反斜線字符''' 092 ' 代表一個(gè)單引號(hào)(撇號(hào))字符 039 " 代表一個(gè)雙引號(hào)字符 034 \0 空字符(NULL) 000 \ddd 1到3位八進(jìn)制數(shù)所代表的任意字符 三位八進(jìn)制 \uhhhh 1到2位十六進(jìn)制所代表的任意字符 二位十六進(jìn)制
類(lèi)型轉(zhuǎn)換
容量從低到高的類(lèi)型順序?yàn)?/p>
byte,short,char => int =>long => float => double
注意點(diǎn)
- 不能對(duì)布爾值進(jìn)行轉(zhuǎn)換
- 在把高容量轉(zhuǎn)換到低容量的時(shí)候,需要強(qiáng)制轉(zhuǎn)換
- 不能把對(duì)象類(lèi)型轉(zhuǎn)換為不相關(guān)的類(lèi)型
- 轉(zhuǎn)換的時(shí)候可能內(nèi)存溢出延欠,或者精度誤差
- 操作比較大的數(shù)的時(shí)候陌兑,注意溢出問(wèn)題
- JDK7新特性,數(shù)字之間可以用下劃線分割由捎,如1000000 = 100_0000
變量
變量就是可以變的量
每個(gè)變量都必須聲明其類(lèi)型
java變量是程序中最基本的存儲(chǔ)單元兔综,其要素包括*變量名、變量類(lèi)型和作用域
-
變量作用域
類(lèi)變量
實(shí)例變量
-
局部變量
public class Variable { static int allClicks = 0; //類(lèi)變量 String str = "hello world"; //實(shí)例變量 public void method () { int i = 0; //局部變量 } }
-
變量的命名規(guī)范
- 所有的變量狞玛、方法软驰、類(lèi)名,需見(jiàn)名知意
- 類(lèi)成員變量:首字母小寫(xiě)和駝峰原則
- 局部變量:首字母小寫(xiě)和駝峰原則
- 常量:大寫(xiě)字母和下劃線
- 類(lèi)名:首字母大寫(xiě)和駝峰原則
- 方法名:首字母小寫(xiě)和駝峰原則
運(yùn)算符
算術(shù)運(yùn)算符
操作符 | 描述 |
---|---|
+ | 加法 - 相加運(yùn)算符兩側(cè)的值 |
- | 減法 - 左操作數(shù)減去右操作數(shù) |
* | 乘法 - 相乘操作符兩側(cè)的值 |
/ | 除法 - 左操作數(shù)除以右操作數(shù) |
% | 取余 - 左操作數(shù)除以右操作數(shù)的余數(shù) |
++ | 自增: 操作數(shù)的值增加1 |
-- | 自減: 操作數(shù)的值減少1 |
注意
- 前綴自增自減法(++a,--a): 先進(jìn)行自增或者自減運(yùn)算心肪,再進(jìn)行表達(dá)式運(yùn)算
- 后綴自增自減法(a++,a--): 先進(jìn)行表達(dá)式運(yùn)算锭亏,再進(jìn)行自增或者自減運(yùn)算
關(guān)系運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
== | 檢查如果兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真硬鞍。 |
!= | 檢查如果兩個(gè)操作數(shù)的值是否相等慧瘤,如果值不相等則條件為真。 |
> | 檢查左操作數(shù)的值是否大于右操作數(shù)的值固该,如果是那么條件為真锅减。 |
< | 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是那么條件為真伐坏。 |
>= | 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值怔匣,如果是那么條件為真。 |
<= | 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值著淆,如果是那么條件為真劫狠。 |
位運(yùn)算符
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相對(duì)應(yīng)位都是1拴疤,則結(jié)果為1,否則為0 | (A&B)独泞,得到12呐矾,即0000 1100 |
| | 如果相對(duì)應(yīng)位都是 0,則結(jié)果為 0懦砂,否則為 1 | (A | B)得到61蜒犯,即 0011 1101 |
^ | 如果相對(duì)應(yīng)位值相同,則結(jié)果為0荞膘,否則為1 | (A ^ B)得到49罚随,即 0011 0001 |
? | 按位取反運(yùn)算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1羽资,1變成0淘菩。 | (?A)得到-61,即1100 0011 |
<< | 按位左移運(yùn)算符屠升。左操作數(shù)按位左移右操作數(shù)指定的位數(shù)潮改。 | A << 2得到240,即 1111 0000 |
>> | 按位右移運(yùn)算符腹暖。左操作數(shù)按位右移右操作數(shù)指定的位數(shù)汇在。 | A >> 2得到15即 1111 |
>>> | 按位右移補(bǔ)零操作符。左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移脏答,移動(dòng)得到的空位以零填充糕殉。 | A>>>2得到15即0000 1111 |
邏輯運(yùn)算符
操作符 | 描述 | 例子 |
---|---|---|
&& | 稱為邏輯與運(yùn)算符。當(dāng)且僅當(dāng)兩個(gè)操作數(shù)都為真殖告,條件才為真阿蝶。 | (A && B)為假。 |
| | | 稱為邏輯或操作符黄绩。如果任何兩個(gè)操作數(shù)任何一個(gè)為真赡磅,條件為真。 | (A || B)為真宝与。 |
! | 稱為邏輯非運(yùn)算符冶匹。用來(lái)反轉(zhuǎn)操作數(shù)的邏輯狀態(tài)习劫。如果條件為true,則邏輯非運(yùn)算符將得到false嚼隘。 | !(A && B)為真诽里。 |
賦值運(yùn)算符
操作符 | 描述 | 例子 |
---|---|---|
= | 簡(jiǎn)單的賦值運(yùn)算符,將右操作數(shù)的值賦給左側(cè)操作數(shù) | C = A + B將把A + B得到的值賦給C |
+ = | 加和賦值操作符飞蛹,它把左操作數(shù)和右操作數(shù)相加賦值給左操作數(shù) | C + = A等價(jià)于C = C + A |
- = | 減和賦值操作符谤狡,它把左操作數(shù)和右操作數(shù)相減賦值給左操作數(shù) | C - = A等價(jià)于C = C - A |
* = | 乘和賦值操作符灸眼,它把左操作數(shù)和右操作數(shù)相乘賦值給左操作數(shù) | C * = A等價(jià)于C = C * A |
/ = | 除和賦值操作符,它把左操作數(shù)和右操作數(shù)相除賦值給左操作數(shù) | C / = A墓懂,C 與 A 同類(lèi)型時(shí)等價(jià)于 C = C / A |
(%)= | 取模和賦值操作符焰宣,它把左操作數(shù)和右操作數(shù)取模后賦值給左操作數(shù) | C%= A等價(jià)于C = C%A |
<< = | 左移位賦值運(yùn)算符 | C << = 2等價(jià)于C = C << 2 |
>> = | 右移位賦值運(yùn)算符 | C >> = 2等價(jià)于C = C >> 2 |
&= | 按位與賦值運(yùn)算符 | C&= 2等價(jià)于C = C&2 |
^ = | 按位異或賦值操作符 | C ^ = 2等價(jià)于C = C ^ 2 |
| = | 按位或賦值操作符 | C | = 2等價(jià)于C = C | 2 |
條件運(yùn)算符(?:)
variable x = (expression) ? value if true : value if false
instanceof 運(yùn)算符
該運(yùn)算符用于操作對(duì)象實(shí)例捕仔,檢查該對(duì)象是否是一個(gè)特定類(lèi)型(類(lèi)類(lèi)型或接口類(lèi)型)匕积。
instanceof運(yùn)算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
Java運(yùn)算符優(yōu)先級(jí)
類(lèi)別 | 操作符 | 關(guān)聯(lián)性 |
---|---|---|
后綴 | () [] . (點(diǎn)操作符) | 左到右 |
一元 | expr++ expr-- | 從左到右 |
一元 | ++expr --expr + - ~ ! | 從右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
關(guān)系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位與 | & | 左到右 |
按位異或 | ^ | 左到右 |
按位或 | | | 左到右 |
邏輯與 | && | 左到右 |
邏輯或 | | | | 左到右 |
條件 | 榜跌?: | 從右到左 |
賦值 | = + = - = * = / =%= >> = << =&= ^ = | = | 從右到左 |
逗號(hào) | 闪唆, | 左到右 |
包機(jī)制
為了更好地組織類(lèi),Java提供了包機(jī)制钓葫,用于區(qū)別類(lèi)名的命名空間
-
包語(yǔ)句的語(yǔ)法格式為:
package pkg1[.pkg2[,pkg3...]]
一般利用公司域名倒置作為包名
Java流程控制
Scanner對(duì)象
我們可以通過(guò)Scanner類(lèi)來(lái)獲取用戶的輸入
-
基本語(yǔ)法
Scanner s = new Scanner(System.in);
通過(guò)Scanner類(lèi)的next()與nextLine()方法獲取輸入的字符串悄蕾,在讀取前一般需要使用hasNext()與hasNextLine()判斷是否還有數(shù)據(jù)
while循環(huán)和do-while循環(huán)
區(qū)別
- while是先判斷后執(zhí)行,do-while是先執(zhí)行后判斷
- do-while總是保證循環(huán)體會(huì)被至少執(zhí)行一次
增強(qiáng)for循環(huán)
主要用于數(shù)組或集合的增強(qiáng)型for循環(huán)
-
表達(dá)式如下
for (聲明語(yǔ)句 : 表達(dá)式) { //code } //例子 int [] numbers = {1, 2, 3, 4}; for (int x:numbers) { System.out.print(x); }
Java的方法
方法的重載
- 重載就是在一個(gè)類(lèi)中础浮,有相同的函數(shù)名稱帆调,但是形參不同的函數(shù)
- 方法的重載規(guī)則:
- 方法名必須相同
- 參數(shù)列表必須不同(個(gè)數(shù)不同或類(lèi)型不同或參數(shù)排列順序不同)
- 方法的返回類(lèi)型可以相同也可以不同
- 僅僅返回類(lèi)型不同不足以成為方法的重載
可變參數(shù)
JDK 1.5開(kāi)始,Java支持傳遞同類(lèi)型的可變參數(shù)給一個(gè)方法
在方法聲明中霸旗,在指定參數(shù)類(lèi)型后加一個(gè)省略號(hào)(...)
-
一個(gè)方法只能指定一個(gè)可變參數(shù)贷帮,它必須是方法的最后一個(gè)參數(shù)。任何普通的參數(shù)必須在它之前聲明
public static void fun(int...numbers){}
Java的數(shù)組
數(shù)組的聲明和創(chuàng)建
-
首先必須聲明數(shù)據(jù)變量诱告,才能在程序中使用數(shù)組撵枢。下面是聲明數(shù)組變量的語(yǔ)法:
dataType[] arrayName; //首選的方法 //or dataType arrayName[]; //效果相同,推薦上面
-
Java使用new操作符來(lái)創(chuàng)建數(shù)組精居,語(yǔ)法如下
dataType[] arrayName = new dataType[arraySize]
獲取數(shù)組長(zhǎng)度: arrayName.length
內(nèi)存分析
堆
- 存放new的對(duì)象和數(shù)組
- 可以被所有的線程共享锄禽,不會(huì)存放別的對(duì)象引用
棧
- 存放基本變量類(lèi)型(包含這個(gè)基本類(lèi)型的具體數(shù)值)
- 引用對(duì)象的變量(存放這個(gè)引用在堆里面的具體地址)
靜態(tài)區(qū)
- 可以被所有的線程共享
- 包含了所有的class和static變量
三種初始化
-
靜態(tài)初始化
int[] a = {1, 2, 3};
-
動(dòng)態(tài)初始化
int [] a = new int[2]; a[0] = 1; a[1] = 2;
-
數(shù)組的默認(rèn)初始化
數(shù)組是引用類(lèi)型,它的元素相當(dāng)于類(lèi)的實(shí)例變量靴姿,因此數(shù)組一經(jīng)分配空間沃但,其中的每個(gè)元素也被按照實(shí)例變量同樣的方式被隱式初始化。
面向?qū)ο?/h1>
認(rèn)識(shí)面向?qū)ο?/h2>
面向?qū)ο蟮谋举|(zhì)就是:以類(lèi)的方式組織代碼佛吓,以對(duì)象的方式組織(封裝)數(shù)據(jù)
抽象
-
三大特性
- 封裝
- 繼承
- 多態(tài)
從認(rèn)識(shí)論角度考慮是:先有對(duì)象后有類(lèi)宵晚。對(duì)象,是具體的事物维雇。類(lèi)淤刃,是抽象的,是對(duì)對(duì)象的抽象吱型。
從代碼運(yùn)行角度考慮是:先有類(lèi)后有對(duì)象逸贾。類(lèi)是對(duì)象的模板。
方法的調(diào)用
-
靜態(tài)方法和非靜態(tài)方法
靜態(tài)方法是和類(lèi)一起加載的,非靜態(tài)方法是需要對(duì)象new出來(lái)之后才加載铝侵。因此不能直接調(diào)用一個(gè)類(lèi)中的非靜態(tài)方法灼伤,但可直接調(diào)用靜態(tài)方法
靜態(tài)方法前面使用static修飾
值傳遞&引用傳遞
構(gòu)造器
和類(lèi)名相同
沒(méi)有返回值
-
作用
- new 的本質(zhì)是在調(diào)用構(gòu)造方法
- 初始化對(duì)象的值
-
注意點(diǎn)
定義有參構(gòu)造之后,如果想要使用無(wú)參構(gòu)造咪鲜,需要顯示的定義一個(gè)無(wú)參的構(gòu)造狐赡。
Alt+Insert可快速創(chuàng)建構(gòu)造函數(shù)
this 表示當(dāng)前類(lèi)
封裝
繼承
面向?qū)ο蟮谋举|(zhì)就是:以類(lèi)的方式組織代碼佛吓,以對(duì)象的方式組織(封裝)數(shù)據(jù)
抽象
-
三大特性
- 封裝
- 繼承
- 多態(tài)
從認(rèn)識(shí)論角度考慮是:先有對(duì)象后有類(lèi)宵晚。對(duì)象,是具體的事物维雇。類(lèi)淤刃,是抽象的,是對(duì)對(duì)象的抽象吱型。
從代碼運(yùn)行角度考慮是:先有類(lèi)后有對(duì)象逸贾。類(lèi)是對(duì)象的模板。
方法的調(diào)用
-
靜態(tài)方法和非靜態(tài)方法
靜態(tài)方法是和類(lèi)一起加載的,非靜態(tài)方法是需要對(duì)象new出來(lái)之后才加載铝侵。因此不能直接調(diào)用一個(gè)類(lèi)中的非靜態(tài)方法灼伤,但可直接調(diào)用靜態(tài)方法
靜態(tài)方法前面使用static修飾
值傳遞&引用傳遞
構(gòu)造器
和類(lèi)名相同
沒(méi)有返回值
-
作用
- new 的本質(zhì)是在調(diào)用構(gòu)造方法
- 初始化對(duì)象的值
-
注意點(diǎn)
定義有參構(gòu)造之后,如果想要使用無(wú)參構(gòu)造咪鲜,需要顯示的定義一個(gè)無(wú)參的構(gòu)造狐赡。
Alt+Insert可快速創(chuàng)建構(gòu)造函數(shù)
this 表示當(dāng)前類(lèi)
封裝
繼承
extends
- 子類(lèi)繼承了父類(lèi),就會(huì)擁有父類(lèi)的全部方法(私有的無(wú)法被繼承)嗜诀。
Super
- super調(diào)用父類(lèi)的構(gòu)造方法猾警,顯示調(diào)用時(shí)必須在構(gòu)造方法的第一行
- super必須只能出現(xiàn)在子類(lèi)的方法或者構(gòu)造方法中
- super和this不能同時(shí)調(diào)用構(gòu)造方法
-
和this的區(qū)別
- 代表的對(duì)象不同
- this:本身調(diào)用者這個(gè)對(duì)象
- super:代表父類(lèi)對(duì)象的引用
- 使用前提不同
- this:沒(méi)有繼承也可以使用
- super:只能在繼承條件下才能使用
- 構(gòu)造方法不同
- this():本類(lèi)的構(gòu)造
- super():父類(lèi)的構(gòu)造
- 代表的對(duì)象不同
重寫(xiě) Override
需要有繼承關(guān)系,子類(lèi)重新父類(lèi)的方法
注意:
- 方法名必須相同
- 參數(shù)列表必須相同
- 修飾符:訪問(wèn)可以擴(kuò)大但不能縮小隆敢。public>protected>default>private
- 拋出的異常:范圍可以被縮小发皿,但不能擴(kuò)大。
- 不能重寫(xiě)的方法:static拂蝎、final穴墅、private
多態(tài)
同一個(gè)方法可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式
一個(gè)對(duì)象的實(shí)際類(lèi)型時(shí)確定的,但可以指向?qū)ο蟮囊玫念?lèi)型有很多(父類(lèi)温自、有關(guān)系的類(lèi))
-
多態(tài)存在的條件
- 有繼承關(guān)系
- 子類(lèi)重寫(xiě)父類(lèi)方法
- 父類(lèi)引用指向子類(lèi)對(duì)象
注意:多態(tài)時(shí)方法的多態(tài)玄货,屬性沒(méi)有多態(tài)
子類(lèi)重寫(xiě)了父類(lèi)的方法,則執(zhí)行子類(lèi)的方法
Static
-
對(duì)象中靜態(tài)代碼塊是在對(duì)象第一次構(gòu)造時(shí)執(zhí)行悼泌,且是第一個(gè)執(zhí)行
public class className { { System.out.println("匿名代碼塊"); //第2個(gè)執(zhí)行 一般可賦初始值 } static { System.out.println("靜態(tài)代碼塊"); //第1個(gè)執(zhí)行松捉,且只執(zhí)行一次,再new時(shí)不執(zhí)行 } public className () { System.out.println("構(gòu)造方法"); //第3個(gè)執(zhí)行 } }
抽象類(lèi) abstract
- 不能new抽象類(lèi)馆里,只能靠子類(lèi)去實(shí)現(xiàn)它
- 抽象類(lèi)中可以寫(xiě)普通方法
- 抽象方法必須寫(xiě)在抽象類(lèi)中
接口 interface
-
區(qū)別
- 普通類(lèi):只能具體實(shí)現(xiàn)
- 抽象類(lèi):具體實(shí)現(xiàn)和規(guī)范(抽象方法)都有
- 接口:只有規(guī)范隘世!自己無(wú)法寫(xiě)方法。專業(yè)的約束鸠踪。約束和實(shí)現(xiàn)分離:面向接口編程丙者。
接口時(shí)OO的精髓,是對(duì)對(duì)象的抽象营密,最能體現(xiàn)這一點(diǎn)的就是接口
-
作用
- 是一種約束
- 可以定義一些方法械媒,讓不同的人實(shí)現(xiàn)
- 所有的方法都是public abstract
- 所有的變量都是public static final
- 接口不能被實(shí)例化,接口中沒(méi)有構(gòu)造方法
- implements可以實(shí)現(xiàn)多個(gè)接口
- 必須要重寫(xiě)接口中的方法
異常
try评汰、catch纷捞、finally可以進(jìn)行異常的捕獲和處理
throw可在程序類(lèi)拋出異常,throws則是在方法上拋出異常被去,讓外層去捕獲處理
-
異常類(lèi)的結(jié)構(gòu)
異常類(lèi)結(jié)構(gòu)圖異常類(lèi)型 說(shuō)明 Exception 異常層次結(jié)構(gòu)的根類(lèi) RuntimeException 運(yùn)行時(shí)異常兰绣,多數(shù) java.lang 異常的根類(lèi) ArithmeticException 算術(shù)譜誤異常,如以零做除數(shù) ArraylndexOutOfBoundException 數(shù)組大小小于或大于實(shí)際的數(shù)組大小 NullPointerException 嘗試訪問(wèn) null 對(duì)象成員编振,空指針異常 ClassNotFoundException 不能加載所需的類(lèi) NumberF ormatException 數(shù)字轉(zhuǎn)化格式異常,比如字符串到 float 型數(shù)字的轉(zhuǎn)換無(wú)效 IOException I/O 異常的根類(lèi) F ileN otF oundException 找不到文件 EOFException 文件結(jié)束 InterruptedException 線程中斷 IllegalArgumentException 方法接收到非法參數(shù) ClassCastException 類(lèi)型轉(zhuǎn)換異常 SQLException 操作數(shù)據(jù)庫(kù)異常 -
經(jīng)驗(yàn)總結(jié)
- 處理運(yùn)行時(shí)異常時(shí),采用邏輯去合理規(guī)避踪央,同時(shí)輔助try-catch處理
- 在多重catch塊后面臀玄,可以加一個(gè)catch(Exception)來(lái)處理可能會(huì)被遺漏的異常
- 對(duì)于不確定的代碼,也可以加上try-catch畅蹂,處理潛在的異常
- 盡量去處理異常健无,切忌只是簡(jiǎn)單地調(diào)用printStackTrace()去打印輸出
- 具體如何處理異常,要根據(jù)不同的業(yè)務(wù)需求和異常類(lèi)型去決定
- 盡量添加finally語(yǔ)句塊去釋放占用的資源液斜。