对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...
前言:面向?qū)ο蟮娜筇卣鞣庋b (Encapsulation)繼承 (Inheritance)多態(tài) (Polymorphism)編程思想:
面向過(guò)程:做某件事情都需要自己親歷親為,按照步驟去完成
面向?qū)ο?#xff1a;做某件事情不需要自己親歷親為,只需指定特定的對(duì)象去完成即可。1.現(xiàn)實(shí)世界就是由對(duì)象組成的,如下圖,萬(wàn)物皆對(duì)象(不是單指女朋友也不是單指男朋友哈~)
2.面向?qū)ο笤O(shè)計(jì)和開(kāi)發(fā)程序的好處
1.交流更加流暢
2.提高設(shè)計(jì)和開(kāi)發(fā)效率
3.面向?qū)ο蟮乃枷敕先祟?lèi)思維習(xí)慣
二、對(duì)象和封裝1.類(lèi)和對(duì)象的概念
1,類(lèi)是對(duì)某一事物的描述,是抽象的,概念上的定義。
2,對(duì)象是實(shí)際存在的該事物的個(gè)體,是具體的、現(xiàn)實(shí)的。2.成員變量和局部變量的區(qū)別成員變量:定義在類(lèi)中,有初始值局部變量:定義在方法中,無(wú)初始值3.方法的重載:OrverLoad
兩同三不同
1,在同一個(gè)類(lèi)中,同一個(gè)方法名
2,參數(shù)列表不同(個(gè)數(shù)不同,順序不同,類(lèi)型不同)
方法的重載跟返回值無(wú)關(guān)4.靜態(tài)變量(類(lèi)變量)相當(dāng)于全局變量
用static修飾的變量叫靜態(tài)變量也叫類(lèi)變量
用static修飾的方法叫靜態(tài)方法也叫類(lèi)方法
修飾代碼塊叫靜態(tài)塊(先于main之前調(diào)用,先塊后main)
可以直接通過(guò)類(lèi)名直接調(diào)用 也可以 用對(duì)象調(diào)用,但是推薦類(lèi)名調(diào)用
靜態(tài)方法中只能調(diào)用靜態(tài)變量
非靜態(tài)方法中不能定義靜態(tài)變量
5.構(gòu)造方法:方法名和類(lèi)名相同,沒(méi)有返回值類(lèi)型,
每一個(gè)類(lèi)都會(huì)有一個(gè)默認(rèn)的無(wú)參構(gòu)造方法
當(dāng)寫(xiě)了一個(gè)有參構(gòu)造,默認(rèn)無(wú)參構(gòu)造就會(huì)消失
構(gòu)造方法的作用:
1,實(shí)例化對(duì)象
2,給成員變量賦值
構(gòu)造方法包含無(wú)參構(gòu)造和有參構(gòu)造
三、封裝和繼承1.封裝的概念:
將類(lèi)的某些信息隱藏在類(lèi)內(nèi)部,不允許外部程序直接訪問(wèn),
而是通過(guò)該類(lèi)提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)。
封裝的好處:
1,隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)
2,方便加入控制語(yǔ)句
3,方便修改實(shí)現(xiàn)
4,只能通過(guò)規(guī)定方法訪問(wèn)數(shù)據(jù)2.繼承:extends
繼承是子類(lèi)對(duì)父類(lèi)的拓展,延伸
繼承的特點(diǎn):
1,關(guān)鍵字 extends
2,java類(lèi)沒(méi)有多繼承,只有單繼承,但是可以多重繼承
3,不能繼承父類(lèi)的三種情況 private成員、構(gòu)造方法、子類(lèi)與父類(lèi)不在同包,使用默認(rèn)訪問(wèn)權(quán)限的成員
4,java中所有的類(lèi)的祖先都是Object類(lèi)
5,不同的叫法 父類(lèi):基類(lèi),超類(lèi) 子類(lèi):派生類(lèi)
3.super: 對(duì)父類(lèi)對(duì)象的引用
super(name):表示調(diào)用了父類(lèi)的的有參構(gòu)造方法。調(diào)用父類(lèi)的構(gòu)造方法,必須寫(xiě)在構(gòu)造方法中的第一行
還可以使用super關(guān)鍵字直接調(diào)用父類(lèi)的方法,如 super.print();(后面的學(xué)習(xí)還會(huì)具體講)4.final 最終的
1,修飾變量、常量, 值不可改變
2,修飾方法, 不能被重寫(xiě)
3,修飾類(lèi), 不能被繼承5.方法的重寫(xiě)
重寫(xiě)的特點(diǎn):方法名 參數(shù)列表 返回值類(lèi)型 必須和父類(lèi)方法一致
訪問(wèn)權(quán)限不能比父類(lèi)的更嚴(yán)格
@Override //注解 規(guī)定它下面的方法必須是重寫(xiě)的方法
6.總結(jié):
四、抽象和多態(tài)1.抽象(abstract)
1,意義:抽象類(lèi)是一種不完全規(guī)范,規(guī)定子類(lèi)必須具備哪些方法
2,特點(diǎn): 抽象類(lèi)中可以有普通屬性和普通方法
抽象類(lèi)中有構(gòu)造方法,但是不能實(shí)例化
抽象類(lèi)只能被繼承
抽象方法只能被子類(lèi)重寫(xiě)或者子類(lèi)繼續(xù)抽象
有抽象方法的類(lèi)必須是抽象類(lèi)
抽象類(lèi)中不一定有抽象方法2.多態(tài)什么是多態(tài):生活中的多態(tài):不同類(lèi)型的打印機(jī)打印效果不同 如下圖:
程序中的多態(tài):
一個(gè)對(duì)象在不同的載體中呈現(xiàn)不同的形態(tài)。
同一個(gè)引用類(lèi)型,調(diào)用同一個(gè)方法,得到不同的結(jié)果。1,形參多態(tài)的必要條件
1,要有繼承關(guān)系
2,要有方法的重寫(xiě)
3,父類(lèi)的引用指向子類(lèi)的對(duì)象,2,用途:可以減少類(lèi)中的代碼量
可以提高代碼的可拓展性和可維護(hù)性
繼承是多態(tài)的基礎(chǔ),沒(méi)有繼承就沒(méi)有多態(tài)3,使用父類(lèi)作為方法形參和使用父類(lèi)作為返回值類(lèi)型是使用多態(tài)的常用方式。3.轉(zhuǎn)型
1,向上轉(zhuǎn)型:把子類(lèi)轉(zhuǎn)換為父類(lèi),屬于自動(dòng)類(lèi)型轉(zhuǎn)換。
2,向下轉(zhuǎn)型:把父類(lèi)轉(zhuǎn)換為子類(lèi),必須強(qiáng)制類(lèi)型轉(zhuǎn)換。
注意:
1,向上轉(zhuǎn)型后通過(guò)父類(lèi)引用變量調(diào)用的方法是子類(lèi)覆蓋或繼承父類(lèi)的方法,
通過(guò)父類(lèi)引用變量無(wú)法調(diào)用子類(lèi)特有的方法。
2,向下轉(zhuǎn)型后可以訪問(wèn)子類(lèi)特有的方法,必須轉(zhuǎn)換為父類(lèi)指向的真實(shí)子類(lèi)類(lèi)型,
否則將出現(xiàn)轉(zhuǎn)換異常(ClassCastException)。4.instanceof:運(yùn)算符用于判斷一個(gè)對(duì)象是否屬于一個(gè)類(lèi)或?qū)崿F(xiàn)一個(gè)接口。
instanceof:運(yùn)算符通常和強(qiáng)制類(lèi)型轉(zhuǎn)換結(jié)合使用,先通過(guò)instanceof進(jìn)行類(lèi)型判斷,
再進(jìn)行相應(yīng)的強(qiáng)制類(lèi)型轉(zhuǎn)換。4.總結(jié)
五、接口1,接口的定義(interface):
是一種強(qiáng)制性(完全)的規(guī)范。 接口不是一個(gè)類(lèi),
定義一系列的屬性(靜態(tài)常量)和行為(抽象方法)2,接口的特征:
1.不能被實(shí)例化,接口沒(méi)有構(gòu)造方法
2.接口只能被實(shí)現(xiàn)implements 或者繼續(xù)定義為接口
3.接口中的屬性默認(rèn)是 public static fianl 修飾的靜態(tài)常量
4.接口中的方法默認(rèn)是 public abstract 修飾的抽象方法
5. 只能有抽象方法
6. 接口中的方法必須被子類(lèi)重寫(xiě)
7…一個(gè)類(lèi)實(shí)現(xiàn)多個(gè)接口用逗號(hào)隔開(kāi)
public class Man implements IPerson,Program
8.如果一個(gè)類(lèi)有繼承又有實(shí)現(xiàn),那么是先繼承再實(shí)現(xiàn)
9.接口可以繼承多個(gè)接口,用逗號(hào)隔開(kāi)!3,類(lèi)和類(lèi)的關(guān)系 繼承關(guān)系
類(lèi)和接口的關(guān)系 實(shí)現(xiàn)關(guān)系 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口()
接口和接口的關(guān)系 繼承關(guān)系 可以繼承多個(gè)接口4,類(lèi)只能繼承一個(gè)父類(lèi),但可以實(shí)現(xiàn)多個(gè)接口,一個(gè)類(lèi)如果實(shí)現(xiàn)了一個(gè)接口,則必須 實(shí)現(xiàn)接口中的全部方法,否則必須將其定義為抽象類(lèi)。
Java通過(guò)實(shí)現(xiàn)接口達(dá)到了多重繼承的效果。5,接口表示一種約定,接口表示一種能力,接口體現(xiàn)了約定和實(shí)現(xiàn)相分離的原則。6,抽象類(lèi)利于代碼復(fù)用,接口利于代碼維護(hù)。7.面向接口編程
1,通過(guò)面向接口編程,可以降低代碼間的耦合性,提高代碼的可拓展性和可維護(hù)性。
2,面向接口編程意味著:開(kāi)發(fā)系統(tǒng)時(shí),主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架,這樣就可以 通過(guò)更換實(shí)現(xiàn)接口的類(lèi)來(lái)實(shí)現(xiàn)更換系統(tǒng)。8.接口有比抽象類(lèi)更好的特性:
1,可以被多繼承
2,設(shè)計(jì)和實(shí)現(xiàn)完全分離
3,更自然的使用多態(tài)
4,更容易搭建程序框架
5,更容易更換實(shí)現(xiàn)9.接口和抽象類(lèi)的區(qū)別:
1,接口不是類(lèi),抽象是是一個(gè)類(lèi)
2,接口沒(méi)有構(gòu)造方法,抽象類(lèi)有構(gòu)造方法 ,都不可以實(shí)例化
3,接口只能被實(shí)現(xiàn) ,抽象類(lèi)只能被繼承
4,接口中只能有公共的靜態(tài)常量和公共的抽象方法,抽象類(lèi)中可以有普通的屬性和方法
5,接口可以多實(shí)現(xiàn)(多繼承),抽象類(lèi)只能單繼承10.總結(jié)
六、異常(exception):1,什么是異常?
在程序運(yùn)行過(guò)程中,發(fā)生了不可預(yù)料的錯(cuò)誤,導(dǎo)致程序終止。2,異常的五個(gè)關(guān)鍵字:try、catch、finally、throw、throws
3,異常的格式
try{}catch(){}
try{}finally{}
try{}catch(){}finally{}
catch()塊可以有多個(gè),但是catch塊捕捉有順序 先子類(lèi)后父類(lèi)4,try代碼塊中 表示 可能出現(xiàn)異常代碼塊,catch代碼中 捕捉到異常之后的處理。finally 表示不管有沒(méi)有異常都會(huì)執(zhí)行的代碼塊5,finally塊中語(yǔ)句不被執(zhí)行的唯一情況:在異常處理代碼中執(zhí)行System.exit(1)。6,throw表示拋出異常
throws 表示聲明異常 告訴調(diào)用者這個(gè)方法有異常,誰(shuí)調(diào)用誰(shuí)處理7,throw和throws的區(qū)別
1.作用不同:throw用于在程序中拋出異常。throws用于聲明在該方法內(nèi)拋出了異常
2.使用的位置不同:throw位于方法體內(nèi)部,可以作為單獨(dú)語(yǔ)句使用。throws必須跟在
方法參數(shù)列表的后面,不能單獨(dú)使用。
3.內(nèi)容不同:throw拋出一個(gè)異常對(duì)象,而且只能是一個(gè)。throws后面跟異常類(lèi),而且
可以跟多個(gè)異常類(lèi)。
七、集合框架
在我的另一篇博文里有詳細(xì)介紹,下面是鏈接:
集合框架
八、多線程1.進(jìn)程: 在內(nèi)存中開(kāi)辟了一塊空間,供程序運(yùn)行。一個(gè)進(jìn)程表示一個(gè)程序的運(yùn)行。
一個(gè)程序可以開(kāi)多個(gè)進(jìn)程。2.線程:是程序運(yùn)行中最小的單位。一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。
進(jìn)程中執(zhí)行運(yùn)算的最小單位,可完成一個(gè)獨(dú)立的順序控制流程3.實(shí)現(xiàn)多線程的兩種方式:
1,寫(xiě)一個(gè)類(lèi) 繼承Thread
重寫(xiě)run();方法
通過(guò)start();啟動(dòng)線程
如果調(diào)用run方法,那么就只有一個(gè)main線程
2,實(shí)現(xiàn) Runable接口
重寫(xiě)run();方法
通過(guò)代理模式運(yùn)行start();啟動(dòng)線程4.設(shè)置線程運(yùn)行的優(yōu)先級(jí)1-10 :setPriority(10) Thread.MAX_PRIORITY Thread.MIN_PRIORITY
優(yōu)先級(jí)高的線程會(huì)獲得更多的運(yùn)行機(jī)會(huì)。5.synchronized:同步鎖 :當(dāng)多個(gè)線程對(duì)象操縱同一資源時(shí),要使用synchronized關(guān)鍵字來(lái)進(jìn)行資源的
的同步處理,可以使用同步方法和同步代碼塊來(lái)實(shí)現(xiàn)。6.StringBuffer 線程安全 效率低
StringBuilder 線程不安全 效率高
HashTable 線程安全 效率低
HashMap 線程不安全 效率高7.線程睡眠:sleep()方法使線程轉(zhuǎn)到阻塞狀態(tài)8.線程強(qiáng)制運(yùn)行:join()方法使當(dāng)前線程暫停執(zhí)行,等待調(diào)用該方法的線程結(jié)束后再繼續(xù)執(zhí)行本線程。9.線程禮讓:yield()方法、暫停當(dāng)前正在執(zhí)行的線程對(duì)象,把執(zhí)行機(jī)會(huì)讓給相同的或者更高優(yōu)先級(jí)的線程。
九、File和IO流1、File:
2.File類(lèi)常用的方法
3.以下是代碼演示:
package jbit.io;
import java.io.*;
public class FileMethods {
public static void main(String[] args) {
FileMethods2 fm=new FileMethods2();
File file=null;
file=new File("D:myDoctest.txt");
//fm.create(file);
fm.showFileInfo(file);
//fm.delete(file);
}
/**
* 創(chuàng)建文件的方法
* @param file 文件對(duì)象
*/
public void create(File file){
if(!file.exists()){
try {
file.createNewFile();
System.out.println("文件已創(chuàng)建!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 刪除文件
* @param file 文件對(duì)象
*/
public void delete(File file){
if(file.exists()){
file.delete();
System.out.println("文件已刪除!");
}
}
/**
* 顯示文件信息
* @param file 文件對(duì)象
*/
public void showFileInfo(File file){
if(file.exists()){ //判斷文件是否存在
if(file.isFile()){ //如果是文件
System.out.println("名稱:" + file .getName());
System.out.println("相對(duì)路徑: " + file.getPath());
System.out.println("絕對(duì)路徑: " + file.getAbsolutePath());
System.out.println("文件大小:" + file.length()+ " 字節(jié)");
}
if(file.isDirectory()){
System.out.println("此文件是目錄");
}
}else
System.out.println("文件不存在");
}
}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455564.java流的分類(lèi)
5.文本文件的讀寫(xiě)
用FileInputStream和FileOutputStream讀寫(xiě)文本文件
用BufferedReader和BufferedWriter讀寫(xiě)文本文件6.二進(jìn)制文件的讀寫(xiě)
使用DataInputStream和DataOutputStream讀寫(xiě)二進(jìn)制文件7.InputStream類(lèi)常用方法
int read( )
int read(byte[] b)
int read(byte[] b,int off,int len)
void close( )
int available()
子類(lèi)FileInputStream常用的構(gòu)造方法
FileInputStream(File file)
FileInputStream(String name)8.OutputStream類(lèi)常用方法
void write(int c)
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close( )
子類(lèi)FileOutputStream常用的構(gòu)造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)9.Writer類(lèi)常用方法
write(String str)
write(String str,int off,int len)
void close()
void flush()
子類(lèi)BufferedWriter常用的構(gòu)造方法
BufferedReader(Writer out)10.總結(jié)
總結(jié)
以上是生活随笔為你收集整理的对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 报警备案是什么意思呀(报警备案是什么意思
- 下一篇: xrd精修教程_XRD精修系列干货 |