第六章:认识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文档

如下图:
    左上是包;
    左下是包中的类;
    右侧是类的详情;

猜你喜欢

转载自blog.csdn.net/baby_hua/article/details/79230870
今日推荐