JavaSE高阶知识总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE高阶知识总结相关的知识,希望对你有一定的参考价值。

1. 集合

技术分享图片技术分享图片
从上图可以看出,集合框架包含两种类型的容器:一是Collection,用来存储元素,二是Map,用来键值对关系映射,Collection接口又分为List、Set、Queue三个子接口,下面又分为一个抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap

  • 接口

    Collection:Collection存储一组不唯一、无序的对象

    List:List存储一组不唯一、有序的对象

    Set:Set存储一组唯一、无序的对象

    SortSet:继承自Set,存储有序的对象

    Map:Map存储一组键值对象

    Map.Entry:描述Map中的一个对象

    SortMap:j继承自Map,使Key保持升序

  • List和Set的区别

    List支持有序且不唯一的对象,Set只能存放无序对象,并且可以重复

    List可以通过索引取值,查找速度快,删除和插入速度慢,插入数据时,会影响当前数据的位置

    Set不可以通过索引取值,查找速度慢,删除和插入速度快,插入数据时,不会影响当前数据的位置

  • 实现类

    LinkList:允许为null,用于创建链表数据结构,线程非安全

    ArrayList:动态增长数组,线程非安全,增长偏移量为当前长度的50%

    HashSet:不允许出现重复对象,只允许存储一个null

    LinkedHashSet:具有可预知迭代顺序的Set接口的哈希表和链接列表实现

    HashMap 是一个散列表,它存储的内容是键值对映射,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,线程非安全

    LinkedHashMap:继承于HashMap,使用元素的自然顺序对元素进行排序

  • 如何使用迭代器

    iterationiterator():通过容器获得该容器的迭代器对象

    hasNext():判断迭代器中是否存在下一个元素

    next():返回迭代器中的下一个元素

2. 泛型

泛型允许提供编译类型的安全检测机制,该机制能够确保在编译时就能够检测到非法数据。泛型的本质是参数化l类型,就是操作的数据被指定为一个数据类型

  • 泛型方法

    范围方法在调用时可以接收不同类型的参数

    定义规则:

    所有泛型方法声明都有一个参数类型声明部分<>,该参数声明在方法返回值之前

    每个参数声明部分可以包含一个或多个数据类型,用逗号隔开

    类型参数能被声明返回值类型,也能被声明为形参类型

    类型参数只能表示引用类型

  • 泛型类

    泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分

    因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型

    public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; }

  • 类型通配符

    ?:可以接收任意泛型对象

    泛型的上限:extends

    泛型的下限:super

3. 流

技术分享图片技术分享图片

  • 抽象基类

    Reader:字符输出流

    Writer:字符输入流

    InputStream:字节输出流

    OutputStream:字节输入流

  • 实现类

    FileReader:字符输入流,从文件中读取某个字符

    BufferedReader:缓冲字符输入流,作用是为其他字符输入流提供缓冲功能,创建时需要向它传递一个字符输入流,BufferedReader会将Reader中的字符分批读取,每次读取一部分

    InputStreamReader:输入转换流,将一个字节流中的字节解码成字符,创建时需要一个字节输入流

    FileWriter:字符输出流,向文件中写入某个字符

    BufferedWriter:缓冲字符输出流,作用是为其他字符输出流提供缓冲功能,创建时需要向它传递一个字符输出流,BufferedWriter会将Writer中的字符分批写入,每次写入一部分

    OutputStreamReader:用于将写入的字符编码成字节后写入一个字节流,创建时需要一个字节输出流

    FileInputStream:字节输入流,从文件中读取某个字节,通常用来读取图片

    FileOutputStream:字节输出流,向文件中写入某个字节,通常用来写入图片

4. 序列化

  • 序列化对象

    ObjectOutputStream类用来序列化一个对象,创建时需要传递一个字节输出流,通过调用writeObject()方法将对象写入到文件中

  • 反序列化对象

    ObjectInputStream类用来反序列化一个对象,创建时需要传递一个字节输入流,通过调用readObject()方法将对象从文件中取出

5. 程序、进程和线程

程序:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念

进程:进程就是程序的执行过程

线程:通常一个进程中包含若干个线程,线程是一个比进程更小的执行单位,多个线程贡献一块内存空间

6. 线程的基本状态

新建:新建一个线程对象

可运行:线程创建后,调用该线程start()方法后,该线程就位于可运行线程池中等待线程调度,获得时间片

运行:可运行的线程获得了时间片,执行程序代码

阻塞:线程因为某种原因放弃了cpu使用权,让出时间片,程序暂停。直到线程进入可运行状态,才有可能再次获得时间片。发生阻塞无外乎三种情况,一是调用了wait()方法,JVM会将其放入等待队列中。只有其他线程调用notify()或notifyAll(),等待队列中的线程才会被加入到锁池。二是运行线程在获取对象的同步锁时,发现同步锁已被其他线程占用,JVM会将其放入锁池,只有拿到锁才能进入可运行状态。三是运行线程调用了sleep()、join()、或者I/O请求,JVM会将该线程置为到阻塞状态,当sleep超时、join等待线程结束或超时、I/0处理完毕,线程可重新进入可运行状态。

死亡:线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期,线程死不可复生

技术分享图片技术分享图片

7. 反射

Java反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取属性以及调用方法的机制称为反射

  • Class 表示正在运行的Java应用程序中的类和接口

    如何获取某个class文件对象的class对象?

    已知类和对象,通过类名.class或对象.getClass()

    未知类和对象通过Class.forName("包名.类名")

  • Constructor 关于类的单个构造方法的信息以及对它的访问权限

    Constructor类的实例对象代表类的一个构造方法

    如何获取某个类的所有构造方法?

    通过class对象的getConstructors()方法

  • Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限

    Field代表某个类中的一个成员变量,并提供动态访问的权限

    如何获取所有的成员变量?

    通过getFields()方法获取所有public属性,通过getDeclaredFields()方法获取所有声明属性

    如何获取指定的成员变量

    通过getField("")获取public属性,通过getDeclaredField("name")获取声明属性

    设置Field变量是否可以访问

    field.setAccessible(boolean);

    Field变量值的读取、设置

    • field.get(obj);

    • field.set(obj, vlaue);
  • Method 提供关于类或接口上单独某个方法的信息

    Method类代表某个类中的一个成员方法

    如何获取所有方法?

    通过getMethods()方法获取所有public方法,通过getDeclaredMethods()方法获取所有声明方法

    如何获取指定方法?

    通过getMethod(String name, Class<?>...parameterTypes)获取指定public方法,通过getDeclaredMethod(String name, Class<?>...parameterTypes)方法获取指定声明方法

  • 通过反射执行方法

    invoke(Object obj, Object...args)

以上是关于JavaSE高阶知识总结的主要内容,如果未能解决你的问题,请参考以下文章

JavaSe基础知识总结

JavaSe基础知识总结

Python高阶函数总结

JAVASE知识点总结

javaSE所学知识点总结

JAVASE知识点总结