随笔分类 -  Java基础

Java基础知识
摘要:Optional 一、Optional 类型 Optional<T> 对象或者是一个对T对象的封装,或者表示不是任何对象。 如果存在被T类型的对象,get方法会返回该对象,否则抛出NoSuchElementException。因此: isPresent()方法会反映出一个Optional<T>对象是 阅读全文
posted @ 2019-06-28 16:18 Shadowplay 阅读(242) 评论(0) 推荐(0)
摘要:Stream Stream 是用函数式编程方式在集合类上进行复杂操作的工具。 一)常用的流操作 惰性求值方法:只描述Stream,最终不产生新集合的方法(返回的还是Stream)。 及早求值方法:最终会从Stream产生值的方法。 1.创建Stream: java.util.Collection<E 阅读全文
posted @ 2019-01-22 10:43 Shadowplay 阅读(303) 评论(0) 推荐(0)
摘要:动态代理 一、静态代理 代理的背后一般至少有一个实际对象,代理的外部功能和实际对象一般是一样的, 用户与代理打交道,不直接接触实际对象。代理存在的价值: 1)节省成本比较高的实际对象创建开销,按需延迟加载,创建代理时 并不正真创建实际对象,而只是保存实际对象的地址,在需要时再加载或者创建。 2)执行 阅读全文
posted @ 2018-12-25 16:22 Shadowplay 阅读(243) 评论(0) 推荐(0)
摘要:注解 一、内置注解 Java内置了一些常用注解: 1.@Override 该注解修饰一个方法,表示当前类重写了父类的该方法。 2.@Deprecated 该注解可以修饰类、方法、字段、参数等。表示对应的代码已经过时,不应该被使用。 它是一种警告,不是强制性的。当一个元素被注解为Deprecated时 阅读全文
posted @ 2018-12-25 15:51 Shadowplay 阅读(156) 评论(0) 推荐(0)
摘要:反射 反射是在运行时获取类型的信息,再根据这些信息进行操作。 一、Class类 每个已加载的类在内存中都有一份类信息,每个对象都有指向它的类信息的引用。 在Java中,类信息对应的类就是java.lang.Class(注意不是小写的class),Object方法: Class是泛型类,还有一种获取C 阅读全文
posted @ 2018-12-25 15:13 Shadowplay 阅读(233) 评论(0) 推荐(0)
摘要:同步和协作工具类 一、读写锁ReentrantReadWriteLock ReadWriteLock接口的定义为: 读操作使用读锁,写操作使用写锁。只有"读-读"操作是可以并行的,"读-写"和"写-写"都不行。 始终只有一个线程能进行写操作,在获取写锁时,只有没有任何线程持有任何锁才可以获取到, 在 阅读全文
posted @ 2018-12-25 14:39 Shadowplay 阅读(227) 评论(0) 推荐(0)
摘要:异步任务执行服务 一、基本原理和概念 一)基本接口 1)Runnable和Callable:表示要执行的异步任务。 2)Executor和ExecutorService:表示执行服务。 3)Future:表示异步任务的结果。 Executor接口: ExecutorService扩展了Executo 阅读全文
posted @ 2018-12-25 09:47 Shadowplay 阅读(2296) 评论(0) 推荐(0)
摘要:并发容器 一、写时复制的List和Set CopyOnWrite即写时复制,或称写时拷贝,是解决并发问题的一种重要思路。 一)CopyOnWriteArrayList 该类实现了List接口,它的用法与其他List基本一样。其特点如下: 1)它是线程安全的 2)它的迭代器不支持修改操作,但也不会抛出 阅读全文
posted @ 2018-12-12 14:28 Shadowplay 阅读(268) 评论(0) 推荐(0)
摘要:并发基础知识 一、线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈。 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以继承Thread并重写run方法来实现一个线程: 2)实现Runnable接口 2.线程的基本属性和 阅读全文
posted @ 2018-12-11 10:57 Shadowplay 阅读(279) 评论(0) 推荐(0)
摘要:并发包 Java中还有一套并发工具包,位于包java.util.concurrent下,里面包括很多易用 且很多高性能的并发开发工具。 一、原子变量和CAS 为什么需要原子变量,因为对于例如count++这种操作,使用 synchronized成本太高了。Java并发包的基本原子变量有: Atomi 阅读全文
posted @ 2018-12-11 10:57 Shadowplay 阅读(287) 评论(0) 推荐(0)
摘要:文件高级技术 一、常见文件类型处理 一)属性文件 属性文件很简单,一行表示一个属性,属性就是键值对,键和值用(=)或者(:)分隔。 Java使用专门的类java.util.Properties处理这种文件。主要方法: 优势:可以自动处理空格,自动忽略空行,以#或者!开头的会被视为注释。 二)压缩文件 阅读全文
posted @ 2018-12-11 10:55 Shadowplay 阅读(407) 评论(0) 推荐(0)
摘要:文件基础技术 一、文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分。如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可表示颜色、字体、声音。 2.文件的元数据信息:如文件名、创建时间、修改时间、文件大小等。 3.文件名 阅读全文
posted @ 2018-12-11 10:55 Shadowplay 阅读(233) 评论(0) 推荐(0)
摘要:通用容器类和总结 一、抽象容器类 一)AbstractCollection 提供了Collection接口的基础实现,具体来说,实现了如下方法: AbstractCollection不知道基础数据是怎么存储的,它如何实现这些方法呢? 它依赖于如下更为基础的方法: add方法: size()是抽象方法 阅读全文
posted @ 2018-12-05 14:18 Shadowplay 阅读(324) 评论(0) 推荐(0)
摘要:优先级队列 一、PriorityQueue PriorityQueue是优先级队列,它实现了Queue接口,它的队列长度 没有限制,与一般队列的区别是,它有优先级概念,每个元素都有优先 级,队头的元素永远都是优先级最高的。PriorityQueue内部是用堆实现的。 一、基本用法 主要构造方法: P 阅读全文
posted @ 2018-11-28 13:54 Shadowplay 阅读(966) 评论(0) 推荐(0)
摘要:EnumMap & EnumSet 一、EnumMap 一)基本用法 EnumMap是保证顺序的:输出是按照键在枚举中的顺序。 二)实现原理 EnumMap的实例变量: 基本构造方法: 保存键值对的put方法: 二、EnumSet EnumSet的实现与EnumMap没有任何关系,而是用极为精简高效 阅读全文
posted @ 2018-11-28 10:44 Shadowplay 阅读(358) 评论(0) 推荐(0)
摘要:TreeMap & TreeSet & LinkedHashMap 一、TreeMap HashMap缺陷:键值对之间没有特定的顺序。在TreeMap中, 键值对之间按键有序,TreeMap的实现基础是排序二叉树。 一)基本用法 构造方法: TreeMap按键的比较结果对键进行重排,即使键实际上不同 阅读全文
posted @ 2018-11-27 15:07 Shadowplay 阅读(269) 评论(0) 推荐(0)
摘要:HashMap和HashSet 一)HashMap 1.Map接口 keySet()、values()、entrySet()有一个共同特点,它们返回的都是视图, 不是复制值,基于返回值的修改都会修改Map自身。例如: 2.HashMap 构造方法: 主要实例变量: Entry是一个内部类,构造方法: 阅读全文
posted @ 2018-11-16 15:06 Shadowplay 阅读(300) 评论(0) 推荐(0)
摘要:列表和队列 一)ArrayList 1.基本原理 ArrayList是一个泛型容器。内部会有一个数组elementData,一般会有预留空间 有一个整数记录实际的元素个数。 2.迭代 1)foreach: foreach的背后,编译器会把它转换为: 只要对象实现了Iterable接口,就可以使用fo 阅读全文
posted @ 2018-11-15 13:47 Shadowplay 阅读(673) 评论(0) 推荐(0)
摘要:泛型 一、基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型。 类、接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种数据类型。 这样,不仅可以复用代码降低耦合,而且可以提高代码的可读性和安全性。 1.泛型类 T表示类 阅读全文
posted @ 2018-11-14 22:41 Shadowplay 阅读(239) 评论(0) 推荐(0)
摘要:常用基础类 一)String String内部用一个字符数组表示字符串: 注意:Java9对此做了优化,采用byte[],如果字符都是ASCII字符,它就可以使用一个字节表示一个字符。 String有的两个构造方法,可以根据参数创建String变量: 编码相关: 返回字符串给定编码的字节表示: 根据 阅读全文
posted @ 2018-11-14 13:56 Shadowplay 阅读(709) 评论(0) 推荐(0)