java
文章平均质量分 54
chris_Yu186
热情
展开
-
Java 让工具类不可实例化
java 项目中使用的工具类非常多,比如JDK自己的工具java.lang.Math 、java.util.Collections 等都是我们经常用到的工具类。工具类的属性和方法都是静态的,不需要生成实例即可访问,而且JDK也做了很好的处理,由于不希望被初始化,于是设置了构造函数为private的权限,表示除了此类本身外,谁都不能产生一个实例。看一下java.lang.Math的部分代码:原创 2014-04-15 14:04:10 · 7429 阅读 · 3 评论 -
实现变长数组
java 中的我们都知道数组是定长的,一旦经过初始化声明就不可以改变长度,这在实际使用非常不方便,比如要对一个班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都可能会有学生入学、退学或转学),所以需要有一个足够大的数组容纳所有的学生。原创 2014-04-10 11:15:03 · 2401 阅读 · 0 评论 -
Vector集合剖析
Vector的处理方式与ArrayList相似,只是数组长度计算方式不同而已。private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[]原创 2014-04-10 10:54:42 · 671 阅读 · 0 评论 -
JDK的动态代理特性
在JDK1.3以上版本,实现了动态代理模式。通过JDK的动态代理特性,可以为任意java对象创建代理对象,对于具体使用来说,这个特性是通过java Reflection API 来完成的。Proxy原理: Proxy的调用过程中,如果客户(Client)调用Proxy的request方法,会在调用目标对象的request方法的前后调用一系列的处理,而这些一系列的处理相原创 2014-04-11 11:08:32 · 711 阅读 · 0 评论 -
java中基于线程池的任务调度设计
基于Timer类的设计缺陷,java5中引入的ScheduledExecutor线程池设计。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。实例代码:i原创 2014-04-11 10:45:45 · 3624 阅读 · 0 评论 -
深入了解ArrayList
我们都知道ArrayList是一个大小可变的数组,但它在底层使用的是数组存储(也就是elementData变量),而且数组是定长的,要实现动态长度必然要进行长度的扩展。ArrayList 自动扩展长度的方法:public void ensureCapacity(int minCapacity) { //修改计数器 modCount++;原创 2014-04-10 10:40:07 · 874 阅读 · 0 评论 -
Java中的timer类
使用java中的Timer实现任务调度的核心类是Timer和TimerTask。其中Timer负责设定TimerTask的起始与结束时间。使用者只需要创建一个TimerTask的继承类,实现自己的run方法,然后将其丢给Timer去执行。(如下实例:)package com.yc.quartz.example;import java.util.Timer;impor原创 2014-04-11 10:44:15 · 4656 阅读 · 0 评论 -
使用ScheduledExecutor和Calendar实现复杂任务调度
Timer 和 ScheduledExecutor 都仅能提供基于开始时间与重复间隔的任务调度,不能胜任更加复杂的调度需求 。比如,设置每星期一的 16:00:10 执行任务。 该功能使用 Timer 和 ScheduledExecutor 都不能直接实现,但我们可以借助 Calendar 间接实现该功能。import java.util.Calendar;imp原创 2014-04-11 10:46:50 · 1147 阅读 · 0 评论 -
接口与抽象类关系对照
接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)原创 2014-04-10 11:23:37 · 584 阅读 · 0 评论 -
什么是Java垃圾回收器
Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation)、自动回收(Garbage Collect)功能,这两个操作都发生在Java堆上(一段内存块)。某一个时点,一个对象如果有一个以上的引用(Rreference)指向它,那么该对象就为活着的(Live),否则死亡(Dead),视为垃圾,可被原创 2014-04-10 11:18:53 · 733 阅读 · 0 评论 -
基本数据类型数组转换列表显的有些力不从心
基本数据类型数组转换列表缺陷:开发过程中经常会使用Arrays 和 Collections这两个工具类在数组和列表之间转换,非常方便,但是有时候也会出现一些奇怪的问题。原创 2014-04-10 11:08:20 · 2110 阅读 · 0 评论 -
asList产生的List对象不可更改
为什么不支持List的add方法,这真是奇怪了!还得追寻Arrays.asList源码,asList直接new了一个Arraylist对象并返回。在说了ArrayList怎么可能不支持add方法呀!可能为题出在ArrayList类上,这个ArrayList非java.util.ArrayList,而是Arrays工具类的一个内置类,其构造函数如下://这是一个静态私有内部类 priv原创 2014-04-10 10:58:49 · 932 阅读 · 0 评论 -
java 方法参数变长变量的写法
有时逻辑代码,可能会传入相同数据类型在3个或者3个以上的参数,这时我可以借助长参数类型的写法。需要注意的地方是,一定要对每个参数做判空或者null的情况,确保代码的完整性。实例如下:public void getName(String ...names){for (String name : names) {if (StringUtils.isNotBlan原创 2014-04-15 14:05:51 · 1095 阅读 · 0 评论 -
Java 序列化和反序列化
编写序列化类必须实现Serializable 接口 (序列化标志接口)。使用Eclipse 实现一个序列化类似,它会马上给出一个黄色警告:需要增加一个 Serial Version ID。类实现 Serializable 接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布式和异构部署解决。如果没有了序列化,实现我们熟悉的远程调用、对象数据库都不可能存在。以下是简原创 2014-04-15 14:07:46 · 696 阅读 · 0 评论 -
正确使用String 、StringBuffer 、StringBuiler
三种字符串分别为:String 、 StringBuffer 、StringBuilder 。它们是CharSequence接口的实现类。String类是不可改变的量,也就是创建后就不能再修改了。StringBuffer 和 StringBuilder 都是一个可变字符序列,它们与 String一样,在内存中保存的都是一个有序的字符序列(char类型的数组),不同点是St原创 2014-04-15 14:10:31 · 1792 阅读 · 0 评论 -
StringBuffer 和 StringBuilder 区别
StringBuffer 和 StringBuilder 基本相同,都是可变字符序列,不同点是:StringBuffer是线程安全的,StringBuilder是线程不安全的,翻翻两者的源代码,就会发现在StringBuffer的方法前都有一个synchronized 关键字,这也是StringBuffer 在性能上远低于StringBuilder的原因。原创 2014-04-15 14:12:22 · 533 阅读 · 0 评论 -
Java 枚举项数量限定为64个以内
java 提供了两个枚举集合:EnumSet和EnumMap,这两个集合的使用都比较简单,EnumSet表示其元素必须是某一枚举的枚举项,EnumMap表示Key值必须是某一枚举的枚举项,由于枚举类的实例数量固定并且有限,相对来说EnumSet和EnumMap的效率会比其他Set和Map要高。为什么要限定在64个枚举项以内?虽然EnumSet很好用,但是它有一个隐藏的特点,看源代码原创 2014-04-15 14:17:34 · 3241 阅读 · 0 评论 -
Java泛型(Generic)
优点: Java泛型(Generic)——泛型可以减少强制类型的转换,可以规范集合的元素类型,还可以提高代码的安全性和可读性。Java的泛型是类型擦除的。java泛型(Generic)的引入加强了参数类型的安全性,减少了内心的转换,它与C++中的模版(Templates)比较相似,但是有一点不同的是:java的泛型在编译期有效,在运行期被删除,也就是说所有的泛原创 2014-04-15 14:20:50 · 627 阅读 · 0 评论 -
提升java性能的基本方法
不要在循环条件中计算如果在循环(如for循环、while循环)条件中计算,则没循环一边就会计算一次,这会降低系统效率。 int i=0,count=10; //每次循环都要计算count*2 while (i //do something } 应该替换为: //只计算一次 int total=count*2; while原创 2014-04-17 10:04:13 · 776 阅读 · 0 评论 -
JVM监控工具
VisualVM是一个集成多个JDK命令行工具的可视化工具。VisualVM基于NetBeans平台开发,它具备了插件扩展功能的特性,通过插件的扩展,可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等。VisualVM在JDK/bin目录下。原创 2014-04-17 10:11:44 · 546 阅读 · 0 评论 -
java中的标志性接口
在java 中,RandomAccess和Cloneable 、Serializable一样,都是标志性接口,不需要任何实现,只是又来表明其实现类具体有某种特质的,实现了Cloneable表明可以拷贝,实现Serializable 接口表明被序列化了,实现RandomAccess接口则表明这个类可以随机存取。原创 2014-04-17 10:01:10 · 4088 阅读 · 0 评论 -
instanceof用法
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。result = object instanceof class参数:Result:布尔类型。Object:必选项。任意对象表达式。Class:必选项。任意已定义的对象类。原创 2015-01-28 10:35:56 · 842 阅读 · 0 评论