Java基础
文章平均质量分 54
treeroot
爱好围棋,热爱生活
展开
-
java类加载原理分析
未经同意,严禁转载! 这篇文章将比较深入的介绍java类加载原理和过程,虽然很多情况你都不需要了解类加载的过程,但是如果你希望了解java是如何工作的,或者希望定义自己的类加载器,就一定要了解类加载的过程,当然,无论你是否要参与类加载过程,了解这个过程对你都会有很大的帮助。本文希望通过一步一步的分析来说明类加载的过程,希望这原创 2006-07-22 22:04:00 · 13839 阅读 · 8 评论 -
13球称重问题Java实现
/** * 13球称重问题Java实现 * Copyright: Copyright (c) 2004 * @author treerot * @version 1.0 */public class ThirteenBall { private static class Ball { private int weight; public int getWeight() {原创 2004-11-02 18:11:00 · 2060 阅读 · 0 评论 -
GC测试
下面这段代码可以用来测试GC的工作情况,finalize方法是关键public class GCTest { public static void main(String[] args) throws InterruptedException { //runGC(); for(int i=0;i newObj(); } System.out.println原创 2004-10-29 19:28:00 · 1953 阅读 · 2 评论 -
TreeMap和TreeSet
TreeMap是红黑树算法的实现,实现了SortedMap接口,要注意的是它不在使用哈希表,存储方式是一个特殊的二叉树,有关红黑树:http://blog.csdn.net/treeroot/archive/2004/10/15/138431.aspx这篇文章介绍的不错,我之前没有听说过二叉树,我就是看这篇文章加上看一下TreeMap的源代码才搞懂红黑树算法的.这里不打算研究TreeMap的源原创 2004-10-28 18:38:00 · 3067 阅读 · 0 评论 -
LinkedHashMap和LinkedHashSet
LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,其实基本上和HashMap差不多.public class LinkedHashMap extends HashMap 利用LinkedHashMap可以获得一个和原来Map一样顺序的一份拷贝Map m=new LinkHashMap(old);LinkedHashSet更加简单,代码就非常简单,就是一些构造函数原创 2004-10-28 18:15:00 · 2355 阅读 · 1 评论 -
浮点数分析
浮点数分为单精度和双精度,Java中的单精度和双精度分别为float和double.你们知道float和double是怎么存储的吗?float占4个字节,double占8个字节,为了方便起见,这里就只讨论float类型.float其实和一个int型的大小是一样的,一共32位,第一位表示符号,2-9表示指数,后面23位表示小数部分.这里不多说,请参考:http://blog.csdn.net/t原创 2004-10-27 18:56:00 · 1295 阅读 · 1 评论 -
Java中的移位操作
Java中的位操作指定包括:& | ~ >> >>,前面几个都非常简单,主要是以为操作比较容易出错.1.逻辑左移,右边补0,符号位和其他位一样.正数:x溢出范围: 230~(231-1) 二进制表示 010000...000到01111....1111,移位后最高为变为1了,变成负数了.负数:x溢出范围: -231~-(230+1)二进制表示10000...000到101111...1111,移位原创 2004-10-20 13:55:00 · 2940 阅读 · 0 评论 -
一个最简单的装饰模式
如果要对一个List中的元素排序,如果List中的元素是可排序的(实现了Comapable),直接Collections.sort(list).如果要指定排序算法,可以使用Comparator,可以参考:http://blog.csdn.net/treeroot/archive/2004/10/19/142636.aspxCollections.sort是按升序排序的,如果要按降序呢?其实很简单,原创 2004-10-19 19:47:00 · 1550 阅读 · 1 评论 -
Java中的排序
要实现排序功能,一般有两种途径,这里对基本类型不适用,基本类型一般有Arrays中的静态方法.1.对象本身实现Comparable接口,那么该类的实例就是可以排序的.有关Comparable: http://blog.csdn.net/treeroot/archive/2004/09/09/99613.aspx只要实现了Comparable接口,就可以调用Collections的sort方法对原创 2004-10-19 14:32:00 · 5695 阅读 · 0 评论 -
SortedMap接口
SortedMap表示的是一个排序的Mappublic interface SortedMap extends Map 增加了几个方法的定义SortedMap headMap(Object toKey)SortedMap tailMap(Object fromKey)SortedMap subMap(Object fromKey, Object toKey)Object firstKey()Obj原创 2004-10-15 22:12:00 · 2612 阅读 · 0 评论 -
API解读:Collections
Collections和Arrays一样是一个不可实例化的类,提供了一些静态方法来操作Collection。 1.排序 sortpublic static void sort(List list)public static void sort(List list, Comparator c) 用于对List排序,可以使用自然排序,也可以指定Comparator,返回的是从小到大的有序List。原创 2004-10-15 21:54:00 · 1679 阅读 · 2 评论 -
Arrays的功能
java.util.Arrays是一个不可实例的应用类,提供了对数组的一般操作,数组类型可以是基本类型和引用类型。1.排序 sort对于基本类型,就是比较大小。对于引用类型,就是按照自然顺序(实现了Comparable接口),也可以指定一个Comparator。2.二分查找 binarySearch数组必须是已经排序的,否则该方法未定义。3.填充 fill就是用某个值填充数组的某些元素。4.比较两原创 2004-10-11 21:27:00 · 1449 阅读 · 2 评论 -
SortedSet接口
SortedSet是排序的Set,定义public interface SortedSet extends Set 定义的方法和SortedMap类似SortedSet headSet(Object toElement)SortedSet tailSet(Object fromElement)SortedSet subSet(Object fromElement, Object toElement原创 2004-10-15 22:15:00 · 1319 阅读 · 0 评论 -
API解读:StringTokenizer
StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数public StringTokenizer(String str) public StringTokenizer(String str, String delim) public StringTokenizer(String str, String delim, boolean return原创 2004-10-15 22:06:00 · 1962 阅读 · 3 评论 -
wait,notify,sleep,join和线程同步问题(续)
昨天没有时间写完这篇,今天补上,前面只说明了wait和notify这两个方法,这里讨论一下sleep和join,说实在的这两个方法比wait和notify简单的多.http://blog.csdn.net/treeroot/archive/2004/11/10/175508.aspxsleep:Thread的静态方法,当前线程休眠一段时间,时间到了再恢复可运行状态,时间到了不一定就执行吧,还得原创 2004-11-11 12:43:00 · 2586 阅读 · 1 评论 -
检查IP地址的正则表达式
这里用正则表达式我检查指定的字符串是否式一个IP地址,注意这里前缀0是不允许的,如果允许前缀0的话那问题就简单了好多,这个实现效率比较低下.boolean ipValid(String s){ String regex0="(2[0-4]//d)" + "|(25[0-5])"; String regex1="1//d{2}"; String regex2="[1-9]//d原创 2004-11-08 16:51:00 · 2881 阅读 · 4 评论 -
我见过的最长的表达式
BitSet里的一个方法: private static int bitLen(int w) { // Binary search - decision tree (5 tests, rarely 6) return (w (w (w (w (w原创 2004-11-09 15:33:00 · 1924 阅读 · 4 评论 -
java类加载的表现形式
java中的类是动态加载的,我们先看一下我们常用的类加载方式,先有一个感性的认识,才能进一步深入讨论,类加载无非就是下面三种方式。class A{}class B{}class C{}public class Loader{ public static void main(String[] args) throws Exception{ Class aa=A.class;原创 2006-06-19 12:58:00 · 6078 阅读 · 2 评论 -
类加载器工具类:动态设置classpath,获得加载类列表等
下面的一个小工具类提供了对系统类加载器和扩展类加载器的动态控制能力.可以在程序中加入classpath,当然也可以获得类加载器加载的类列表,相信java的动态能力!package org.rut.core;import java.io.File;import java.io.PrintStream;import java.lang.reflect.Field;import java.lan原创 2006-03-21 18:42:00 · 7091 阅读 · 1 评论 -
堆结构的实现
包括最大值堆和最小值堆:接口:package org.rut.util.structure.heap;/** * @author treeroot * @since 2006-1-31 * @version 1.0 */public interface Heap { /** * return the top element of the heap * @retur原创 2006-03-21 18:27:00 · 6041 阅读 · 0 评论 -
如何理解数组的length?
Java中的数组其实也是一个对象,但是确实是一个特殊的对象,实在是太特殊了, 以致我们都不好把它多做对象处理。 1.数组是对象,继承自Object 唯一比Object多一个成员变量length,而且应该是public的。 2.java.lang.reflect.Array是final的,所以数组肯定不是它的子类 这个类用来动态生成数组或者操作数组(获得长度等).原创 2005-01-22 18:16:00 · 9592 阅读 · 2 评论 -
Java同步问题
这里的同步只对单个Java应用程序来说,至于数据库同步,文件同步等就不是这里讨论的问题了。 同步和多线程的关系1.没有多线程环境就不需要同步。2.即使有多线程环境也不一定需要同步。 为什么要同步:为了防止多个线程对同一数据的修改,所以需要同步,否则会造成数据不一致。Java提供了非常方便的多线程支持,所以说同步问题比较普遍,尤其是Servlet和JSP的线程安全问题特别明显。htt原创 2005-01-14 20:36:00 · 12917 阅读 · 6 评论 -
Java内存泄露问题
内存泄露很多人在谈论内存泄露问题,当然对于c/c++来说,这个应该是老掉牙的问题,但是很多Java人员也越来越多得讨论这个问题,我这里写个小结,希望对大家有一定的参考价值。 必须先要了解的1.c/c++是程序员自己管理内存,Java内存是由GC自动回收的。我虽然不是很熟悉C++,不过这个应该没有犯常识性错误吧。2.什么是内存泄露?内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或原创 2005-01-12 19:26:00 · 5886 阅读 · 12 评论 -
性能优化:==代替equals
很多人一定觉得这个题目老土,稍微有点基础的人都觉得比较弱智,没有什么好讨论的,因为这个问题讨论的太多了。不过你既然进来了,不妨看完,就算给个面子吧,几分钟而已,可能你会有点启发!很久没有写东西了,现在大部分人也不会关心程序的效率问题了,因为CPU总是闲着,内存总是空着。很多人都觉得对于基本类型用==,对于引用类型用equals(),为什么呢?对于引用类型如果可以用==代替equals(),原创 2004-12-17 13:03:00 · 3891 阅读 · 0 评论 -
int和byte数组的转换
int转换成长度为4的byte数组,长度为4的byte数组合成一个int.static int bytes2int(byte[] b){ //byte[] b=new byte[]{1,2,3,4}; int mask=0xff; int temp=0; int res=0; for(int i=0;i原创 2004-11-17 15:29:00 · 2854 阅读 · 0 评论 -
哈希崩溃及避免方法
先看下面的一个例子,如果你能毫不犹豫的全部答对,说明你对HashMap基本理解.import java.util.Map;import java.util.HashMap;import java.util.Set;import java.util.HashSet;class HashFail{ public static void main(String[] args)原创 2004-11-17 19:04:00 · 2345 阅读 · 0 评论 -
wait,notify,sleep,join和线程同步问题
wait,notify,sleep,join这几个方法很常用,这里涉及到多线程和同步问题,这里稍微解释一下. 1.wait和notify这两个方法都是Object中的方法,放在一块是因为他们关系非常密切.wait就是等待这个对象的同步锁,不过调用这个方法必须先获得这个对象的同步锁,就这一点很多人就搞晕了.这里先解释一下这两个方法,然后给出一个小例子说明.wait:等待对象的同步锁,需要获得原创 2004-11-10 11:51:00 · 5027 阅读 · 5 评论 -
String
public final class String implements java.io.Serializable, Comparable, CharSequence1.构造函数其实一般String都不用构造函数,直接用=号就可以了.a.常用的构造函数:public String(char value[]) public String(char value[], int offse原创 2004-11-05 17:54:00 · 1796 阅读 · 0 评论 -
提取英文中的单词
用正则表达式很简单String s="this is a test, powerful split";String[] arr=s.split("[^a-zA-Z]+"); //6个单词的数组for(int i=0;i System.out.println(arr[i]);原创 2004-11-11 08:58:00 · 3082 阅读 · 0 评论 -
API解读:Thread
线程是一个和平台关系比较密切的概念,这里我们也不能看出它的具体实现,只能看一下它的表现了.public class Thread implements Runnablepublic final static int MIN_PRIORITY = 1;public final static int NORM_PRIORITY = 5;public final static int MAX_P原创 2004-11-10 10:54:00 · 1948 阅读 · 0 评论 -
ArrayList源码分析
终于可以开始分析第一个具体的类,我们对ArrayList应该非常面熟了,不管你是否了解它是如何实现的,但是我们到处都使用到它。 声明如下: public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable有关AbstractList:h原创 2004-09-16 20:26:00 · 6334 阅读 · 1 评论 -
AbstractList源码分析
AbstractList给List提供了一个骨架实现,它的声明是这样的:public abstract class AbstractList extends AbstractCollection implements List继承AbstractCollection,实现List接口。 有关AbstractCollection:http://blog.csdn.net/treeroot/archi原创 2004-09-14 22:55:00 · 5124 阅读 · 0 评论 -
List接口分析
List接口是继承自Collection接口的,有关Collection接口:http://blog.csdn.net/treeroot/archive/2004/09/09/99591.aspxList是一种有序的Collection,可以通过索引访问集合中的数据,看看List中有哪些方法1.int size()从Collection中继承2 boolean isEmpty()从Co原创 2004-09-14 20:41:00 · 3037 阅读 · 0 评论 -
Java中类型转换的特例
先看一下下面的语句那些是非法的。byte b1=2;byte b2=1+1;byte b3=b1+1;byte b4=b1++;int i1=Integer.MAX_VALUE+1; //Integer.MAX_VALUE=2147483647int i2=2147483648;把byte改为char和short几乎是一样的。因为整数字面常量是int型的,也就是1和2都是int型的在赋值语句中直接原创 2004-09-08 20:15:00 · 1517 阅读 · 0 评论 -
理解Java类加载原理(翻译)
第一部分. 提示我需要读这篇文章吗?Java类加载器对Java系统的运行是至关重要的,但是却常常被我们忽略。Java类加载器负载在运行时查找和加载类。自定义类加载器可以完全改变类的加载方式,以自己喜欢的方式来个性化你的Java虚拟机。本文简要的介绍Java类加载器,然后通过一个构造自定义类加载器的例子来说明,这个类加载器在加载类前会自动编译代码。你将学到类加载器到底是干什么的,如何创建你自己的类加翻译 2004-09-04 22:27:00 · 6289 阅读 · 1 评论 -
提高数据库操作的可靠性
Java中的数据库操作是比较频繁的,很多人在处理数据库操作时往往拿不准,只能保证程序正常运行下没有问题,但是很多都没有释放资源或者没有正确的释放资源,等到有问题又不知道怎么回事!这里给出一个通过JDBC操作数据库的简单例子, 希望有一定的参考价值,为了方便,通过数据库连接工厂获得连接。有关连接工厂的代码:http://blog.csdn.net/treeroot/archive/2004/09原创 2004-09-24 12:59:00 · 2115 阅读 · 2 评论 -
一些常见的RuntimeException
Java中采用了强制异常捕捉机制,这样一方面提高了程序的可靠性,不过有时候也带来一些麻烦。比如: int i= Integer.parseInt("33");这个我知道它不可能会抛出异常,但是不捕捉异常的话就过不了编译这关,当然这个代码没有意义的。Java中所有异常或者错误都继承Throwable,我们把它分为三类吧:1.Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码原创 2004-09-22 19:30:00 · 2430 阅读 · 4 评论 -
一个效率低下的Map实现:AbstractMap
AbstractMap为Map提供了默认的实现,不过在子类中一般都有覆盖,因为这里的实现效率都比较低,这个类中的实现方法几乎都没有什么价值,仅仅是实现了而已!声明如下: public abstract class AbstractMap implements Map 有关Map:http://blog.csdn.net/treeroot/archive/2004/09/20/110331.aspx原创 2004-09-20 12:42:00 · 4936 阅读 · 0 评论 -
Map接口说明
Map接口并没有继承Collection,声明如下:public interface Map接口种定义14个方法:1.int size()2.boolean isEmpty() 3.boolean containsKey(Object key)4.boolean containsValue(Object value);5.Object get(Object key)6.Object put(O原创 2004-09-20 12:33:00 · 3728 阅读 · 0 评论 -
Comparable接口分析
现看一下该接口的定义:public interface Comparable{ public int compareTo(Object o);}该接口定义类的自然顺序,实现该接口的类就可以按这种方式排序.一般要求:e1.equals((Object)e2)和e1.compareTo((Object)e2)==0具有相同的值,这样的话我们就称自然顺序就和equals一致.这个接口有什么用呢?如果原创 2004-09-09 19:46:00 · 23888 阅读 · 2 评论