How to call API in Java

关于一些库调用的一些见解:

总的来说就是一句话:我要的是结果,函数需要什么我给什么!我就拿java来说吧!

java是面向对象的编程语言,就咱们学过的C++来说,多态是一种高级的编程技术,实际就是利用继承,父类指针可以接受指向子类的指针,从而根据不同的子类指针调用不同的子类相应的函数,这就实现了多态!在java中,在很大程度上就是给函数能有一个参数,参数最可怕的就是让你传进去一个对象!下面我就举个具体的例子!

创建一个BufferedReader对象!那么你可以查API找到BufferedReader

查到的构造函数如下!

BufferedRreader(Reader in);

BufferedReader(Reader in,int sz);

也就是说要构建一个BufferedReader类必须给它传递一个Reader 的对象,那我们就查一下Reader查得的结果是:

 

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 InputStreamReader(Xiao);

 

这时候咱们再回到上一层:就是咱想要创建的:

BufferedReader(Reader in) ;因为InputStreamReader 继承于Reader 所以创建

BufferedReader 的一个对象就可以这么创建了:

BufferedReaderCuiXiaohong = new BufferedReader(Xiaohong);

到此我们的BufferedReader对象便创建了出来:

在这个过程中我们一直秉承着你要什么我给什么的原则,最终创建出了一个CuiFangFang ,是不是挺简单的,我没学过Andriod 但是我感觉既然它的开发语言既然是java ,我想大概的调用思路就是这样的:

 

在上述过程中,即使我不知道其他的类时干什么的,但是我还是可以达到我创建BufferedReader的这个目的,你有新的类我就查!当然在这个过程中,对多态要有一定的掌握(我想既然你学过C++这个问题就不是问题了,对于抽象类的具体作用,我想在这个过程中,基本上你也应该清楚了)!我再把大概的流程梳理一下:

 
最终你便产生了(CuiXiaohong)
呵呵,这个过程还是挺轻松的不是吗!
其实java中可以利用native 关键字来利用C、或者C++的,其实真正的内部实现还是咱C、C++做,不信你可以查源码,关键的部分全是C和C++ 去实现的!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值