Java学习
Coder_py
这个作者很懒,什么都没留下…
展开
-
Java NIO Selector
Java NIO SelectorJava NIO Selector是一个组件,可以检查一个或多个Java NIO Channel实例,并确定哪些通道可供使用,读或写.这样,单个线程可以管理多个通道,从而可以管理多个网络连接。为什么要使用选择器?仅使用单个线程来处理多个通道的优点是只需要更少的线程来处理通道。 实际上,只能使用一个线程来处理所有通道。 线程之间的切换对于操作系统来说是昂贵的,...原创 2020-04-12 20:48:05 · 314 阅读 · 0 评论 -
Java-NIO(3)
Java-NIO(3)ByteBufferByteBuffer为Buffer子类,可以在缓冲区中以字节为单位对数据进行存取此类定义了对字节缓冲区的六种操作类别:读取和写入单个字节的绝对和相对的get和put方法;相对批量获取方法,用于将字节的连续序列从此缓冲区传输到数组中;相对批量放置方法,用于将字节数组或某些其他字节缓冲区中连续的字节序列传输到此缓冲区中;绝对和相对...原创 2020-04-08 09:05:10 · 300 阅读 · 0 评论 -
Java-NIO(2)
Java-NIO(2)缓冲区常规I/O操作存在很大缺点,主要是因为它们是阻塞的,而NIO正是为了解决常规I/O执行效率低的问题,采用非阻塞高性能运行的方式来避免出现笨拙的同步I/O带来的效率低的问题缓冲区Buffer,在NIO的使用中地位很高,因为数据就是放到缓冲区,对数据进行处理的NIO中的Buffer是一个用于存储基本数据类型的容器,它以类似于数组有序的方式来存储和组织数据,每个基本数...原创 2020-04-07 15:56:26 · 258 阅读 · 0 评论 -
Java-NIO(1)
Java-NIO(1)概述Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java1.4开始),Java NIO提供了与标准IO不同的IO工作方式。所以Java NIO是一种新式的IO标准,与之前的普通IO的工作方式不同。标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到...原创 2020-04-06 20:20:52 · 183 阅读 · 0 评论 -
Java-I/O学习(7)
Java-I/O学习(6)Reader在Java API中,Java Reader类(java.io.Reader)是所有Reader的基类。Reader和InputStream不同的地方在于它是基于字符流的而不是字节流。换句话说,Reader是用来读取文本的数据的,而InputStream是用来读取原始的字节的。构造函数//Creates a new character-stream ...原创 2020-04-05 10:00:00 · 234 阅读 · 0 评论 -
Java-I/O学习(6)
Java-I/O学习(6)DataInputStreamDataInputStream可以让你从InputStream读取Java基本类型来代替原始的字节。用DataInputStream来包装InputStream,你就可以从DataInputStream直接以Java基本类型来读取数据。这就是为什么叫做DataInputStream如果你需要读取的数据是由大于一个字节的java基础类型构...原创 2020-04-04 20:03:39 · 203 阅读 · 0 评论 -
Java-I/O学习(5)
Java-I/O学习(5)ByteArrayInputStreamByteArrayInputStream类可以让你从一个字节数组来读取流创建//Creates a ByteArrayInputStream so that it uses buf as its buffer array. The buffer array is not copied. The initial value ...原创 2020-04-04 10:01:50 · 229 阅读 · 0 评论 -
Java-I/O学习(4)
Java-I/O学习(4)FileJava IO 的File类可以帮助你访问底层的文件系统,使用File类你可以:查看文件或目录是否存在如果目录不存在,可以创建读取文件的长度删除或移动文件删除文件查看路径指向的事文件还是目录读取目录下的文件列表创建// Creates a new File instance by converting th...原创 2020-04-03 17:36:44 · 214 阅读 · 0 评论 -
Java-I/O学习(3)
Java-I/O学习(3)RandomAccessFile构造函数构造方法具体描述RandomAccessFile(File file, String mode)Creates a random access file stream to read from, and optionally to write to, the file specified by the ...原创 2020-04-03 09:35:37 · 211 阅读 · 0 评论 -
Java-I/O学习(2)
Java-I/O学习(2)InputStreamInputStream是Java IO中所有输入流的基类方法列表:读取操作:返回类型方法具体描述abstract intread()Reads the next byte of data from the input stream.intread(byte[] b)Reads some number o...原创 2020-04-02 09:14:33 · 230 阅读 · 0 评论 -
Java之String
Java之String开篇下面这段代码的输出: String str1= "abc"; String str2= new String("abc"); String str3= str2.intern(); System.out.println(str1==str2); System.out.println(...原创 2020-04-01 11:24:13 · 1260 阅读 · 0 评论 -
Java-I/O学习(1)
Java-I/O学习(1)Java IO是java中的相关API,主要目的为读数据与写数据(input 和 output)。大部分的应用都需要处理一些输入数据,并且根据输入数据生成一些输出数据,比如说从文件或网络读取数据,然后写回文件或通过网络响应数据。Java的IO包本身的主要关注点在于,从一个地方读取原始数据和向目的地写入数据。最典型的数据来源和目的地主要有:文件(File)管...原创 2020-03-29 14:40:54 · 277 阅读 · 0 评论 -
Java反射API
Java反射APIJava反射机制提供的功能获取一个类的所有成员变量及方法(含构造方法(有/无 参数))创建一个类的对象:1、获取一个对象具有的成员变量及赋值2、调用一个对象的方法3、判断一个对象所属的类java.lang.Class 类java.lang.Class类是反射机制的基础Class存放着对应类型对象的运行时信息在Java程序运行时,Java虚拟机为...原创 2020-03-24 09:30:52 · 171 阅读 · 0 评论 -
Java反射理解
Java反射理解Java类型信息RTTI(运行时类型识别)源于《Thinking in Java》一书,其作用是在运行时识别一个对象的类型和类的信息。这里分两种:编译期的:也叫传统的”RRTI”,它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须已定义好),另外一种是运行期的:利用反射机制它允许我们在运行时发现和...原创 2020-03-21 10:12:03 · 179 阅读 · 0 评论 -
深入理解JVM第三章笔记
深入理解JVM第三章笔记背景垃圾收集需要考虑的三件事:哪些内存需要回收什么时候回收如何回收如何判断对象的存活在垃圾收集器对对象进行回收前,第一件事就是判断哪些对象是“存活”的,哪些是“死去”的。引用计数法原理:给对象添加一个引用计数器,每当有一个方法引用它,计数器值+1;引用失效,计数器值-1;任何时候计数器为0的对象就是不能再被使用的了。虽然引用计数法实现...原创 2020-03-13 15:40:49 · 187 阅读 · 0 评论 -
Java-8-Optional类
Java-8-Optional类java8新特性之Optional类空指针异常是一个运行时异常,对于这一类异常,如果没有明确的处理策略,那么最佳实践在于让程序早点挂掉,但是很多场景下,不是开发人员没有具体的处理策略,而是根本没有意识到空指针异常的存在。当异常真的发生的时候,处理策略也很简单,在存在异常的地方添加一个if语句判定即可,但是这样的应对策略会让我们的程序出现越来越多的null判定,我...原创 2020-02-06 11:07:05 · 252 阅读 · 0 评论 -
Java-8-IntStream接口
Java-8-IntStream接口interface IntStream extends BaseStream<Integer, IntStream>下面这段代码计算菜单的热量:int calories = menu.stream().map(Dish::getCalories).reduce(0, Integer::sum);这段代码有一个问题,它有一个暗含的...原创 2020-02-06 11:05:11 · 587 阅读 · 0 评论 -
Java-8-Collectors类
Java-8-Collectors类final class Collectors思维导图:Stream 的核心在于Collectors,即对处理后的数据进行收集。Collectors 提供了非常多且强大的API,可以将最终的数据收集成List、Set、Map,甚至是更复杂的结构(这三者的嵌套组合)。toList源码:public static <T> Colle...原创 2020-02-05 10:52:37 · 518 阅读 · 0 评论 -
Java-8-Stream接口
Java-8-Stream接口interface Stream思维导图:生成 StreamStream.of静态方法(源码): public static<T> Stream<T> of(T t) { return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t)...原创 2020-02-03 16:53:31 · 244 阅读 · 0 评论 -
Java-8-Function
Java-8-Functioninterface Function<T, R>源码:@FunctionalInterfacepublic interface Function<T, R> { R apply(T t); default <V> Function<V, R> compose(Functi...原创 2020-02-02 20:47:02 · 253 阅读 · 0 评论 -
Java-8-UnaryOperator
Java-8-UnaryOperatorUnaryOperator extends Function<T, T>源码:@FunctionalInterfacepublic interface UnaryOperator<T> extends Function<T, T> { static <T> UnaryOperat...原创 2020-02-02 20:46:16 · 308 阅读 · 0 评论 -
Java-8-Supplier
Java-8-Supplierinterface Supplier源码:@FunctionalInterfacepublic interface Supplier<T> { T get();}这个接口,只是为我们提供了一个创建好的对象,这也符合接口的语义的定义,提供者,提供一个对象,直接理解成一个创建对象的工厂,就可以了简单例子public ...原创 2020-02-02 20:45:38 · 346 阅读 · 0 评论 -
Java-8-Consumer
Java-8-Consumerinterface ConsumerConsumer的作用顾名思义,是给定义一个参数,对其进行(消费)处理,处理的方式可以是任意操作源码:public interface Consumer<T> { //对给定的参数T执行定义的操作 void accept(T t); //对给定的参数T执行定义的操作执行再继续...原创 2020-02-02 20:44:38 · 269 阅读 · 0 评论 -
Java-8-Predicate
Java-8-PredicateInterface PredicatePredicate函数式接口的主要作用就是提供一个test方法,接受一个参数返回一个布尔类型接口源码:@FunctionalInterfacepublic interface Predicate<T> { /** * 具体过滤操作 需要被子类实现. * 用来处理参数T是否...原创 2020-02-02 13:03:19 · 361 阅读 · 0 评论 -
Java-8-流(2)
Java-8-流(2)map如果有一个函数可以将一种类型的值转换成另外一种类型, map 操作就可以使用该函数,将一个流中的值转换成一个新的流使用 for 循环将字符串转换为大写 public static void main(String[] args) { List<String> collected = new ArrayList<>();...原创 2020-01-30 21:06:17 · 281 阅读 · 0 评论 -
Java-8-流(1)
Java-8-流(1)外部迭代与内部迭代Java 程序员在使用集合类时,一个通用的模式是在集合上进行迭代,然后处理返回的每一个元素在数字集合里面统计大于100的数有几个 public static void main(String[] args) { List<Integer> data = Number_Data.createData(); ...原创 2020-01-30 14:18:56 · 337 阅读 · 0 评论 -
Java8-Lambda
Java8-LambdaJava 8 的最大变化是引入了 Lambda 表达式——一种紧凑的、传递行为的方式引出Lambda表达式例子:使用匿名内部类将行为和按钮单击进行关联button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { ...原创 2020-01-29 17:21:05 · 262 阅读 · 0 评论 -
Java8笔记(7)
Java8笔记(7)函数式编程假设有这样一个系统,它不修改任何数据。维护这样的一个系统将是一个无以伦比的美梦,因为你不再会收到任何由于某些对象在某些地方修改了某个数据结构而导致的意外报告。如果一个方法既不修改它内嵌类的状态,也不修改其他对象的状态,使用 return 返回所有的计算结果,那么我们称其为纯粹的或者无副作用的更确切地讲,到底哪些因素会造成副作用呢?简而言之,副作用就是函数的效果已...原创 2020-01-28 20:11:17 · 182 阅读 · 0 评论 -
Java8笔记(6)
Java8笔记(6)CompletableFuture:组合式异步编程如果你的意图是实现并发,而非并行,或者你的主要目标是在同一个CPU上执行几个松耦合的任务,充分利用CPU的核,让其足够忙碌,从而最大化程序的吞吐量,那么你其实真正想做的是避免因为等待远程服务的返回,或者对数据库的查询,而阻塞线程的执行,浪费宝贵的计算资源,因为这种等待的时间很可能相当长Future 接口,尤其是它的新版实现...原创 2020-01-28 13:39:27 · 152 阅读 · 0 评论 -
Java8笔记(5)
Java8笔记(5)用 Optional 取代 null如何为缺失的值建模假设你需要处理下面这样的嵌套对象,这是一个拥有汽车及汽车保险的客户public class Person { private Car car; public Car getCar() { return car; }}public class Car { private Insu...原创 2020-01-28 10:10:23 · 222 阅读 · 0 评论 -
Java8笔记(4)
Java8笔记(4)默认方法传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。现实情况是,现存的实体类往往不在接口设计者的控制范围之内,这些实体类为了适配新的接口约定也需要进行修改Java 8为了解决这一问题引入了一种新的...原创 2020-01-27 21:08:24 · 298 阅读 · 0 评论 -
Java8笔记(3)
Java8笔记(3)从匿名类到 Lambda 表达式的转换例子:创建Runnable对象的匿名类public class M1 {// 将实现单一抽象方法的匿名类转换为Lambda//表达式 public static void main(String[] args) { //传统的方式,//使用匿名类 Runnable runnab...原创 2020-01-27 17:19:52 · 242 阅读 · 0 评论 -
Java8笔记(2)
Java8笔记(2)用流收集数据收集器函数式编程相对于指令式编程的一个主要优势:你只需指出希望的结果——“做什么”,而不用操心执行的步骤——“如何做”收集器用作高级归约收集器非常有用,因为用它可以简洁而灵活地定义 collect 用来生成结果集合的标准。更具体地说,对流调用collect 方法将对流中的元素触发一个归约操作(由 Collector 来参数化)一般来说, Collecto...原创 2020-01-27 15:59:02 · 299 阅读 · 0 评论 -
Java8笔记(1)
Java8笔记(1)流流是什么流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。你可以把它们看成遍历数据集的高级迭代器。用到的数据例子:Dish 类public class Dish { private final String name; private final boolean vegetarian...原创 2020-01-26 20:11:38 · 427 阅读 · 0 评论 -
Java多线程(10)
Java多线程(10)非阻塞队列ConcurrentHashMapHashMap在多线程条件下的不安全性:public class MyService { public HashMap map = new HashMap();}public class Thread_1 extends Thread{ private MyService myService;...原创 2020-01-23 21:59:37 · 1102 阅读 · 0 评论 -
Java多线程(9)
Java多线程(9)AQS(2)锁的占有与释放对于AQS来说,线程同步的关键是对状态值state进行操作,根据state是否属于一个线程,操作state的方式分为独占方式和共享方式独占方式下获取和释放资源使用的方法为: public final void acquire(int arg) { if (!tryAcquire(arg) && ...原创 2020-01-22 17:55:00 · 139 阅读 · 0 评论 -
Java多线程(8)
Java多线程(8)AQSAbstractQueuedSynchronized(AQS),类如其名,抽象的队列式的同步器,AQS定义了套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…双向队列Node节点AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素,对列元...原创 2020-01-21 21:57:59 · 861 阅读 · 0 评论 -
Java多线程(7)
Java多线程(7)CountDownLatchCountDownLatch是一个同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成构造函数CountDownLatch(int count)构造一个以给定计数 CountDownLatch CountDownLatch。方法void await()导致当前线程等到锁存器计数到零,除非线程是 interr...原创 2020-01-20 11:56:44 · 177 阅读 · 0 评论 -
Java多线程(6)
Java多线程(6)七种单例设计模式的设计饿汉式public class Singleton {// 实例变量 private byte[] data = new byte[1024];// 定义实例对象的时候直接初始化 private static Singleton instance = new Singleton();// 私有构造函数 ...原创 2020-01-19 17:40:37 · 130 阅读 · 0 评论 -
Java多线程(5)
Java多线程(5)CPU缓存一致性问题因为缓存的出现,极大提高了CPU的吞吐能力,但同时也引入了缓存不一致的问题,比如i++操作在程序运行过程,首先将主存中的数据复制一份存放到CPU Cache中,那么CPU寄存器进行数值计算的时候就直接到Cache中读取和写入,当整个运算过程完毕之后再讲Cache中的数据刷新到主存当中具体如下:读取主内存的i到cpu cache对i进行+1...原创 2020-01-19 16:47:09 · 170 阅读 · 0 评论