第六章:认识Java的API-使用Java函数库
该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!
第六章:认识Java的API-使用Java函数库
Java内置有数百个类:
如果你知道如何从统称Java API的Java的函数库中查找所需功能,那就不用再造轮子了;
核心Java函数库是由一堆等着被你当做组件使用的类集合而成的;
你可以大量运用这些预设的组件来写程序;
数组无法改变大小:
我们之前使用的数组,如String[] ss = new String[3];在初始化时就已经确定了数组大小;
可以使用新的数组从原数组中copy值,变相实现;
那么有没有能增加/删除元素自动缩放的、类似数组的结构呢?
ArrayList:
他不是数组,它是Java函数库中的另一个类;
Java SE(标准版本)带有很多创建好的类,类似我们写好的代码,只不过它们已经被编译过了;
Methods:
add(Object elem)
remove(int index)
remove(Object elem)
contains(Object elem)
isEmpty();
indexOf(Object elem)//没有的话会返回-1
size()
get(int index)
想知道API里有什么,确实需要花些时间,稍后介绍;
再看ArrayList:
我是个对象;
数组没办法删除元素,但我可以,并且动态改变我的大小;
但对于primitive主数据类型,不能直接保存,包装起来就好了;这个在Java5.0,包装工作会自动进行;
使用的时候,也是在运用ArrayList类型的对象,使用“.”运算符来调用它的方法;
相比于数组,会以特殊的语法来操作,但是这样的特殊语法只能用在数组上;虽说数组也是对象,但是他有自己的规则,你无法调用它的方法,最多只能存取它的length实例变量;
(其实可以看到java中的类都是将实例变量封装的,调用的一般都是方法)
一般数组在创建时就必须确定大小;ArrayList则不需要;
一般数组使用特殊的语法,[0]这种下标的方式;ArrayList只是个普通对象;
存放对象一般数组必须指定位置,切不能越界;ArrayList可以用add(int,Object)或add(Object);
ArrayList的参数化:(parameterized)
Java5.0:参数化类型(类似Swift的泛型,用法和OC差不多)
ArrayList<String>
<String>是类型参数,ArrayList<String>表示字符串的集合;否则ArrayList将是异质对象的集合;
使用ArrayList需要:
import java.util.ArrayList;
或
import java.util.*;
(还记得之前用过一个import java.io.*;吗!)
这里需要熟悉几个运算符:
与 和 或 运算符(&&,||);
不等于 和 非 运算符(!= 和 !);
短运算符(&&,||):
使用&&时,JVM如果发现左边为false,就不会再去判断右边;||同理;
长运算符(&,|):
使用在boolean表达式时会强制JVM一定计算两边的算事;
但这两个运算符通常是用来作位运算的;
使用函数库(Java API):
在Java的API中,类是被包装在包中的;
要使用API中的类,必须知道他被放到哪个包中;
Java函数库中的每个类都属于某个包:
这些包都有名字,像是javax.swing;ArrayList是放在java.util这个包中的;(java.util放了很多工具类,后续会介绍包括如何自制包)
使用来自API的类需要知名函数库类的完整名称:包的名称加上类的名称:
像是System、String、Math都属于java.lang这个包;
ArrayList的全名是java.util.ArrayLsit;
指定使用类的方法(两种):
1)import:
放一个import述句在程序源文件最前边,使用的时候就可以直接使用ArrayList类型;
import java.util.ArrayList;
2)type:
在程序代码中打出全名,无论哪里,只要用就打出全名;(除非是来自java.lang这个包中的类)
如用作方法返回类型声明:public java.util.ArrayList<Dog> foo(){}
包之所以重要的原因:
1)包可以帮助组织项目或函数库,相对于一大堆零散的类,以功能来组织会更好;
2)包可以制造名称空间,以便错开相同名称的类;
3)包可以限制 同一包之间的类才能相互存取,以维护安全性(访问控制权限);
Java的命名传统能够防止发生包的名称冲突;
javax开头的包代表什么?(javas.swing)
包含在标准函数库中的包,都放在以java开头的包中;
后来出现了一些没有包含在标准函数库中的包,被称为扩展的类;
扩展的类有两种类型:即官方认可的标准扩展,其余beta版就是非标准的;
标准版的扩展都是以javax作为包名称的开头,如Swing函数库,就是以javax.swing开头的;
要点:
ArrayList是个Java API的类;
使用add()来新增ArrayList的元素;
使用remove()来删除ArrayList中的元素;
要寻找某项元素的位置,使用indexOf();
使用isEmpty()来判别ArrayList是否为空;
获取ArrayList大小,使用size()方法;
传统数组可以用length这个变量获取大小;
ArrayList会自动地调整大小;
可以使用参数类型来声明数组内容的类型;ArrayList<Button>;
ArrayList只能携带对象而非primitive主数据类型,但编译器能够自动把primitive主数据类型包装成Object;
类会用包来组织;
类有完整的名:包名+类名;
除java.lang之外,其他包的类都需要指定全名;也可以在源文件最开始import指令来说明所使用的包;
知识小问答:
使用import会把程序变大吗?编译过程会把包或类包进去吗?
这是C的思路,运用import知识帮助省下每个类前的包名称而已;程序不会因为用了import而变大或变慢;
为何不必import java.lang?
java.lang是个预先被引用的包;因为它是经常用的基础包;
java.lang.String和java.lang.System是独一无二的class,Java会知道要去哪里找;
如何查询API:
我们需要知道库中有哪些类,找到类之后,还需要知道他在做什么?
方式1:查阅参考书;
方式2:查阅HTML API文档
如下图:
左上是包;
左下是包中的类;
右侧是类的详情;