Java
sifanchao
这个作者很懒,什么都没留下…
展开
-
Java初识
Java简介Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java分为三个体系:JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)JavaEE (J2EE)(Java 2 Platfor...原创 2018-10-19 14:56:32 · 147 阅读 · 0 评论 -
方法引用
从最初开始,只要是进行引用都是针对于引用类型完成的,也就是只有数组、类、接口具备引用操作。但是JDK1.8 开始追加了方法引用的概念。实际上引用的本质就是别名。所以方法的引用也是别名的使用。而方法引用的类型有四种形式:引用静态方法:类名称::static 方法名称@FunctionalInterfaceinterface IUtil<R,N> { R switchPara...原创 2018-11-07 21:25:56 · 569 阅读 · 0 评论 -
多线程的实现
继承Thread类实现多线程java.lang.Thread是一个线程操作的核心类。新建一个线程简单的方法就是直接继承Thread类,而后覆写该类中的 run()方法(就相当于主类中的main方法)package www.bit.java;class MyThread extends Thread { private int ticket = 100; @Override...原创 2018-11-12 14:46:23 · 187 阅读 · 0 评论 -
多线程常用操作
线程命名与取得多线程的运行状态是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息往往通过名称来描述。在Thread类中提供有如下的线程名称方法:class MyThread implements Runnable { @Override public void run() {}}public class TestThread { publi...原创 2018-11-14 15:15:57 · 622 阅读 · 0 评论 -
synchronized 同步
同步问题的引出需求:多个线程同时卖票class MyThread implements Runnable { private int ticket = 10; @Override public void run() { while (this.ticket &amp;amp;gt; 0) { try { ...原创 2018-11-14 19:54:13 · 996 阅读 · 0 评论 -
synchronized优化
序言在JDK1.5中,synchronized是性能低效的。因为这是一个重量级操作,它对性能大的影响是阻塞的是实现,挂起 线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性带来了很大的压力。相比之下使用Java 提供的Lock对象,性能更高一些。import java.util.concurrent.locks.Lock;import java.util.concurrent...原创 2018-11-16 18:41:07 · 5386 阅读 · 2 评论 -
读写锁ReentranReadWriteLock
读写锁简介在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字 synchronized或者concurrents包中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并不会影响数据正确性(出现脏读),而如果在这种业务场...原创 2018-11-23 21:17:53 · 822 阅读 · 0 评论 -
Condition的await和signal等待/通知机制
Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如 wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制。同样的, 在 java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...原创 2018-11-24 17:50:17 · 320 阅读 · 0 评论 -
Lock体系
Lock简介锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。在Lock接口出现之前,java程序主要是靠synchronized关键字实现锁功能的,而JDK5之后,并发包中增加了lock接口,它提供了与synchronized一样的锁功能。虽然它失去了像synchronize关键字隐式加锁解锁的便捷性,但是却拥有了锁获取和释放的可操作性,可中断的获取锁以...原创 2018-11-22 13:48:13 · 444 阅读 · 0 评论 -
AQS详解
AQS简介在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义。AQS 则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。AQS的核心也包括了这些方面:同步队列,独占式锁的获取和释放,共享锁的获取和释放以及可中断锁,超时等待锁获取这些特性的实现,而这些实际上则是AQS提供出来的模板方法。同步队列当共享资源被...原创 2018-11-22 16:18:02 · 18897 阅读 · 4 评论 -
ReentrantLock
ReentrantLock介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。java关键字synchronized隐式支持重入性,synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。...原创 2018-11-22 22:03:10 · 143 阅读 · 0 评论 -
线程池
概念Java中的线程池(juc包下)是运用场景多的并发框架,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。使用线程池的有三个优点:降低资源的消耗:通过重复利用已创建的线程降低线程创建和销毁带来来的消耗提高响应速度:当新任务到达时,任务可以不需要等待线程创建就可以立即执行提高线程的可管理性:使用线程池可以统一进行线程分配、调度与监控线程池的实现原理当一个Runnabl...原创 2018-11-24 20:35:23 · 184 阅读 · 0 评论 -
反射
认识发射反射指的是对象的反向处理操作,根据对象倒推类的组成。既然是反向处理,我们先来观察一下"正"的操作。在默认情况下,必须要先导入一个包,而后才能产生类的实例化对象范例:观察正常处理import java.util.Date;public class Test { public static void main(String[] args) throws Exception{...原创 2018-12-05 15:20:46 · 692 阅读 · 0 评论 -
文件拷贝
转换流现在为止已经知道了两种数据流:字节流和字符流。实际上这两种流是可以进行互相转换处理的。OutputStreamWriter:将字节输出流变为字符输出流(Writer对于文字的输出要比OutputStream方 便)InputStreamReader:将字节输入流变为字符输入流(InputStream读取的是字节,不方便中文的处理)要想知道这两个类的实际意义,我们首先来看这两个类的...原创 2018-12-08 14:51:42 · 225 阅读 · 0 评论 -
内存操作流&打印流&输入流(Scanner)
内存操作流定义:除了文件之外,IO操作也可以发生在内存中,发生在内存中的操作流称为内存流。文件流的操作里面一定会产生一个文件数据(不管后这个文件数据是否被保留)。如果现在需求是:需要进行IO处理,但是又不希望产生文件,这种情况下就可以使用内存作为操作终端。内存流也分为两类:字节内存流:ByteArrayInputStream、ByteArrayOutputStream字符内存流:Ch...原创 2018-12-08 18:33:05 · 603 阅读 · 0 评论 -
ClassLoader类加载器
Class类描述的是整个类的信息,在Class类中提供的forName()方法,这个方法根据ClassPath配置的路径进行类的 加载,如果说现在你的类的加载路径可能是网络、文件,这个时候就必须实现类加载器,也就是ClassLoader类的 主要作用。认识ClassLoader首先通过Class类观察如下方法: /** * Returns the class loader f...原创 2018-12-06 15:08:57 · 265 阅读 · 0 评论 -
Java I/O
IO的核心组成就是五个类(File、 OutputStream、InputStream、Reader、Writer) 一个接口(Serializable)File文件操作类在Java.io包之中,File类是唯一一个与文件本身操作(创建、删除、取得信息…)有关,与文件内容无关的的程序类。File类即可以描述真实文件,也可以是个文件夹File类使用File类的两种实例化方式:publ...原创 2018-12-07 16:06:33 · 161 阅读 · 0 评论 -
序列化与反序列化
序列化基本概念定义:将内存中保存的对象变为二进制数据流的形式进行传输或保存在文本中。实现:Java中类若要被序列化输出,该类必须实现Serializable接口。该接口是一个标识接口,表示该类具有序列化的功能。public interface Serializable {}序列化与反序列化操作要想实现序列化与反序列化的对象操作,需要使用io包提供的两个类ObjectOutputStr...原创 2018-12-10 15:31:57 · 186 阅读 · 0 评论 -
Lambda表达式和接口增强
Lambda表达式Lambda是JDK1.8推出的重要新特性。很多开发语言都开始支持函数式编程,其中最具备代表性的就是haskell。函数式编程和面向对象编程可以理解为两大开发阵营。很多人认为面向对象的概念过于完整,结构操作不明确。我们编写一个简单的加法程序为例当我们如果不仅使用x+y方法时,比如说想扩展x+y+10方法时,我们会发现,我们需要像函数重载一样编写多个函数。packag...原创 2018-11-07 20:24:01 · 186 阅读 · 0 评论 -
注解
@Override 准确覆写当子类覆写父类方法时,此注解检查覆写的方法是否正确声明,只有满足覆写方法要求才会编译通过,否则编译报错。class Person { @Override public String toString(){ return "hello world"; }}public class MyEnum { public st...原创 2018-11-07 17:21:36 · 126 阅读 · 0 评论 -
Java基本语法
Java基本语法编写Java程序时,应注意以下几点:大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。源文件名:源文件...原创 2018-10-19 16:49:42 · 126 阅读 · 0 评论 -
Java数据类型
基本数据类型在程序开发之中,整数就用int,描述小数用double。long一般用于描述日期、时间、内存或文件大小(字节)如果要进行编码转换或者进行二进制流的操作,使用byte(-127~128)char一般在描述中文中会用到(基本忽略)整型在Java中,任何一个整型常量都为int型整型常量若要声明为long类型,需要在数字后加上“L”或者“l”在Java中小的数据类型与大...原创 2018-10-19 17:53:32 · 183 阅读 · 0 评论 -
Java运算符
Java 运算符计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符算术运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。表格中的实例假设整数变量A的值为10,变量B的值为20:...原创 2018-10-19 18:35:17 · 100 阅读 · 0 评论 -
代码块
代码码块的定义与使用根据代码出现是位置以及关键字,分为以下四种代码块:普通代码块构造快静态块同步代码块普通代码跨块(定义在方法中的代码块)public class Test{ public static void main(String[] args) { { //直接使用{}定义,普通方法块 ...原创 2018-10-19 22:09:14 · 154 阅读 · 0 评论 -
继承
基本概念可以实现现有类的所有功能并且在无需重新编写原有类代码的情况下继承进行功能上的扩展(可重用)class 父类 {}class 子类 extends 父类 {}判断两个类之间能否使用继承:isaJava中类继承使用extends关键字子类派生类,父类称为超类/基类class Person{ private String name; p...原创 2018-10-20 16:43:14 · 234 阅读 · 0 评论 -
多态
概念指的是类实例的相同方法在不同情形下有不同的表现形式多态机制使得具有不同内部结构的对象可以共享相同的外部接口(利用多态可以得到良好的设计)覆写(重写)定义子类定义了与父类方法名称、参数列表、返回值完全相同的方法 。被覆写的方法不能拥有比父类更为严格的访问控制权限重写规则参数列表必须完全与被重写方法的相同;返回类型必须完全与被重写方法的返回类型相同;访问权限不能比父类中被重...原创 2018-10-20 17:58:47 · 420 阅读 · 0 评论 -
内部类
基本概念在类内部进行其他类结构嵌套操作class Outer{ private String msg = "Hello World" ; // ******************************** class Inner{ //定义一个内部类 public void print(){ //定义一个普通方...原创 2018-10-20 19:36:54 · 245 阅读 · 0 评论 -
抽象类
抽象类的使用与定义定义:抽象类只是在普通类的基础上扩充了一些抽象方法而已抽象方法:指的是只声明而未实现的方法(没有方法体)所有抽象方法要求使用abstract来定义,并且抽象方法所在的类也一定要使用abstract来定义,表示抽象类abstract class Person{ private String name ; // 属性 public ...原创 2018-10-26 16:14:42 · 157 阅读 · 0 评论 -
模板设计模式
模板设计模式—基于抽象类的,核心是封装算法模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现模板(模板方法)模式(Servlet、AQS)在一个方法中定义一个算法的骨架,并将一些具体步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤讲模板设计模式之前,我们用代码来实现咖啡和茶制作的类:class Coffee {...原创 2018-10-26 17:28:46 · 14500 阅读 · 13 评论 -
接口
接口的定义与使用接口优先原则:在一个操作既可以使用抽象类又可以使用接口的时候,优先考虑使用接口接口定义:接口就是一个抽象方法与全局常量的集合(纯粹版本的抽象类(JDK8前))接口使用:interface + 类名接口的命名规范:接口前加 I 来区分接口与类interface IMyinterface { public static final String MSG ...原创 2018-10-26 18:48:14 · 160 阅读 · 0 评论 -
工厂模式
思考如下场景:有一天,刘同学准备去买笔记本,他到商城发现有两款电脑他特别喜欢, 一款是 Macbook Pro, 另一款是 Surface Pro。请同程序实现!简单工厂模式:用于没有产品族并且产品个数较少(Spring-BeanFactory)定义:专门定义一个类(第三方)用来创建其他类实例(解耦,将客户端创建对象的操作解耦到外部第三方类中),被创建的实例通常都具有共同的父类组成:一...原创 2018-10-26 20:56:39 · 292 阅读 · 0 评论 -
代理模式
特点两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作。import java.lang.reflect.Proxy;import java.util.Scanner;import java.util.concurrent.PriorityBlockingQueue;import javax.security.auth.Subject;in...原创 2018-10-26 21:51:31 · 119 阅读 · 0 评论 -
String类
String类的实例化方式直接赋值,在堆上分配空间传统方法,构造方法实例化public class Test { public static void main(String[] args) { // 直接复制,在堆上分配空间 String str = "hello"; // 通过构造方法实例...原创 2018-10-27 19:39:13 · 181 阅读 · 0 评论 -
Object类
Object是java默认提供的类java除了Object类,所有的类都存在继承关系,默认会继承Object父类,所以所有类对象都可以通过Object类进行接收(向上转型)class A {}class B {}public class Test { public static void main(String[] args) throws Exception { ...原创 2018-10-27 20:48:58 · 154 阅读 · 0 评论 -
包装类
定义包装类就是将基本数据类型封装到类中,目的是为了让基本类型也能让Object来接收。class IntDemo { private int intValue; public IntDemo(int intValue) { this.intValue = intValue; } public int intValue() { re...原创 2018-10-27 21:47:31 · 1340 阅读 · 0 评论 -
双向链表设计
interface ILink { /** * 链表增加节点操作 * @param data 节点内容 * @return */ boolean add(Object data); /** * 判断指定内容节点在链表中是否存在 * @param data 要判断的内容 * @return 返回找到的...原创 2018-11-02 20:49:02 · 347 阅读 · 0 评论 -
枚举
如果此时需要定义一个描述颜色基色的多例类。我们通过多例模式实现。多例设计模式特点:构造方法私有化,类内部需要提供若干个实例化对象,后面通过statica方法返回。package www.bit.java;class Color { private String title; public static final int RED_FLAG = 1 ; public ...原创 2018-11-07 16:59:50 · 126 阅读 · 0 评论 -
Java类集
Java类集引出类集实际上就属于动态对象数组,在实际开发之中,数组的使用出现的几率并不高,因为数组本身有一个最大的缺陷:数组长度是固定的。由于此问题的存在,从JDK1.2开始,Java为了解决这种数组长度问题,提供了动态的对象数组实现框架–Java类集框架。Java集合类框架实际上就是java针对于数据结构的一种实现。实际上链表的实现就是参考Java集合类实现的。Collection在Ja...原创 2018-12-11 12:59:04 · 205 阅读 · 0 评论