- 浏览: 26558 次
- 性别:
- 来自: 武汉
-
最新评论
-
裴小星:
这种写法理解起来很费劲。我觉得还是直观感受比较重要。
里氏代换原则(Liskov Substitution Principle) -
mabusyao:
奇怪,代码引用在评论里面好像是失效的,我试试
public c ...
里氏代换原则(Liskov Substitution Principle) -
mabusyao:
有两个原则和里氏替换原则关系非常紧密。1. 开闭原则2. 依赖 ...
里氏代换原则(Liskov Substitution Principle)
文章列表
这点必须切忌,不然在你和hash-based集合打交道的时候,错误就会出现了。关键问题在于一定要满足相等的对象必须要有相等的
hashCode。如果你在PhoneNumber类中覆盖了equals方法,但是没有覆盖hashCode方法,那么当你做如下操作的时候就会出现问
题了。
Map m = new HashMap();
m.put(new PhoneNumber(408,863,3334),”ming”)
当你调用m.get(new
PhoneNumber(408,863,3334))的时候你希望得到ming但是你却得到了null,为什么呢因为在整个过程中有两个 ...
下列情况是不需要改写equals方法的:
同一个类的不同实例本质上是唯一的,就是个实例都有自己的本体(Identify)。
不关心该类是否提供了逻辑相等的功能。
父类已经改写过equals方法,对于子类来说,继承过来的equals方法已经是最合适的了。
一个类是私有的或者是包可见的,且确定它的equals方法不会被调用。
对于需要改写equals方法的时候,应该遵守如下约定:
自反性,即x.equals(x)为true.
对称性,即当且仅当x.equals(y)为true时y.equals(x)也一定为true。
传递性,即对任意的x,y,z,如果x.equals( ...
终结函数(finalizer)可以用来回收不可到达的对象,就是说对象的生命周期结束后,可以用终结函数来回收为该对象分配的资源。
但是,终结函数执行线程的优先级很低,以至于我们不敢把对时间要求比较高的对象回收让终结函数来回收。JVM总是会延迟终结函数的执行。
对于急需回收对象,可以使用tyr finally,在finally写回收对象的代码,这样就保证对象能及时被回收。
// try-finally block guarantees execution of termination method
Foo foo = new Foo(...);
try {
// Do w ...
垃圾回收器不会对“过期引用”(永远不会在被解除的引用)的对象进行回收。如:数组中的元素先增加再减少这种情况,下标大于size()的那一部分就是过期引用的对象。
解决方法:
public Object pop(){
if(size == 0){
throw new EmptyStackException();
}
Object result = elements[--size];
//自减后把原来的引用置为null
elements[size] = null;
return r ...
如果一个对象是非可变的,那么它在程序中上可以被重用的,如:
//不推荐,"test"本来就是一个String实例,如果此方法在一个循环中或者被频繁的调用,将会严重影响性能
String s = new String("test");
//推荐方式
String s = "test";
对于提供静态方法和构造函数的非可变类,推荐使用静态方法,这样可以避免重复创建对象,如:
Boolean.vauleOf(String)方法优于构造函数Boolean(String)
如下Person类在 ...
在面向对象程序设计中,假如存在太多只有静态属性和静态方法的类;那么,面向对象的思想可能在这会损失殆尽。但是,并不能说面向对象的程序中就不应该出现
只有静态属性和静态方法的类,相反,有时候我们还必须写这样的类作为工具类。这样的类怎么实现呢?有人可能会把该类定义成抽象类(Abstract
class),的确,抽象类是不可以实例化的,但是别忘了还有继承,继承了抽象类的子类在实例化时候,默认是会先调用父类无参数的构造函数的
(super();),这时候,父类不是也被实例化了嘛?其实我们可以这样做,把该类的构造函数定义为私有的(private),而类的内部又不调用该构
造函数的话 ...
实现singleton的方法有两种:
方法一:公有的静态成员是一个final域,成员的声明很清楚的表达了这个类是一个singleton。
view plaincopy to clipboardprint?
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public void leaveTheBuilding() {
System.out.println ...
静态工厂方法好处:
构造函数有命名的限制,而静态方法有自己的名字,更加易于理解。
静态工厂方法在每次调用的时候不要求创建一个新的对象。这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能。它使得一个类可以保证是一个singleton;他使非可变类可以保证“不会有两个相等的实例存在”。
静态工厂方法在选择返回类型时有更大的灵活性。使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,还可以创建非公有类的对象,这就封装了类的实现细节。
静态工厂方法坏处:
如果一个类是通过静态工厂方法来取得实例的,并且该类的构造函数都不是公有的或者保护的,那该类就不可能有 ...
迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历
1.迭代器角色定义了遍历的接口,但是没有规定由谁来控制迭代。在Java
collection的应用中,是由客户程序来控制遍历 ...
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
junit特性
JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
...
白盒测试
百科名片
白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是按照程序
内部的结构测试程序
,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象
看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例
,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
目录
简介
测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
测试用例(Test Case)目前没有经典的定义。比较通常的说法 ...
1. program Java source file loading Native method
/** NativeDemo
* Author: huang_jc 1999/05/20
* file name: NativeDemo.java
*/
public class NativeDemo
{
int i;
int j;
public static void main(String args[])
{
NativeDemo ob = new NativeDemo();
ob.i = 10;
ob.j = ob.test(); ...
You can deploy several different types of enterprise applications in
JBoss
AS
:
• The
WAR
application archive (e.g.,
myapp.war
) packages a Java EE web application in a
JAR file. It contains
servlet
classes, view pages, lib ...
1、 将文件checkout到本地目录
svn checkout path
(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、
往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test. ...