Java
文章平均质量分 73
_StriveG
要么牛B,要么淘汰。
展开
-
Java常识之-注解
1. 什么是注解从字面上来看,注解就是注释、解释,实际上并不是这么简单的。他可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时的检查。百度百科2. 注解的作用是什么2.1. 编写文档通过代码里的表示的元数据生成文档【生成文本doc文档】,用法如下/** * @param a * @param b * @return */ public int原创 2016-03-10 22:22:46 · 996 阅读 · 0 评论 -
Java并发基础(一)-线程基础
只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的。原创 2016-10-05 12:30:13 · 1049 阅读 · 0 评论 -
走进设计模式(一)-创建型模式
设计模式很抽象,结合代码才比较清楚。1. 前言设计模式无处不在,我们也需要简单了解下设计模式。设计模式中,创建型模式有以下几种。工厂方法抽象工厂单例模式建造者模式原型模式2. 工厂方法 用工厂方法,代替new操作AbsFactory 是一个抽象类Factory 是工厂类,实现了抽象类的方法QCar、Q2Car 是具体的对象Factory代码如下我们传入Class,通过反射生成原创 2016-10-18 23:13:46 · 932 阅读 · 0 评论 -
Java并发基础(二)-线程池基础
1. 前言从Java 1.5 开始,并发包里面提供了Executors类,这个类提供了几种线程池的实现。下面对ExecutorService以及几种线程池进行说明。2.ExecutorServiceExecutorService 接口继承自 Executor 接口,它提供了更丰富的实现多线程的方法。ExecutorService的生命周期有三种状态:运行 创建之后便进入运行状态关闭 当调用shu原创 2016-10-05 19:50:02 · 1009 阅读 · 0 评论 -
Java并发基础(三)-线程安全
1. 什么是线程安全 如果一个对象可以安全的被多个线程同时使用,那么它就是线程安全的 当多个线程访问一个对象的时候,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。2. Java中的线程安全根据线程安全的安全程度由强至弱来排序,可以分为5类:不可变绝对线程安全相对原创 2016-10-05 21:58:46 · 862 阅读 · 0 评论 -
Java并发基础(四)-volatile和synchronized
0. 内存可见性Java中,所有的变量都是存在主存中,这对所有的线程都是共享的,而且每个线程都有自己的工作内存。当线程与其他线程共享一个变量时,便会把主内存的变量复制到线程内存中去。当发生对变量的修改时,会同步到主内存,主内存再同步到其他线程内存中去。可见性,指的是线程之间的可见性,一个线程的修改状态对另一个线程也是可见的。1. volatile volatile 修饰的成员变量在每次被线程访问原创 2016-10-06 11:08:50 · 483 阅读 · 0 评论 -
Java并发基础(五)-CountDownLatch、CyclocBarrier、Phaser的使用
1. CountDownLatch 一个同步工具,允许一个或多个线程去等待其他线程中执行的一系列操作完成。什么意思呢?就是说,允许这个线程阻塞,直到,其他线程的所有操作都完成之后,在继续执行。举个例子。 public static void main(String[] args) throws InterruptedException { final CountDownL原创 2016-10-07 14:19:37 · 1095 阅读 · 3 评论 -
Java并发基础(六)-Exchanger和Semaphore
1. Exchanger Exchanger提供了 一个同步点 , 在这个同步点,两个线程可以交换数据,每个线程通过exchange()方法的入口提供数据给另外的线程,并接收其它线程提供的数据,并返回。看个简单的例子: public static void main(String[] args){ final Exchanger exchanger = new Excha原创 2016-10-07 15:28:14 · 976 阅读 · 0 评论 -
Java并发基础(七)-原子类和并发集合类
灌水文1. 原子类 java.util.concurrent.atomic包下面提供了许多原子类,这些类是通过CAS实现的。关于CAS,大家可以google,详细学习下。图中Atomic开头的是 jdk1.5开始提供的原子类。而其他则是在jdk1.8中新增加的。Atomic开头的类中,大多都用了Unsafe类。这个类提供了硬件级别的原子操作。1.8中增加的都是Striped64的子类,St原创 2016-10-07 16:20:49 · 1537 阅读 · 0 评论 -
Java并发基础(八)-locks包
1. 前言Java锁的种类 java中的锁种类是真的多。而locks包下也有一些。包结构如下: AbstractOwnableSynchronizer 一个线程拥有的同步器,这个类提供了创建锁和相关同步器的基础AbstractQueuedLongSynchronizer 所有的同步状态都是用long变量来维护的,而不是int,在需要64位的属性来表示状态的时候会很有用AbstractQueu原创 2016-10-07 23:07:26 · 1689 阅读 · 0 评论 -
走进设计模式(二)-结构型模式
1.前言结构型模式有以下几种。适配器模式装饰模式代理模式外观模式桥接模式组合模式享元模式下面一一学习。2. 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。结构如下:Target 目标角色Adaptee 需要适配的接口Adapter 适配器举个例子,我们手机充电器接口 就充当这这一角色。原创 2016-10-20 21:39:51 · 592 阅读 · 0 评论 -
深入理解java虚拟机笔记(一)-java内存区域与内存溢出
1. 前言这是深入理解java虚拟机一书的笔记,来自第二章。因为这本书讲的比较深奥,这是第二次看,需要记录一下笔记。2. 运行时数据区域java虚拟机所管理的内存分为以下几个区域。ps:图片来自网络2.1 程序计数器程序计数器是一块较小的内存空间,他可以看做是当前线程所执行字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选去下一条要执行的字节码指令,分之、循环、跳转、异常处理、线程原创 2016-11-17 22:15:45 · 2412 阅读 · 1 评论 -
深入理解java虚拟机笔记(三)-类加载机制
图片来自网络。 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。1. 类加载的时机类从被虚拟机加载到内存,到卸载出内存为止,他的整个生命周期为:加载、验证、准备、解析、初始化、使用、卸载七个过程,其中验证、准备、解析统称为连接。 2. 加载加载是类加载过程的第一个阶段,在这个阶段,虚拟机原创 2016-11-22 22:42:08 · 762 阅读 · 0 评论 -
了解EventBus 3.0 (一)-订阅流程
虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。1. 前言EventBus是平常开发中很常用的框架,用了简直爱不释手。在这里,以Eventbus3.0 为例,来了解一下。首先了解点简单的用法。gradle文件中引入compile 'org.greenrobot:eventbus:3.0.0'注册与解注//注册EventBus.g原创 2016-10-15 18:13:13 · 2156 阅读 · 0 评论 -
走进设计模式(三)-行为型模式(上)
行为型模式:策略模式模板方法模式观察者模式迭代器模式责任链模式1. 策略模式 定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的客户而独立变化。Context 用来操作策略的上下文环境Stragety 策略的抽象ConcreteStragetyA、B 具体的策略实现我们先定义一个接口Stragetypublic interface原创 2016-10-23 18:56:21 · 623 阅读 · 0 评论 -
Java基础之-代理
0.代理代理是基本的设计模式之一,是为了提供额外或者不同的操作,而插入的用来代替“实际”对象的操作,代理通常充斥着中间人的角色。 java中的代码分为静态代理和动态代理。1.静态代理代理类在程序运行之前就存在叫静态代理,我们来举个例子。 生命一个接口action。public interface Action { void work(); void sleep();}实现该接口原创 2016-08-03 15:16:50 · 1031 阅读 · 0 评论 -
Java基础之-容器类概述
0.容器类Java中,按照保存对象的不同,分为Collection和Map两种。其中Collection是一个独立元素的序列,又按照一定的规则,分为一下三类:List 按照插入的顺序保存对象Set 不能有重复元素Queue 按照队列规则来确定对象产生的序列。而Map,是一组成对的键值对 对象。1.添加元素在Java.util包中的Arrays和Collections有一些方法,可以在一个Co原创 2016-08-15 20:58:29 · 1223 阅读 · 0 评论 -
Java基础-理解散列与散列码
1.从HashMap说起我们知道Map以键值对的形式来存储数据。有一点值得说明的是,如果要使用我们自己的类作为键,我们必须同时重写hashCode() 和 equals()两个方法。HashMap使用equals方法来判断当前的键是否与表中的键相同。equals()方法需要满足以下5个条件自反性 x.equals(x) 一定返回true对称性 x.equals(y)返回true,则y.equa原创 2016-08-16 23:28:48 · 13152 阅读 · 3 评论 -
Java基础之-IO中的File类
0.File类File类表示一个文件或者一个文件夹。所以,下文中说道的文件,请自行转换。1.相关方法创建File对象的方法。File(File parent, String child)File(String pathname)File(String child, File parent)File(String pathname, int prefixLength)File(String原创 2016-08-05 20:44:18 · 958 阅读 · 0 评论 -
Java基础之-IO中的字节流
下文中所出现的代码可能不规范,譬如文件检查,读者自行体会用法就好。0.什么是字节流简单来说就是面向字节的IO流,也就是提供的read或者write方法,是对byte或者byte[] 操作的。在Java中,有这么几类。InputStream 类 功能 构造器的参数 ByteArrayInputStream 将内存中的缓冲区当做InputStream使用 byte[] Stri原创 2016-08-06 13:29:17 · 1166 阅读 · 0 评论 -
Java基础-ArrayList源码浅析
以Java8为版本分析1.认识ArrayList的关键变量在ArrayList中,关键变量有两个。//存储对象的数组transient Object[] elementData;//数组长度private int size;之所以用transient关键词修饰,就是为了防止其被序列化。当然,还有下面的一些变量//默认容量private static final int DEFAULT_C原创 2016-08-19 22:55:45 · 1437 阅读 · 2 评论 -
Java基础之-NIO
在本篇博客中,笔者可能会因为代码长度的关系,不去做关闭资源等操作,读者要自己注意0.前言NIO是java1.4新引入的Java I/O类库,其目的在与提高速度,尤其是在文件IO与网络IO当中。NIO与IO的不同之处就在于NIO是面向缓冲区的,IO是面向流的。NIO是java中比较难懂的部分,虽然目前我在Android当中并没有使用过(经历浅),但是大名鼎鼎的OkHttp可以用NIO来进行读写的,因此原创 2016-08-08 23:37:05 · 4948 阅读 · 6 评论 -
Java基础-LinkedList源码浅析
0.LinkedListLinkedList即实现了List接口,也实现了Deque接口,其底层实现为双向链表。链表的特点就是在中间插入数据快,而查询数据慢。1.LinkedList中的Node private static class Node<E> { E item; Node<E> next; Node<E> prev; No原创 2016-08-20 18:34:45 · 1237 阅读 · 2 评论 -
Android基础-Android中的HashMap浅析
以下源码基于Java 1.80.HashMap中的关键变量MINIMUN_CAPACITY = 4 (最小容量)MAXIMUN_CAPACITY = 1 << 30 ; (最大容量)private static final Entry[] EMPTY_TABLE= new HashMapEntry[MINIMUM_CAPACITY >>> 1]; 这里的这个就是hash表,是一种数组链表结构(原创 2016-08-22 00:00:23 · 6457 阅读 · 0 评论 -
Java基础之-压缩与解压
0.Java中的压缩与解压在Java的原生API里,只提供了ZIP和GZIP的压缩与解压。在本文中,除了用原生的API进行压缩与解压操作之外。小弟还将介绍一种比较酷炫的方法。通过Runtime执行命令来做。1.Gzip压缩与解压gzip压缩文件的后缀为.gz,gzip除了是一种压缩文件之外,还常常被用在网络传输中进行数据压缩。在Java中,GZIP针对的是单文件的压缩与解压。 如果想实现多文件压原创 2016-08-11 00:19:16 · 3979 阅读 · 0 评论 -
Java基础之-反射
0.什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。1.获取Class对象反射的第一步,就是去获取Class对象,而我们获取Class对象有三种方法,下面一一说明。1.1方法一Class<?> clz = User.clas原创 2016-08-02 22:06:33 · 943 阅读 · 0 评论 -
Java并发基础(九)-Fork/Join框架
1. 什么是Fork/Join框架Java 1.7 中提供了Fork/Join框架,实现了work-stealing算法(工作窃取算法),什么意思呢?就是说,我可以把当前任务分割成多个小任务,让空闲的线程也进行工作,是不是很赞,这样,就能最大限度的利用资源,从而提升效率。哈,这里就补全线程池基础那篇文章了,java 1.8 提供的newWorkStealingPool,就是用这个实现的。2. 包括哪原创 2016-10-08 22:42:17 · 1298 阅读 · 0 评论 -
深入理解java虚拟机笔记(二)-垃圾回收
ps:文中的图片都来自网络。部分图片来源1. 前言作为一种高级语言,比起c和c++来,很进步的一点就是垃圾回收机制。这省去来了我们很多的工作,不过,我们仍然需要了解垃圾回收,这对我们的成长很有帮助。2. 引用计数法引用计数法在很多高级语言都有,如python,java也不例外。对象内部维护有一个被其他对象引用的引用计数,当这个引用计数为0的时候,表示对象可以被回收。引用计数法存在一个问题,就是循环引原创 2016-11-19 19:20:27 · 1853 阅读 · 3 评论