Java基础
文章平均质量分 55
dmfrm
这个作者很懒,什么都没留下…
展开
-
深入分析Volatile的实现原理
转载地址:http://ifeve.com/volatile/引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上I...转载 2018-05-24 22:10:47 · 196 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 使用方法
博客链接:http://blog.csdn.net/defonds/article/details/44021605/转载 2016-09-28 21:31:23 · 813 阅读 · 0 评论 -
java Files类和Paths类的用法
Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.file.Files;import java.nio.file.Path;i转载 2016-09-28 21:20:22 · 49705 阅读 · 1 评论 -
Java文件IO操作应该抛弃File拥抱Paths和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.file.Files;import java.nio.file.Path;i转载 2016-09-27 23:10:16 · 3311 阅读 · 0 评论 -
effective java(一)遇到多个构造器参数 时要考虑用构建器
当一个类的变量比较多,构造函数也比较多,用重载构造函数的方法,会导致有客户端代码比较难维护,用这种Builder构造器来实现,扩展性好,便于维护。/** * Created by wzj on 2016/9/11. */public class BuilderMode{ private int id; private String name; private S原创 2016-09-11 22:28:17 · 462 阅读 · 0 评论 -
解压Zip文件出现IllegalArgumentException错误
(1)在用ZipFile解压zip文件的时候出现如下错误:(2)出现原因:是由于zip包里面有中文名称的文件。(3)解决办法在new ZipFile的时候,指定GBK编码方式。File zipFile = new File("d:/资料.zip"); ZipFile zip = new ZipFile(zipFile, Charset.for原创 2016-09-09 22:06:15 · 1344 阅读 · 0 评论 -
Java解压zip文件
(1)代码实现import java.io.*;import java.nio.charset.Charset;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;/** * Created by wzj on 2016/9/9. */public cl原创 2016-09-09 21:59:46 · 1041 阅读 · 0 评论 -
java synchronized详解
记下来,很重要。Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问ob转载 2016-07-10 14:30:00 · 327 阅读 · 0 评论 -
java定时任务的三种方法
在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,我会给大家介绍3种不同的实现方法:普通thread实现TimerTask实现ScheduledExecutorService实现普通thread这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达转载 2016-09-28 21:35:30 · 2506 阅读 · 0 评论 -
Guava Cache使用
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资转载 2016-09-28 21:49:47 · 537 阅读 · 0 评论 -
Java快速失败(fail-fast)和安全失败(fail-safe)区别
一、快速失败 在使用迭代器对集合对象进行遍历的时候,如果A线程对集合进行遍历,正好B线程对集合进行修改(增加、删除、修改)则A线程会抛出ConcurrentModificationException异常。原理是: 迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashN...原创 2018-04-15 22:27:54 · 8253 阅读 · 6 评论 -
阿里巴巴开源框架JarsLink介绍
JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。需求背景应用拆分的多或少都有问题。多则维护成本高,每次发布一堆应用。少则拆分成本高,无用功能很难下线。故障不隔离。当一个系统由多人同时参与开发时,修改A功能,可能会影响B功能,引发故障。多分支开发引发冲突。多分支开发完之后合并会产生冲突。牵一发动全身。...转载 2018-03-22 21:58:26 · 756 阅读 · 0 评论 -
Java创建对象的4种方式
使用new关键字通过new关键字直接在堆内存上创建对象,这样很方便的调用对象的有参和无参的构造函数.Student stu1 = new Student("lihua");Class反射调用使用Java中反射特性,来进行对象的创建。使用Class类的newInstance方法可以调用无参的构造器来创建对象,如果是有参构造器,则需要使用Class的forName方法和Constructor来进行对象原创 2018-01-01 18:33:38 · 13249 阅读 · 1 评论 -
Zip4J使用
使用Java的ZipOutputStream压缩和解压缩文件,代码写起来太繁琐了,从网上找到Zip4J可以很方便的操作zip压缩包,同时可以给压缩包设置解压密码,使用起来很方便。我使用gradle管理工程,在build.gradle文件添加如下依赖:// https://mvnrepository.com/artifact/net.lingala.zip4j/zip4jcompile group:原创 2018-01-01 18:32:28 · 13276 阅读 · 2 评论 -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
这次说一下 JUC 中的同步器三个主要的成员:CountDownLatch、CyclicBarrier 和 Semaphore(不知道有没有初学者觉得这三个的名字不太好记)。这三个是 JUC 中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。(下面的代码出自 JDK 文档)CountDownLatch直译过来就是倒计数(CountDown)门闩(Latch)。倒计数转载 2017-08-23 20:53:22 · 321 阅读 · 0 评论 -
获取Java虚拟机正在运行所有线程的堆栈信息
在Java.lang.Thread中提供了getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象。下面写了个Demoimport java.util.Map;/** * Created by wzj on 2017/7/8. */public class MemoryMonitor{ public static void main(原创 2017-07-09 00:03:39 · 4788 阅读 · 0 评论 -
设计模式--监听者模式
介绍一下设计模式中的监听者模式,这个模式在图形界面中用的是比较多的,比如按钮的点击事件,控件的双击事件等等。模拟一个hit(击打事件)(1)代码目录结构如下(2)hit事件,HitEvent.javapackage com.wzj.design.event;import java.util.EventObject;/** * Created b原创 2016-11-20 22:22:50 · 1077 阅读 · 0 评论 -
java获取包下面的自定义注解
(1)该工程的目录结构如下(2)annotation包下面自定义了两个注解。Controller.javapackage com.huawi.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.a原创 2016-10-05 17:28:24 · 4856 阅读 · 0 评论 -
Java finalize方法使用
《JAVA编程思想》:Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它转载 2016-07-10 10:33:53 · 1981 阅读 · 0 评论 -
Java 按行读取文件
FileInputStream 是以流的方式读取文件的。 java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时原创 2016-05-22 21:20:15 · 77460 阅读 · 2 评论 -
java的collection类使用
collection中的常用方法:增加:1:add() 将指定对象存储到容器中 add 方法的参数类型是Object 便于接收任意对象2:addAll() 将指定集合中的元素添加到调用该方法和集合中删除:3:remove() 将指定的对象从集合中删除4:removeAll() 将指定集合中的元素删除修改5:clear原创 2016-03-01 21:59:27 · 4119 阅读 · 0 评论 -
Java自带数组排序
转载地址:http://www.cnblogs.com/xudong-bupt/p/3168618.html排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。 Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法转载 2016-02-12 22:12:12 · 9088 阅读 · 0 评论 -
JAVA的数组复制
转载地址:http://greemranqq.iteye.com/blog/1750028先看一道题:Java代码 public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5 }; int[] b = new int[10]; for转载 2016-02-12 22:02:48 · 435 阅读 · 0 评论 -
Java中@Override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1、可以当注释用,方便阅读;2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。 举例:在重写父类的onCreate时,在方转载 2016-03-01 20:34:28 · 457 阅读 · 0 评论 -
Java的匿名对象
匿名对象要注意的事项: 1. 我们一般不会给匿名对象赋予属性值,因为永远无法获取到。 2. 两个匿名对象永远都不可能是同一个对象。匿名对象好处:简化书写。匿名对象的应用场景: 1. 如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象。 2. 可以作为实参调用一个函数。 class Stu{原创 2016-01-05 21:07:54 · 6226 阅读 · 0 评论 -
JAVA单例模式
/*单例模式*/class single{ private static single s = null; public static single getInstance(){ if(s == null) { s = new single(); } return s; }}原创 2016-02-22 11:06:01 · 444 阅读 · 0 评论 -
浅析Java中的final关键字
转载地址:http://www.cnblogs.com/dolphin0520/p/3736238.html一.final关键字的基本用法 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰一个类时,表明这个类不能被继承。也转载 2016-02-22 14:19:21 · 414 阅读 · 0 评论 -
Java中Properties类的操作
知识学而不用,就等于没用,到真正用到的时候还得重新再学。最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加一些脚本语言Python,Perl之类的,不得已,又得重新拾起。本文通过看《Java编程思想》和一些网友的博客总结而来,只为简单介绍Properties类的相关操作。 一、Java P转载 2016-05-21 23:51:04 · 367 阅读 · 0 评论 -
Gson的使用介绍
哇,原来我已经潜水2年多了,还是需要养成习惯写写东西啊。最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库。发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson。经过比较,gson和其他现有java json类库最大的不同时g转载 2016-05-15 22:07:57 · 456 阅读 · 0 评论 -
JAVA的Date类与Calendar类
转载地址:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616347.htmlDate类在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前转载 2016-02-29 22:15:53 · 400 阅读 · 0 评论 -
将java源码打成jar包
转载地址:http://blog.csdn.net/wangpeng047/article/details/7176024方法一:通过jar命令jar命令的用法:下面是jar命令的帮助说明:用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项包括:转载 2016-02-29 19:58:41 · 596 阅读 · 0 评论 -
String,StringBuffer与StringBuilder的区别??
转载地址:http://blog.csdn.net/rmn190/article/details/1492013String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次转载 2016-02-28 16:33:02 · 357 阅读 · 0 评论 -
Java内部类详解
转载地址:http://www.cnblogs.com/dolphin0520/p/3811445.html一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。 1.成员内部类 成员内转载 2016-02-22 23:14:02 · 571 阅读 · 0 评论 -
java 四舍五入保留小数
转载地址:http://www.cnblogs.com/hoojo/p/java_round_format_bigdecimal_decimalformat.html // 方式一:double f = 3.1516;BigDecimal b = new BigDecimal(f);double f1 = b.setScale(2, BigDecimal.ROUND_HAL转载 2016-02-22 19:07:50 · 502 阅读 · 0 评论 -
Windows8.1配置Java环境变量
首先打开环境变量配置窗口,步骤如下: 这台电脑->高级系统设置->环境变量->系统变量然后执行如下步骤:(1)新建JAVA_HOME环境变量,值为:C:\Program Files (x86)\Java\jdk1.8.0_66(2)编辑PATH环境变量,在末尾添加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(3)新建CLASSPA原创 2016-01-02 22:05:01 · 1116 阅读 · 0 评论