为了账号安全,请及时绑定邮箱和手机立即绑定

JavaSE高阶知识总结

标签:
Java


1. 集合

JavaSE高阶知识总结JavaSE高阶知识总结

从上图可以看出,集合框架包含两种类型的容器:一是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. 流

JavaSE高阶知识总结JavaSE高阶知识总结

抽象基类

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()方法,则该线程结束生命周期,线程死不可复生

JavaSE高阶知识总结JavaSE高阶知识总结

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)

©著作权归作者所有:来自51CTO博客作者灰白世界的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消