java基础之常见API

泛型:

一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。
泛型的概念。泛型实现了参数化类型的概念,使代码可以应用于多种类型。
有些情况下,我们需要集合能够同时拥有持有多种类型的对象。但是,通常而言,我们只会使用容易来存储一种类型的对象。泛型的主要目的之一就是用来制定集合要持有什么类型的对象,而是由编译器来保证类型的正确性。
因此,与其使用Object,我们更喜欢暂时不指定类型,而是稍后再决定具体使用什么类型,要达到这个目的,需要使用类型参数,用尖括号括住,放在类名后面。然后在使用这个类型的时候,再用实际的类型替换此类型参数。
泛型的写法:
List list = new ArrayList() ;
List list = new ArrayList<>() ;
List list = new ArrayList() ;


集合:

List可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。
有两种类型的List:
1.基本的ArrayList,他长于随机访问元素,但是在List的中间插入和移除元素时较慢。
2.LinkedList,它通过代价较低的在List中间进行的插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大
可以用contains()方法来确定某个对象是否在列表中。如果你想移除一个对象,则可以将这个对象的引用传递给remove()方法。同样,如果你有一个对象的引用,则可以使用indexof()来发现该对象在List中所处未知的索引编号。
当确定一个元素是否属于某个List,发现某个元素的索引,以及从某个List中移除一个元素时,都会用到equals()方法。
对于List,add()是插入元素的方法之一,而get()是取出元素的方法之一。但是如何才能不重写代码就可以应用于不同类型的集合?
迭代器的概念可以用于达成此目的。迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价小。因此,经常可以看到对迭代器有些奇怪的限制;例如:Iterator只能单向移动,他只有以下几种用法:
(1)使用方法Iterator()要求集合返回一个Iterator。Iterator将准备好返回序列的第一个元素。
(2)使用next()获得序列中的下一个元素。
(3)使用hasNext()检查序列中是否还有元素。
(4)使用remove()将迭代器新近返回的元素删除。


方法引用:

方法引用本质就是一个lambda表达式
1、什么时候用方法引用
当要传递给Lambda体的操作,但某个类已经有此功能的方法了,就可以使用方法引用。
2. 方法引用是什么?
方法引用可以看做是Lambda表达式的深层次表达。本质就是Lambda表达式,也就是函数式接口的一个实例。通过方法名来指向一个方法,可以认为是Lambda表达式的一个语法。
3.方法引用的要求?
接口的方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致。(方法名可以不同)
4. 方法引用的格式:
采用操作符 :: 将类(或对象)与方法名分隔开来
5. 引用写法:
a. 对象实例:: 方法名
b. 类名:: 静态方法名
c. 类名:: 实例方法名
d. 类名:: new
e. 数组[]:: new


I/O流:

1.File类
File类这个名字有一定的误导性;我们可能会认为它指代的是文件,实际上却并非如此。它既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。如果它指的是一个文件集,我们就可以对此集合调用List()方法,这个方法会返回一个字符数组。我们很容易就可以理解返回的是一个数组而不是某个更具灵活性的类集合,因为元素的个数是固定的,所以我们想取得不同的目录列表,只需要再创建一个不同的File对象就可以了。
pathSeparator :路径分隔符 a/b/c , window环境下支撑正斜杠和反斜杠。Linux下只支持正斜杠。
绝对路径:指的是从盘符开始的路径。(网络路径也是绝对路径)
相对路径:相对的是工程所在的路径。
2.I/O流java类库中的I/O类分成输入和输出两部分,可以在JDK文档里的类层次机构中查看到。通过继承,任何自Inputstream和Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或者字节数组。同样,任何自OutputStream或Writer派生而来的类都含有名为writer()的基本方法,用于写单个字节或者字节数组。
在java1.0中,类库的设计者首先限定与输入有关的所有类都应该从InputStream继承,而与输出有关的所有类都应该从OutputStream继承。
(1)InputStream类型:
1)字节数组。
2)String对象。
3)文件。
4)管道,工作方式与实际管道相似,从一端输入,从另一端输出。
5)一个由其他种类的流组成的序列,以便我们可以将它们收集合并到一个流内。
6)其他数据源。
(2)OutputStream类型
该类别的类决定了输出所要去往的目标:字节数组,文件或管道。
几乎所有原始的javaI/O流类都有响应的Reader和Writer类来提供天然的Unicode操作。然而在某些场合,面向字节的InputStream和OutputStream才是正确的解决方案;特别是,java.util.zip类库就是面向字节的而不是面向字符的。因此,最明智的做法是尽量尝试使用Reader和Writer,一旦程序代码无法成功编译,我们就会发现自己不得不使用面向字节的库类。
(3)更改流的行为
对于InputStream和OutputStream来说,我们会使用FilterInputStream和FilterOutputStream的装饰器子类来修改流以满足特殊需要。
尽管BufferedOutputStream是FilterOutputStream的子类,但BufferedWriter并不是FilterWriter的子类。无论我们何时使用readLine(),都不应该使用DataInputStream,而应该使用BufferedReader。除了这一点,DataInputStream仍是I/O库类的首选成员。
为了更容易的过渡到使用PrintWriter,它提供了一个既能接受Writer对象又能接受任何OutputStream对象的构造器。PrintWriter的格式化接口实际上与PrintStream相同。
(4)缓冲输入文件
如果想要打开一个文件用于字符输入,可以使用以String或File对象作为文件名的FileInputReader。为了提高速度,我们希望对那个文件进行缓冲,那么我们将所生成的引用传给一个BufferedReader构造器。由于BufferedReader也提供给readLine()方法,所以这是我们的最终对象和进行读取的接口。当readLine()将返回null时,你就达到了文件的末尾。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值