lqxue

常用链接

统计

book

tools

最新评论

#

java String ==

一般来说,程序代码中的字符串常量经过编译之后,都具有唯一性,即,内存中不会存在两份相同的字符串常量。

(通常情况下,C++,C语言程序编译之后,也具有同样的特性。)

比如,我们有如下代码。

String A = “atom”;

String B = “atom”;

我们有理由认为,A和B指向同一个字符串常量。即,A==B。

注意,声明字符串变量的代码,不符合上面的规则。

String C= new String(“atom”);

String D = new String(“atom”);

这里的C和D的声明是字符串变量的声明,所以,C != D。

posted @ 2007-12-05 16:14 lqx 阅读(153) | 评论 (0)编辑 收藏

技术补习之序列化ID(serialVersionUID)

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。

当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID

如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。



源自:http://sharajava.javaeye.com/blog/102886

posted @ 2007-11-14 13:58 lqx 阅读(490) | 评论 (0)编辑 收藏

二叉树的遍历

 

 

前序遍历二叉树算法的框架是
若二叉树为空,则空操作;
否则
访问根结点 (V);
前序遍历左子树 (L);
前序遍历右子树 (R)。

遍历结果
- + a * b - c d / e f

中序遍历二叉树算法的框架是:
若二叉树为空,则空操作;
否则
中序遍历左子树 (L);
访问根结点 (V);
中序遍历右子树 (R)。

遍历结果
  a + b * c - d - e / f



后序遍历二叉树算法的框架是
若二叉树为空,则空操作;
否则
后序遍历左子树 (L);
后序遍历右子树 (R);
访问根结点 (V)。

遍历结果
a b c d - * + e f / -


参考文档:http://51zk.csai.cn/sjjg/200608291542281644.htm
                     http://faculty.math.tsinghua.edu.cn/faculty/~jli/teaching/2006/Fall/ds/347,32,后序遍历 (Postorder Traversal)

posted @ 2007-11-09 16:11 lqx 阅读(519) | 评论 (0)编辑 收藏

javascript 判断是否是ie,是否是特定版本

是否是Opera:
is_opera = /opera/i.test(navigator.userAgent)
是否是IE:
is_ie = (/msie/i.test(navigator.userAgent) && !is_opera)

是否是ie7:
(is_ie && /msie 7\.0/i.test(navigator.userAgent));

posted @ 2007-11-06 17:32 lqx 阅读(1010) | 评论 (0)编辑 收藏

tomcat 远程部署]

1、tomcat-users.xml should include one more role, 'admin'..e.g.

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="admin"/>
<role rolename="manager"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="admin" password="secret" roles="manager,admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>
2、ant 脚本

<target name="tomcatDeploy" depends="compile">
  
<taskdef name="tdeploy" classname="org.apache.catalina.ant.DeployTask">
    
<classpath refid="cp">
    
</classpath>
  
</taskdef>
  
<tdeploy url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="${tomcat.path}" war="${dir.target}/${warFileName}" />
 
</target>
 
<target name="tomcatUndeploy" description="Remove web application">
  
<taskdef name="tomcatUndeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="cp" />
  
<tomcatUndeploy url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="${tomcat.path}"/>
  
</target>

posted @ 2007-10-29 11:10 lqx 阅读(673) | 评论 (0)编辑 收藏

[收集]java5 的一些的性

@SuppressWarnings与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好了的,我们选择性的使用就好了,参数如下:

参数

语义

deprecation

使用了过时的类或方法时的警告

unchecked

执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型

fallthrough

Switch 程序块直接通往下一种情况而没有 Break 时的警告

path

在类路径、源文件路径等中有不存在的路径时的警告

serial

当在可序列化的类上缺少 serialVersionUID 定义时的警告

finally

任何 finally 子句不能正常完成时的警告

all

关于以上所有情况的警告

   

Override

  Override表示,它所注释的方法应该重写超类中具有相同签名的方法:
@Override

  public int hashCode() {

  ...

  }


  看上面的例子,如果没有在hashCode中将“C”大写,在编译时不会出现错误,但是在运行时将无法像期望的那样调用该方法。通过添加Override标签,编译器会提示它是否真正地执行了重写。

  在超类发生改变的情况中,这也很有帮助。如果向该方法中添加一个新参数,而且方法本身也被重命名了,那么子类将突然不能编译,因为它不再重写超类的任何东西。

