-
最新日志
最新评论
- 中国博客网 发表于《Hello world!》
- 中博网友 发表于《中庸之道》
- 中博网友 发表于《jdk 1.5新特性说明》
- 中博网友 发表于《Oracle CHAR,VARCHAR,VARCHAR2类型的区别与使用》
- 中博网友 发表于《weblogic9.2配置说明》
存档页
分类
功能
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