1.基本概念 IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。 2.IO流的分类 图示:(主要IO流) 3.字节流 (1).字节流基类 1).InputStream InputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。常用方法:// 从输入流中读取数据的下一个字节abstract int read()// 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中int ...
一.运行class文件 执行带main方法的class文件,命令行为: java 注意:CLASS文件名不要带文件后缀.class 例如:java Test如果执行的class文件是带包的,即在类文件中使用了:package <包名> 那应该在包的基路径下执行,命令行为: java <包名>.CLASS文件名 例如:PackageTest.java中,其包名为:com.ee2ee.test,对应的语句为: package com.ee2ee.test; PackageTest.java及编译后的class文件PackageTest.class的存放目录如下: c...
文章目录背景知识基本介绍使用示例总结 背景知识 要理解 CompletableFuture,首先要弄懂什么是 Future。因为后者是前者的扩展。本文并不打算详细的介绍 Future,毕竟不是本文的重点。 Future是java1.5增加的一个接口,提供了一种异步并行计算的能力。比如说主线程需要执行一个复杂耗时的计算任务,我们可以通过future把这个任务放在独立的线程(池)中执行,然后主线程继续处理其他任务,处理完成后再通过Future获取计算结果。 这里...
CMS收集器 CMS收集器(ConcurrentMarkSweep:并发标记清除)是一种以获取最短回收停顿时间为目标的收集器。 适合应用在互联网站或者B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短。 CMS非常适合堆内存大、CPU核数多的服务器端应用,也是G1出现之前大型应用的首选收集器。Concurrent Mark Sweep 并发标记清除,并发收集低停顿,并发指的是与用户线程一起执行 开启该收集器的JVM参数:-XX:+UseConcMark...
Java并发关键字Volatile 详解问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充:缓存一致性协议:MESI ? 由于计算机储存设备(硬盘等)的读写速度和CPU的计算速度有着几个数量级别的差距,为了不让CPU停下来等待读写,在CPU和存储设备之间加了高速缓存,每个CPU都有自己的高速缓存,而且他们共享同一个主内存区域,当他们都要同步到主内存时,如果每个CPU缓存里的数据...
Java枚举枚举类型是什么 JDK5引入了一种新特性,关键字enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这就是枚举类型。 一个枚举的简单例子 enum SeasonEnum {SPRING,SUMMER,FALL,WINTER; } 枚举类的常用方法 Enum 常用方法有以下几种:name():返回enum实例声明时的名字 ordinal();返回一个int值,表示enum 实例在声明的次序 equals();返回布尔值,enum实例判断相等 compareTo...
多态概述多态是继封装、继承之后,面向对象的第三大特性。 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。 Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。多态的定义与格式多态的定义格式:就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名...
我们在生活中用到数字,都是以十进制的方式计数的。稍有计算机常识的人都知道,计算机中是以二进制的方式计数的,另外在计算机中表示颜色经常会用到十六进制的数字,此外在其他一些领域还会用到八进制的数字。那么二进制、八进制、十进制、十六进制的数字,究竟是怎样计数的?它们之间是怎样相互换算的?本文就来详细说说这两个问题。 一、多种进制的计数方法 首先来说我们最熟悉的十进制。十进制计数法有10个原始的数字,分别是0-...
我们在生活中用到数字,都是以十进制的方式计数的。稍有计算机常识的人都知道,计算机中是以二进制的方式计数的,另外在计算机中表示颜色经常会用到十六进制的数字,此外在其他一些领域还会用到八进制的数字。那么二进制、八进制、十进制、十六进制的数字,究竟是怎样计数的?它们之间是怎样相互换算的?本文就来详细说说这两个问题。 一、多种进制的计数方法 首先来说我们最熟悉的十进制。十进制计数法有10个原始的数字,分别是0-...
ThreadPoolExecutor详解 Executor框架最核心的类是ThreadPoolExecutor,它是线程池的实现类,主要由下列4个组件构成。corePool:核心线程池的大小。 maximumPool:最大线程池的大小。 BlockingQueue:用来暂时保存任务的工作队列。 RejectedExecutionHandler:当ThreadPoolExecutor已经关闭或ThreadPoolExecutor已经饱和时(达到了最大线程池大小且工作队列已满),execute()方法将要调用的Handler。通过Executor框架的工具类Execu...
final基础使用 修饰类 当某个类的整体定义为final时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。 注意:final类中的所有方法都隐式为final,因为无法覆盖他们,所以在final类中给任何方法添加final关键字是没有任何意义的。 这里顺道说说final类型的类如何拓展? 比如String是final类型,我们想写个MyString复用所有String中方法,同时增加一个新的toMyString()的方法,应该如何做? 设计模式中...
一、ArrayBlockingQueue概述 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的public class ArrayBlockingQueue<E> extends AbstractQueue<E>implements BlockingQueue<E>, java.io.Serializable {源码分析 主要属性// 使用数组存储元素 final Object[] items;// 取元素的指针 int takeIndex;// 放元素的指针 int putIndex;// 元素数量 int count;// 保证并发访问的锁 final ReentrantLock lock;// 非空...
BufferReader继承Reader,主要有readLine()、read()、read(char cbuf[])、read(char cbuf[], int off, int len)方法,下面我来讲解这几个方法的用法和注意事项。 先在D盘下建立一个test.txt文件(Windows系统),文件内容:Hello Android 2020-01-15 readLine() 该方法就是用来读取一行字符流数据,用法如下:package s1;import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io...
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25class Animal{ public void move(){ System.out.print...
volatile关键字和synchronized一样都能够保证线程的同步。 Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。 volatile被称为轻量级的 synchronize...