How to call API in Java

關於一些庫調用的一些看法:java

總的來講就是一句話:我要的是結果,函數須要什麼我給什麼!我就拿java來講吧!編程

java是面向對象的編程語言,就我們學過的C++來講,多態是一種高級的編程技術,實際就是利用繼承,父類指針能夠接受指向子類的指針,從而根據不一樣的子類指針調用不一樣的子類相應的函數,這就實現了多態!在java中,在很大程度上就是給函數能有一個參數,參數最可怕的就是讓你傳進去一個對象!下面我就舉個具體的例子!編程語言

建立一個BufferedReader對象!那麼你能夠查API找到BufferedReader函數

查到的構造函數以下!ui

BufferedRreaderReader in);spa

BufferedReaderReader inint sz);指針

也就是說要構建一個BufferedReader類必須給它傳遞一個Reader 的對象,那咱們就查一下Reader查得的結果是:code

 

public abstract class Reader
extends Object
implements Readable, Closeable
 
一看這個類是個抽象的類,繼承於Object 實現了接口Readable CloseAble  再查其成員函數,發現有好幾個抽象的成員函數!要想建立一個Reader對象,要麼咱本身繼承一下Reader而後實現其幾個抽象的接口成員函數,要麼找非抽象的子類!對於java來講,我們都知道,什麼都封裝的好好的了,內部的細節咱們無法下手去本身編寫(必定程度上把咱們變的腦殘了,這就是我學java有一種受制於人的感受的緣由),因此咱們得找其子類!因而乎我又在Reader的繼承關係圖上看到了這個!

直接已知子類: 對象

BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader 繼承

這真是驚喜啊,這就意味着咱們不用本身去實現了,那咱們就挑一個吧,挑誰呢,好吧,就挑InputStreamReader吧,咱查InputStreamReader的詳細說明!

咱們能夠看見這個

public class InputStreamReader
extends Reader

還好這不是一個抽象類,否則咱們還得找這個類的孩子給他老爸!緊接着查其構造函數

構造方法摘要

InputStreamReader(InputStream in)
          
建立一個使用默認字符集的 InputStreamReader

 

InputStreamReader(InputStream in, Charset cs)
          
建立使用給定字符集的 InputStreamReader

 

InputStreamReader(InputStream in, CharsetDecoder dec)
          
建立使用給定字符集解碼器的 InputStreamReader

 

InputStreamReader(InputStream in, String charsetName)
          
建立使用指定字符集的 InputStreamReader

 

一看,個人媽呀,怎麼還須要一個InputStream類的對象呢,那行你不是須要一個InputStream 類的對象才肯給我一個InputStreamReader的對象嗎,那行,咱有求與你,我忍,我給,再查InputStream 類,在java API查得結果以下:

public abstract class InputStream
extends Object
implements Closeable
天啊,咋仍是個抽象類呢 ,看來這回玩的有點大了啊!這確定又須要找它的兒子了(子類)
因而咱們看見了這個:

直接已知子類:

AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream

 
那咱就拿FileInputStream 開刀吧,發現其構造函數以下:

構造方法摘要

FileInputStream(File file)
          
經過打開一個到實際文件的鏈接來建立一個 FileInputStream,該文件經過文件系統中的 File 對象 file 指定。

 

FileInputStream(FileDescriptor fdObj)
          
經過使用文件描述符 fdObj 建立一個 FileInputStream,該文件描述符表示到文件系統中某個實際文件的現有鏈接。

 

FileInputStream(String name)
          
經過打開一個到實際文件的鏈接來建立一個 FileInputStream,該文件經過文件系統中的路徑名 name 指定。

 

那咱就拿最後一個來講事,不就是一個String 類嗎,我給,好比說這個文件的名字就叫

Xiaohong吧,那麼咱們就能夠獲得一個FileInputStream類得對象了:

即:

String name = "xiaohong

 FileInputStream Xiao = new FileInputStream(name);

 好了,咱們再回到上一層

 對InputStreamReader 它的構造函數以下

InputStreamReader(InputStream in)(只列出了這個)!

你不是要一個InputStream 類的對象纔會給我一個InputStreamReader的對象嗎,那好,我如今已經有了,雖然這個類不是直接的InputStream類,可是吧我得到的這個類的對象

Xiao是繼承於InputStream的,根據多態,這個能夠的,其實用

InputStream做爲參數的目的也在這裏

因此我能夠用以下建立一個InputStreamReader對象:

InputStreamReader Xiaohong = new InputStreamReaderXiao);

 

這時候我們再回到上一層:就是咱想要建立的:

BufferedReader(Reader in) ;由於InputStreamReader 繼承於Reader 因此建立

BufferedReader 的一個對象就能夠這麼建立了:

BufferedReader CuiXiaohong = new BufferedReader(Xiaohong);

到此咱們的BufferedReader對象便建立了出來:

在這個過程當中咱們一直秉承着你要什麼我給什麼的原則,最終建立出了一個CuiFangFang ,是否是挺簡單的,我沒學過Andriod 可是我感受既然它的開發語言既然是java ,我想大概的調用思路就是這樣的:

 

在上述過程當中,即便我不知道其餘的類時幹什麼的,可是我仍是能夠達到我建立BufferedReader的這個目的,你有新的類我就查!固然在這個過程當中,對多態要有必定的掌握(我想既然你學過C++這個問題就不是問題了,對於抽象類的具體做用,我想在這個過程當中,基本上你也應該清楚了)!

 

其實java中能夠利用native 關鍵字來利用C、或者C++的,其實真正的內部實現仍是咱CC++作,不信你能夠查源碼,關鍵的部分全是CC++ 去實現的!
相關文章
相關標籤/搜索