Category Archives: java基础

java 对象引用说明

给大家举个例子来说明一下java对象引用,也让大家平时在开发过程中多注意 Hashtable真的能存储对象吗? 看一看下面的很简单的代码,先是声明了一个Hashtable和StringBuffer对象,然后分四次把StriingBuffer对象放入到Hashtable表中,在每次放入之前都对这个StringBuffer对象append()了一些新的字符串: public class HashtableAdd{     public static void main(String[] args){         Hashtable ht = new Hashtable();         StringBuffer sb = new StringBuffer();         sb.append("abc,");         ht.put("1",sb);             sb.append("def,");         ht.put("2",sb);         sb.append("mno,");         ht.put("3",sb);         sb.append("xyz.");         ht.put("4",sb);         int numObj=0;         Enumeration it = ht.elements();         while(it.hasMoreElements()){             System.out.print("get StringBufffer "+(++numObj)+" from … Continue reading

Posted in java基础 | Leave a comment

java 类对象复制功能,clone()方法使用试例

/** 修改历史  *   日期               作者          修改内容  * -----------------------------------------------------------------------------  * 2009-2-6    李小强         创建CLASS  */ package org.leaderbird.clone; /**  * <p>Title:java 类对象复制功能,clone()方法使用试例</p>  * <p>Copyright: Copyright (c) 2009</p>  * <p>Company: 领头鸟科技全球信息咨询服务与解决方案提供商</p>  * @author 李小强  * <p>author E-Mail: lsl-120@163.com  * <p>http://leaderbird.blogcn.com  * <p>@version 2.1</p> * … Continue reading

Posted in java基础 | Leave a comment

Java内存泄露情况

 Java内存泄露情况   JVM回收算法是很复杂的,我也不知道他们怎么实现的,但是我只知道他们要实现的就是:对于没有被引用的对象是可以回收的。所以你要造成内存泄露就要做到:   持有对无用对象的引用!   不要以为这个很容易做到,既然无用,你怎么还会持有它的引用? 既然你还持有它,它怎么会是无用的呢?   我实在想不到比那个堆栈更经典的例子了,以致于我还要引用别人的例子,下面的例子不是我想到的,是书上看到的,当然如果没有在书上看到,可能过一段时间我自己也想的到,可是那时我说是我自己想到的也没有人相信的。 public class Stack { private Object[] elements=new Object[10]; private int size = 0;  public void push(Object e){  ensureCapacity();  elements[size++] = e;  }  public Object pop(){  if( size == 0)    throw new EmptyStackException();    return elements[--size]; } private void ensureCapacity(){ if(elements.length == size){  Object[] … Continue reading

Posted in java基础 | Leave a comment

J2EE应用中常见的反模式(anti-patterns)

J2EE应用中常见的反模式(anti-patterns)   J2EE应用中有一些常见的毛病和错误的观念,按照时下流行的说法,叫反模式。稍不注意,我们自己也会犯,所以大概整理一下,一个是备忘,也是供需要的朋友参考: 1- 无EJB不叫J2EE EJB一直发展到今天的3仍然被广为诟病,它提供了很多时候我们并不需要的东西,而且我们在很多情况下一旦选用EJB就没有其他的方式不去使用那些笨重的功能。但是很多所谓范例让我们有一种错觉,好像不用EJB就不是J2EE应用。有一些折中的方案是使用Session Fa?ade模式,Entity Bean采用BMP + 本地接口,然后提供一层无状态的Session Bean,采用远程和本地接口,这样的设计模式,我想,多半是出于无奈。如今,甚至我们经常都能看到不使用EJB的言帘卷西风论,炒得很火的Spring则为这种完全不用EJB开发J2EE项目提供了实际的、强有力的佐证。 2- 过度分层 J2EE这个规范肤浅的来看,就是为我们定义了很多“层”,然后还有很多分工明确的“角色”,加上J2EE的蓝本应用程序就分了很多“层”,以至于大家都觉得J2EE的应用就应该是很多层的,其实不然,需要具体情况具体分析。 3- 频繁的往返调用 EJB的看似简单造成我们经常忽略可能在使用过程中出现的远程调用,比如有时候为了更新一条记录,每个字段都是远程的去set,大大增加了不必要的开销,于是我们意识到在调用中使用DTO是一个建议遵循的方案。 4- 过度使用有状态的Session Bean 一般来讲,一个Session Bean实例,如果它是有状态的,那么它只对某个固定的用户服务,如果是无状态的,则可以满足不同用户的调用。这有点类似(只是有点类似)一个类的静态方法和非静态方法的区别。我们在实际应用中,应该尽量避免使用有状态的Session Bean,除非特别必要。我们可以把状态保留在Session Bean之外,如Web容器的session对象或者我们自定义的类中,而不是完全依赖有状态的Session Bean去帮我们做。 5- 过度会话 Web容器的session对象是个好东西,用起来也很方便和直截了当,这造成了我们很多人对它的滥用,什么东西都往里面放。这有两个突出的问题,一个是资源浪费;另一个,万一Web服务器崩溃,那些本来需要持久化的数据就丢失了。我们需要考虑好,哪些数据本可以用request的,哪些数据又是需要持久化到数据库的,等等,不能一味依赖session。 6- 万能Servlet或者万能JSP J2EE为我们提供了Web层丰富的技术选择,Servlet或者JSP都只是其中一种,虽然它很强大,但是也不应该由它一个来承担所有MVC三个部分的功能。现实中我们的Struts很好的规范了这个问题:Servlet负责调度,专门的Action负责处理逻辑,而JSP用于用户界面显示。JSP和Servlet本质上是同一个东西,只是从不同的角度来处理问题,它们各有所长,互为补充。

Posted in java基础 | Leave a comment

findbugs 插件使用

[转]FindBugs:Eclipse插件 官方网站:http://findbugs.sourceforge.net/ Eclipse插件:http://findbugs.sourceforge.net/downloads.html   插件管理技巧   提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去。 1.       前提是你已经安装好了Eclipse工具了,比如安装在E:OpenSourceEclipse目录下,以下这个目录以%ECLIPSE_HOME%来进行表示; 2.       此时默认的插件是在%ECLIPSE_HOME%plugins目录中的; 3.       在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;比如:E:OpenSourceEclipsePlugInsNew 4.       你下载了个新的插件,比如叫做:XYZ  那么就在%ECLIPSE_HOME%PlugInsNew目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:    5.       把下载的新插件的文件放在以下相应目录中 %ECLIPSE_HOME%PlugInsNewXYZeclipsefeatures %ECLIPSE_HOME%PlugInsNew XYZeclipseplugins 6.       建立相关的.link的文件 然后在%ECLIPSE_HOME%links目录里建立一个XYZ.link的文件 内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。 当然,采用相对路径来表示可能更直观一些,方便进行文件整体移动和小组全部成员的共享命名用,省得移动后要改动Link文件里的绝对路径而费心费力。直接拷贝过去就可以使用。 即XYZ.link文件的内容如是:path=../PlugInsNew/XYZ 这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中; 如果你的%ECLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径 7.       删除,关闭Eclipse 删除%ECLIPSE_HOME%linksXYZ.link文件即可 删除%ECLIPSE_HOME%PlugInsNewXYZ整个目录及文件 8.       重新启动Eclipse即可   使用   重新启动Eclipse后,在Help => About Eclipse SDK … Continue reading

Posted in java基础 | Leave a comment

jndiname 说明

java:comp/env和JNDI是不同的,很多人都有一些混淆,甚至认为这个就是JNDI名称。其实,java:comp/env   是环境命名上下文(environment   naming   context(ENC),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题。比如你要把一个EJB的Jar包部署到两台Server,而这两台Server共享一台JNDI名字空间,此时问题就出来了,因为JNDI名字空间要求JNDI名字必须唯一。使用ENC查找,将可以避免这个冲突,EJB或者J2EE应用的移植性也提高了。         ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置(   JNDI   名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。   在J2EE中的引用常用的有:         ---------JDBC   数据源引用在   java:comp/env/jdbc   子上下文中声明       ---------JMS   连接工厂在   java:comp/env/jms   子上下文中声明   … Continue reading

Posted in java基础 | Leave a comment

Jacob处理Word文档的方法

Jacob处理Word文档的方法   7.4  使用Jacob来处理Word文档 Word或Excel程序是以一种COM组件形式存在的。如果能够在Java中调用Word的COM组件,就能使用它的方法来获取Word文档中的文本信息。目前网上有许多提供这样的工具。 7.4.1  Jacob的下载 Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为: http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368。本书采用的是jacob_1.11_zip。解压下载的Jacob_1.11_zip文件后,如图7-17所示。 图7-17  Jacob包解压后的内容 7.4.2  在Eclipse中配置 (1)将jacob.jar导入工程的Build Path,然后确认自己机器的CPU类型(X86或AMD64),并选择不同目录下的jacob.dll文件。 (2)将jacob.dll放到%JAVA_HOME%jrebin目录下,其中,%JAVA_HOME%就是JDK的安装目录。注意这个的jre目录必须是Eclipse当前正在使用的目录,在Eclipse中选择“window->Preferences”菜单,在弹出的对话框中选择“Java->Installed JREs”项,如图7-18所示。                                                                          图7-18  Eclipse中JRE设置的对话框 (3)当前选择的JRE是“C rogram FilesJavajdk1.5.0_07jre”目录下的,所以需要把jacob.dll复制到“C rogram FilesJavajdk1.5.0_07jrebin”目录下面。 (4)在工程中新建一个ch7.jacob包,并在包中创建WordReader类。该类将提供一个静态的extractDoc()方法。它接收两个参数,一个是要处理的DOC文件名,另一个则是输出的文件名,然后通过JNI调用Word的API转换内容,该函数的代码如下。 代码7.10 public static void extractDoc(String inputFIle, String outputFile) {    boolean … Continue reading

Posted in java基础 | Leave a comment

java 调用系统指令并记录执行过程信息

/**   * 执行指定的指令   * @param str指令内容   * @return 执行情况。true表示:执行成功;false;执行失败   * @author 李小强   * <p>author E-Mail: lsl-120@163.com   * <p>author http://leaderbird.blogcn.com   */  public static boolean exec(String str){   Runtime runtime = Runtime.getRuntime();   try {    Process process … Continue reading

Posted in java基础 | Leave a comment

java 复制文件实例

/** 修改历史  *   日期               作者          修改内容  * -----------------------------------------------------------------------------  * 2009-1-21    李小强         创建CLASS  */ package com.leader.lop.file; import java.io.FileOutputStream; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; /**  * Title:领头鸟咨询,带领您率先进入未来世界  * Copyright: Copyright (c) 2009  * @Company: 领头鸟咨询 *  * @author 李小强  * @E-Mail: lsl-120@163.com http://leaderbird.blogcn.com … Continue reading

Posted in java基础 | Leave a comment

用commons-email-1.1.jar实现发邮件功能:

用commons-email-1.1.jar实现发邮件功能:   今天在Apache网站上下载commons-lang jar文件时突然看到commons-email-1.1.jar这个项目jar文件,看了看user guide确实比JDK提供的好多了,简单的几行代码就实现了发邮件的功能,以前实现过一个纯JavaMail带附件发邮件功能,代码复杂不说,现在回过头来都懒得看(主要是WEB项目注释少)。     贴上TEST代码看看,简单、清晰。只要稍加修改(邮件服务器地址、名称、密码)就可以了   简单邮件的发送: package com.bulktree.mail; import java.util.Date; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail;  public class SimpleMailTest {   publicstaticvoid main(String[] args) throws EmailException {      SimpleEmail email = new SimpleEmail();        //设置发送主机的服务器地址        email.setHostName("smtp.163.com");        //设置收件人邮箱 … Continue reading

Posted in java基础 | Tagged , | Leave a comment