自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Java小对象的解决之道——对象池(Object Pool)的设计与应用

一、概述面向对象编程是软件开发中的一项利器,现已经成为大多数编程人员的编程思路。很多高级计算机语言也对这种编程模式提供了很好的支持,例如C++、Object Pascal、Java等。曾经有大量的软件工程师使用C语言作为他们的谋生工具,随着面向对象的深入人心,微软公司也对其C语言进行了扩充,形成了C++语言,全面支持面向对象的软件开发模式。“面向对象”的主角即是“对象”,其良好的可充用性和

2006-08-20 18:04:00 8297 2

原创 Specific Type ObjectPool

/**Because of the penalty of the performance, Wed better try it in another way.**A generic pool requires acccess to the internal state variables of the managed objects,*so that the objects can be ini

2006-06-10 14:57:00 1100

原创 ObjectPool

/**Free object pools represent a form of object reuse.*With the free pool approach, code using objects of the pooled type must track usage and*explicitly return the objects to the free pool when usage

2006-06-10 12:03:00 1416

原创 测试Set的打印输出

/**此测试程序的目的是检测Set的toString()方法是否是由叠代器来遍历集合的*顺便检测低层存储顺序(Set提供的toString()方法应该是反映的底层结构)*///PrintSet.javapackage com.msn.spaces.bryantd001;import java.util.*;class MyHashSet extends HashSet{      pu

2006-04-20 12:49:00 2098

原创 数组的排序

/**利用java.util.Array sort()对数组进行排序时,务必保证数组的元素类型实现了Comparable接口(实质上是要保证元素可比)*否则运行时抛出异常:ClassCastException*java.util.Array sort()有两种基本的重载形式:*public static void sort(Object[] a) throws ClassCastException

2006-04-11 12:49:00 1106

原创 获得一个类实例的Class对象的三种方法,与Class对象的相互比较

/**获得一个类实例的Class对象有三种常用方法*1、调用从Object类中继承来的方法public Class getClass()*以下两种方法是获得某个指定类的Class对象(如果知道类实例的确切类型)*2、利用Class类的static方法forName(String className(需要带包名)),注意这个方法throws ClassNotFoundException*3、利用类字

2006-04-06 09:42:00 6941

原创 RTTI机制的Class对象

RTTI机制的Class对象首先明确一个观点:Class是一个类名(class Class)。当我们编写了一个类并通过编译后,这个类就会生成一个Class对象,被保存在。class文件中类运行时被加载实际上加载的是这个Class对象并完成相应的初始化工作,以后程序中生成该类的实例时由这个Class对象来完成。类Class有一个static方法forName(),用来获得指定类的Class对象引

2006-04-06 09:38:00 1080

原创 数组的初始化方式

/*数组的初始化方式数组在进行初始化的时候,一条重要的原则就是:在编译时要知道数组的长度有三种方法对数组进行初始化*///ArrayInitialization.java//show the different ways to initialize arrray.package com.msn.spaces.bryantd001; public class ArrayInitializ

2006-04-06 09:30:00 2218

原创 java包与jar文件