枚举

  


  enum非常像public static final int声明,后者作为枚举值已经使用了很多年。对int所做的最大也是最明显的改进是类型安全――您不能错误地用枚举的一种类型代替另一种类型,这一点和int不同,所有的int对编译器来说都是一样的。除去极少数例外的情况,通常都应该用enum实例替换全部的枚举风格的int结构。

  枚举提供了一些附加的特性。EnumMap和EnumSet这两个实用类是专门为枚举优化的标准集合实现。如果知道集合只包含枚举类型,那么应该使用这些专门的集合来代替HashMap或HashSet。

  大部分情况下,可以使用enum对代码中的所有public static final int做插入替换。它们是可比的,并且可以静态导入,所以对它们的引用看起来是等同的,即使是对于内部类(或内部枚举类型)。注意,比较枚举类型的时候,声明它们的指令表明了它们的顺序值。

  “隐藏的”静态方法

  两个静态方法出现在所有枚举类型声明中。因为它们是枚举子类上的静态方法,而不是Enum本身的方法,所以它们在java.lang.Enum的javadoc中没有出现。

  第一个是values(),返回一个枚举类型所有可能值的数组。

  第二个是valueOf(),为提供的字符串返回一个枚举类型,该枚举类型必须精确地匹配源代码声明。

  方法

  关于枚举类型,我们最喜欢的一个方面是它可以有方法。过去您可能需要编写一些代码,对public static final int进行转换,把它从数据库类型转换为JDBC URL。而现在则可以让枚举类型本身带一个整理代码的方法。下面就是一个例子,包括DatabaseType枚举类型的抽象方法以及每个枚举实例中提供的实现:

  
  public enum  DatabaseType {

  ORACLE {

  public String getJdbcUrl() {...}

  },

  MYSQL {

  public String getJdbcUrl() {...}

  };

  public abstract String getJdbcUrl();

  }


  现在枚举类型可以直接提供它的实用方法。例如:

  DatabaseType dbType = ...;

  String jdbcURL = dbType.getJdbcUrl();

  要获取URL,必须预先知道该实用方法在哪里。

可变参数(Vararg)

 Log.log(String code, String... args)
协变返回

  协变返回的基本用法是用于在已知一个实现的返回类型比API更具体的时候避免进行类型强制转换。在下面这个例子中,有一个返回Animal对象的Zoo接口。我们的实现返回一个AnimalImpl对象,但是在JDK 1.5之前,要返回一个Animal对象就必须声明。:

  
    public interface Zoo  {

  public Animal getAnimal();

  }

  public class ZooImpl implements Zoo {

  public Animal getAnimal(){

  return new AnimalImpl();

  }

  }
  协变返回的使用替换了三个反模式:
  • 直接字段访问。为了规避API限制,一些实现把子类直接暴露为字段:

        ZooImpl._animal
       另一种形式是,在知道实现的实际上是特定的子类的情况下,在调用程序中执行向下转换:



  

((AnimalImpl)ZooImpl.getAnimal()).implMethod();

  



      
  • 我看到的最后一种形式是一个具体的方法,该方法用来避免由一个完全不同的签名所引发的问题:


  

ZooImpl._getAnimal();

  这三种模式都有它们的问题和局限性。要么是不够整洁,要么就是暴露了不必要的实现细节。

  协变

  协变返回模式就比较整洁、安全并且易于维护,它也不需要类型强制转换或特定的方法或字段:

  public AnimalImpl getAnimal(){

  return new AnimalImpl();

  }

  使用结果:

  ZooImpl.getAnimal().implMethod();

参考:http://www.linuxpk.com/43834.html

posted @ 2007-10-23 17:15 lqx 阅读(750) | 评论 (0)编辑 收藏

怎样同时启动多个mysql?

启动mysql
nohup ./mysqld --basedir=/home/cvsadmin/mysql --datadir=/home/cvsadmin/mysql/data --port=3308 --socket=/tmp/mysqld3308.bak & 

登录mysql
./mysql -uroot -p --socket=/tmp/mysqld3308.bak

posted @ 2007-10-21 13:05 lqx 阅读(300) | 评论 (0)编辑 收藏

solaris 下怎么设置环境变量

sh:  
  variable=value  
  export   variable  
   
  csh:  
  setenv   variable   value

posted @ 2007-10-21 10:40 lqx 阅读(461) | 评论 (0)编辑 收藏

mysql 判断表是否存在

SHOW   TABLES   LIKE   '%tb_bp_d_case%';  
select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` where `TABLE_NAME`='res_mos_cpu_statistics'

posted @ 2007-10-20 14:58 lqx 阅读(3908) | 评论 (0)编辑 收藏

[收藏]Core JavaScript 1.5 Reference:Global Objects:RegExp

http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:RegExp

posted @ 2007-10-19 14:31 lqx 阅读(209) | 评论 (0)编辑 收藏

仅列出标题
共18页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last