java
文章平均质量分 59
Magister_Feng
这个作者很懒,什么都没留下…
展开
-
字符编码笔记:ASCII,Unicode和UTF-8
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位转载 2012-08-17 15:48:07 · 651 阅读 · 0 评论 -
Clone使用方法详解
java“指针” Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能 通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。本文会让你了解什么是影子clone与深度 clone,认识它们的区别、优点及缺点。 看到这个标题,是不是有原创 2012-06-13 14:26:10 · 750 阅读 · 0 评论 -
ClassNotFoundException 和 NoClassDefFoundError 区别
要区分这两个异常,先要了解类装载的显式和隐式两种方式类装入的方式有两种 —— 显式 或 隐式,两者之间有些细微差异。显式 类装入发生在使用以下方法调用装入的类的时候:•cl.loadClass()(cl 是 java.lang.ClassLoader 的实例)•Class.forName()(启动的类装入器是当前类定义的类装入器)当调用其中一个方法的时候,指定的类(以类名为参数原创 2012-04-13 20:14:55 · 10873 阅读 · 4 评论 -
SimpleDateFormat严格限制日期转换setLenient(false)
String text ="1996-2-1";Date d = null; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); df.setLenient(false);//这个的功能是不把1996-13-3 转换为1997-1-3try{ d = df.parse(text); }catch(Exc原创 2012-04-25 09:47:18 · 8191 阅读 · 0 评论 -
Java HashMap 分析之三:放入元素
现在,有了hash code,来考虑如何计算放入数组的位置。hash code值通常会很大,但是数组的大小有限,默认只有16,大的也不能超过2的30次方。所以,用模运算来保证在数组大小范围内是合理的,比如:index = hash code% array size.不过这有点慢,JDK采用了更快的算法。这个更快的算法源于一个数学规律,就是如果size是2的N次方,那么数X对size的模运算结果原创 2012-04-11 13:15:32 · 685 阅读 · 0 评论 -
Java HashMap 分析之二:Hash code
散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法:[java] view plaincopyprint?1. public int hashCode() { 2. int h =原创 2012-04-11 13:14:57 · 581 阅读 · 0 评论 -
Java HashMap 分析之一:基本结构
Java的HashMap非常的常用,本篇研究它的实现算法,最后希望计算出内存占用,性能的量化数据,然后得出什么时候使用HashMap,什么时候不能滥用的结论。HashMap实际上是一个数组,数组里面的每个元素都是一个链表。每个元素在通过put方法放入HashMap中的时候,要按照如下步骤进行:1.根据该元素自身提供的hashcode计算出散列值,该散列值就是数组的下标2.将新元素放入该原创 2012-04-11 13:14:25 · 758 阅读 · 0 评论 -
ConcurrentModificationException异常解决办法
今天在写一个带缓存功能的访问代理程序时出现了java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在,原来在通过Iterator进行遍历的时候,如果直接对HashMap进行操作后,再继续用之前的Iterator进行遍历就会出现这个异常,表示其HashMap已经被修改。源程序代码片段如下:caches原创 2012-02-16 19:46:58 · 602 阅读 · 0 评论 -
char类型能否存放中文
JAVA语言中,byte类型是8位的,char类型是16位的。1byte = 8bits,一个字节等于8位,JAVA中中文字符采用Unicode编码,占两个字节中文字符也是一个个字符构成的,只不过ASCII编码占一个字节,而中文占两个字节,而计算机在判断时,会跟据第一个字节所占范围判断出是ASCII还是中文字符!原创 2012-02-08 14:44:22 · 6068 阅读 · 0 评论 -
用Java实现按字节长度截取字符串的方法
Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示。但目前很多流行的语言,如C#、Java内部采用的都是 Unicode 16(UCS2)编码,在这种编码中所有的字符都是两个字符,因此,如果要截取的字符串是中、英文、数字混合的,就会产生问题,如下面的字符串:String s = "a加b等于c,如果a等1、b等于2,那么c等3"; 上转载 2012-08-17 14:53:08 · 734 阅读 · 0 评论 -
MD5 (Message Digest Algorithm 5 信息—摘要算法5 ) 的一些体会 .
MD5 (Message Digest Algorithm 5 信息—摘要算法5 ) 的一些体会 一、若我们定义一个函数 ,原型为: String MD5 ( Information info) 其中Information 表示任意长度的信息,注意是任意长度的。 实现这个函数的最终要求: 1、对于不同的输入信息,产生的返回值 结果相同 且必须唯一 2. 改算转载 2012-12-06 19:01:08 · 2130 阅读 · 0 评论 -
ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,通过仔细阅读源代码,现在总算理解ConcurrentHashMap实现机制了,其实现之精巧,令人叹服,与大家共享之。 实现原理 锁分离 (Lock Stripping) Concur转载 2013-02-23 13:34:38 · 865 阅读 · 0 评论 -
Java 异常机制
1. 异常机制 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但原创 2012-02-08 14:49:53 · 610 阅读 · 0 评论 -
Java性能优化技巧集锦
可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。 一、通用篇 “通用篇”讨论的问题适合于大多数Java应用。 1.1不用new关键词创建类的实例 用new关键词创建类的实例时,构造函原创 2010-12-28 10:01:00 · 891 阅读 · 0 评论 -
Java传值机制
对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。 对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。 方法体内对参数进行运算,不影响原有变量的值。 方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。 上面总结出来的不过是我们所看到的表面现象。那么,为什么会出现这样的现象呢?这就要说到值传递和引用传递的原创 2010-11-26 09:19:00 · 701 阅读 · 0 评论 -
Java中ThreadLocal的设计与使用
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创转载 2012-07-10 10:42:51 · 5440 阅读 · 0 评论 -
Java生成摘要(MD5 SHA-1)
刚好最近项目中需要用到一点加密的东西,java安全类库提供了一个java.security.MessageDigest类,此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。有现成的当然是最好的,省事省力。 MD5的非常有实际应用性。有网友给出这样的描述,可以参照一下原创 2012-12-06 18:55:48 · 11296 阅读 · 0 评论 -
java -verbose 命令
java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息。1.java -verbose:class在程序运行的时候究竟会有多少类被加载呢,一个简单程序会加载上百个类的!你可以用verbose:class来监视,在命令行输入java -verbose:class XXX (XXX为程序名)你会在控制台看到加载的类的情况。 verbose和verbose转载 2013-02-27 15:17:34 · 1787 阅读 · 0 评论 -
NIO Socket非阻塞模式代码示例
jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。 从最简单的Hello World开始, client多线程请求server端,server接收client的名字,并返原创 2013-02-27 14:40:35 · 1062 阅读 · 0 评论 -
InputStream和Reader的区别
java.io.Reader 和 java.io.InputStream 组成了Java 输入类。Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。Reader和InputStream分别是I/O库提供的两套平行转载 2012-02-08 14:36:53 · 5991 阅读 · 1 评论 -
JDK5新特性汇总
JDK5新特性汇总 1 循环5.01.4for (type variable : array){ body}for (int i = 0; i type variable = array[i]; body}for原创 2012-02-08 14:59:55 · 5157 阅读 · 1 评论 -
诊断应用数据库的性能瓶颈
J2EE的崛起J2EE作为Web应用开发的标准企业计算平台面世,其实力越来越强大,日益普及。J2EE支持遗留应用程序和接口、多种操作系统、分布式和群集式环境,以及高量关键任务应用程序,同时支持安全和管理与监控。通过提供一种开发分布式、可伸缩应用程序的框架和蓝图,J2EE使公司及其开发者能够集中注意力去编写模块化的定制应用程序代码,并且不必担心安全、资源管理和可伸缩性的细节。行业领先的应原创 2012-02-08 11:00:38 · 1069 阅读 · 0 评论 -
探索 Java 同步机制
本文将从两个方面进行阐述:使用 C++ 语言来描述 Monitor Object 设计模式。Java 对于这样一个典型的模式做了很好的语言层面的封装,因此对于 Java 的开发者来说,很多关于该模式本身的东西被屏蔽掉了。本文试图使用 Native C++ 语言,帮助读者从本质上对 Monitor object 设计模式有一个更全面的认识。结合 C++ 版本的 Monitor Object原创 2011-07-13 13:28:38 · 885 阅读 · 1 评论 -
x+=y与x=x+y的区别
<br />在一般情况下,x+=y与x=x+y的作用是等价的。 <br /> 但在有些情况下却并不是这样: 如下代码: short s=3; s+=1;//编译通过 s=s+1;//编译错误 s=s+1编译错误时因为左边s+1的运算结果为int类型,而等号右边变量为short类型。类型不匹配而造成编译错误。 s+=1编译正确是因为“+=”运算符在Java环境中会自动根据接收变量类型进行类型的强制转换。 通过上述示例可以知道:x+=y等价于x=x+y和类型强制转换两个原创 2010-11-26 09:17:00 · 4551 阅读 · 0 评论 -
java获取当前日期是星期几
/** * 获取当前日期是星期几 * * @param dt * @return 当前日期是星期几 */ public static String getWeekOfDate(Date dt) { String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance(); c原创 2010-11-25 10:41:00 · 140463 阅读 · 4 评论 -
java乱码的处理
<br />java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。 char是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中 ByteToCharConverter类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 <br />public static ByteToCharConverter getDefault(); <br /原创 2010-12-28 14:21:00 · 583 阅读 · 0 评论 -
Java this、super的用法
<br />在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非 super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。在一般方法中 最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成原创 2010-12-23 14:33:00 · 529 阅读 · 0 评论 -
详述JAVA IO流
<br />一、流的概念<br /> 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。<br /> 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。<br /> 流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写原创 2010-12-10 15:16:00 · 1047 阅读 · 2 评论 -
ASCII与中文的相互转换
使用JDK中的native2ascii.exe工具1、中文转换为ASCII:命令行,native2ascii 源文件 目标文件例:native2ascii 1.txt 2.txt2、ASCII转换为中文:native2ascii -reverse 源文件 目标文件例:native2ascii -reverses 1.txt 2.txt原创 2011-06-22 14:12:00 · 772 阅读 · 0 评论 -
获取上月第一天和上月最后一天的日期
/** * * @Title: getLastDayOfLastMonth * @Description: 获取上月第一天 * @return String * @throws */ public static String getFirstDay原创 2011-07-06 12:18:02 · 878 阅读 · 0 评论 -
用Java实现多线程服务器程序
摘要:在Java出现之前,编写多线程程序是一件烦琐且伴随许多不安全因素的事情。利用Java,编写安全高效的多线程程序变得简单,而且利用多线程和Java的网络包我们可以方便的实现多线程服务器程序。 Java是伴随Internet的大潮产生的,对网络及多线程具有内在的支持,具有网络时代编程语言的一切特点。从Java的当前应用看,Java主要用于在Internet或局域网上的网络编程,原创 2011-07-13 13:31:18 · 618 阅读 · 0 评论 -
JAVA获取随机数
在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(原创 2011-08-19 12:57:55 · 560 阅读 · 0 评论 -
Synchronized块同步变量的误区
我们可以通过synchronized块来同步特定的静态或非静态方法。要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传入synchronized块。下面的代码演示了如何同步特定的类方法: Java代原创 2011-07-23 10:34:58 · 8715 阅读 · 1 评论 -
java 性能优化
一、避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 例子: Java代码 import java.util.Vector; class CEL {原创 2011-07-14 13:48:26 · 612 阅读 · 0 评论 -
Java同步机制总结--synchronized
不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对前段时间工作的总结和自我技术的条理话。JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instan原创 2011-07-22 18:20:13 · 888 阅读 · 0 评论 -
对Java同步一些理解
基本概念: 每个Object都会有1个锁. 同步就是串行使用一些资源.(说明:以下有些例子为了突出重点,省略了不必要的代码.特别是省掉了一些成员变量,就是需要同步的对象.)1. 多线程中对共享、可变的数据进行同步. 对于函数中的局部变量没必要进行同步. 对于不可变数据原创 2011-07-13 12:58:43 · 642 阅读 · 0 评论 -
Java操作Excel之理解JXL--读取Excel
JXL(Java Excel API)是一个用来动态读写Excel文件的开源框架,利用它可以在任何支持Java的操作系统上动态读写Excel文件。JXL的主页是:http://www.andykhan.com/jexcelapi/,可以在这里下载到它的最新的版本。你可以分别通过如原创 2011-07-08 14:55:54 · 420 阅读 · 0 评论 -
解决double和float精度不准的问题
<br /> float和double型,的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和double型的位数宽度,就会出现“精度溢出”。所以float和double型是为了科学计算而设计的,并不适合精确的十进制计算. 就像一个十进制的小数,要不断地乘以2取整,但在这个过程中可能会一直循环下去,这就造成了数据的不精确。 所以在必须要求数据的精确度时,不能使用float和double. public class Test{public st原创 2010-11-26 09:21:00 · 1044 阅读 · 0 评论