java包与jar文件        我们平时编写一些类似于工具的类文件,在以后编写代码的时候经常要用到这些类,于是我们会将一些功能相近的类定义在一个包中(用package关键字),比如这个包名是:bryantd.javatools。这些被称为javatools的工具类在逻辑上被放置在/bryantd/javatools/目录下,相应的物理存储也应该建立一个包含该子目录(/bryantd/java

2006-04-01 22:21:00 1873

原创 将“受检查异常”转化为“不受检查异常”

为了简化“受检查异常”的处理工作,可以将其包装成为“不受检查异常”,这样就不必捕获它,或者在异常声明中列出。注意,这样抛出的异常就是一个新的封装了原受检查异常的异常了。如果程序员确切知道会发生该异常,则可以对其进行捕获,并利用getCause()获取原“受检查异常”并再对其进行处理。再次捕获进catch块中的时候,编译器强制用Throwable作为“保底”//IgnoreRuntimeExce

2006-03-27 17:26:00 2244

原创 构造方法中的异常清理

在构造方法中对“受检查异常”的处理可以使用finally块来完成清理工作。但是并不是每次初始化对象的时候都会有异常被抛出,所以应该设置一个标志,来判断finally块中的语句是否真的要被执行。但是这种方法属于“Trick”,并不提倡使用。还有一种方法是在捕获到异常的catch块中来完成清理工作。下面这个例子的构造方法的清理工作是指“关闭被打开的文件(如果文件被打开的话)”//Construct

2006-03-27 16:52:00 1165

原创 重新抛出异常与 public Throwable fillInStackTrace()

一个异常对象被抛出后,在捕获到它的方法中进行处理,可以调用public void printStackTrace()方法显示它的调用栈信息,也就是它从被抛出到被捕获经过的“路径”。这个异常对象可以再次被抛出,并且再次被捕获。再次被捕获后进行处理,调用printStackTrace()方法,则调用栈信息仍然是旧版本的。在上次重新抛出异常的时候可以调用 public Throwable fillInS

2006-03-22 15:51:00 1809

原创 用类创建常量

将某个类的构造方法设置为private的,即不允许在类定义外创建该类的实例。但在类定义体中创建一些静态的该类实例,这样在以后想应用该类实例时,直接用“类名.变量”,这样看起来好像是“常量”的效果。但是这样的类以后无法扩展。//TestConstValue.java//Constructor is private, create some public static object in the

2006-03-22 12:44:00 1088

原创 类的加载顺序以及静态成员初始化顺序

Java程序运行时,会首先运行到某类的main()方法,随即开始加载该类,同时对static成员初始化。若该类具有超类,则从根基类开始加载类并初始化类的static成员,因为有时候子类的成员初始化会依赖于基类的初始化成员。错误的理解是:Java运行到程序中,若遇到对类的操作(比如生成类对象)时才加载对应于操作的类并初始化其static成员。//StaticInitialSequence.jav

2006-03-22 12:13:00 1549

原创 子类只能覆盖超类中“可以直接访问”的方法

子类只能覆盖超类中“可以直接访问”的方法,否则即使在子类中定义了一个与超类中形式一样的方法,也没有覆盖,只是一个同名方法而已。此时,子类中拥有两个名字相同的方法:其中一个是从超类中继承的不可访问方法,另一个就是自己定义的方法//OverridingPrivate.java//You can not override a private method from super classpack

2006-03-14 13:24:00 2927

原创 Final类型数据的初始化

final类型的数据(基本类型和引用类型)分为编译是确定值,和运行时确定值两类。都要保证在使用前进行初始化,注意final类型的数据若在定义时没有显示初始化,是没有默认初值的。对于在定义时没有显式初始化的,应该在构造方法中进行初始化,这时可以利用不同参数传递给它,使得它可以根据具体对象的不同而不同,并且保证在不同的对象中始终唯一。//FinalDataInitial.java//Fianl d

2006-03-14 13:21:00 3148

原创 终于弄明白了Java包的环境变量设置

      我自己开发的类库被我在程序中打包在com.bryantd。javaP中,对应于物理路径就是“e:/bryantd/javaP”。我的系统是XP,设置环境变量如下:CLASSPATH=.; c:/j2dk/lib; e:/;      开始我的理解是:JDK会依据环境变量的设置顺序,首先在当前目录下寻找类;若没找到,转而去c:/j2dk/lib/中去寻找;若还没找到,就到我自己的

2006-03-12 20:27:00 3577

原创 类的访问控制权限讨论

      除了内部类,一般情况下类只具有两种访问控制权限:public和包访问权限(default)。      具有包访问权限的类不能被包外的代码引用。要将某个非内部类起到private的效果,不应直接赋予private访问控制权限,而是将其构造方法定义为private的,这样虽然可以访问该类,但是却不能生成该类的实例。      当然也有两种设计模式可以使构造方法为private的类生成实例

2006-03-12 12:11:00 1835

原创 返回值类型的不同不能作为区分重载的途径

      对于重载方法,不要试图通过给予不同的返回值类型(参数列表完全相同)加以区分。因为方法在调用时可以不将返回值赋值给一个对应的变量,这样就没有特征区分。也不要试图通过在调用这样的重载方法时赋值给对应的变量加以区分,因为问题是出现在重载方法定义上,而不是调用上。总而言之,Java不允许仅仅利用返回值的不同来区分重载方法。 //ReturnValueTest.java//You can

2006-03-12 12:04:00 11195

原创 静态方法中调用非静态方法

      我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法。      其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其饮用变量调用它的非静态方法。 //St

2006-03-12 12:02:00 57822 5

原创 区分方法重载与基本数据类型的转换

        首先构造一组重载方法作为测试用例,这些方法都有一个基本数据类型的参数,返回值为空,其作用都是输出参数值。1、若实参的数据类型“窄于”形参的数据类型,则会自动匹配到比实参数据类型“宽”且最接近的数据类型。char类型比较特殊,若实参是char(16位)类型,重载方法的形参中没有char类型,但有short(16位)和int(32位)类型,则会匹配到具有int类型形参的方法。2、若实参

2006-03-12 11:59:00 1937

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除