博文

将JAVA编译为EXE的几种方法(2006-04-19 19:46:00)

摘要:将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET) 
  1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。
 
  2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:http://www.microsoft.com/java/download/dl_sdk40.htm 
  jexegen的语法如下: 
jexegen /OUT:exe_file_name 
/MAIN:main_class_name main_class_file_name.class 
[and other classes] 
  3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。
 
  4. 使用InstallAnywhere创建安装盘。 

  5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得: 
  http://www.alphaworks.ibm.com/tech/hpc
 
  6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本: 
  http://www.excelsior-usa.com/jet.html
 
  7. Instantiations公司的JOVE
  http://www.instantiations.com/jove/...ejovesystem.htm 
  JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede已经不复存在了。
 
  8. JToEXE 
  Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。......

阅读全文(3936) | 评论:0

java问题集合(2006-04-18 11:19:00)

摘要://问题1 class SS
{
//private  Singleton
///obj = new Singleton();
public  int counter1;
public  int counter2 = 0;
 public  SS() {
counter1++;
counter2++;
}
/*public static Singleton getInstance()
{
return obj;
} */
public static void main(){
 SS obj = new SS();
 System.out.println(obj.counter1);
 System.out.println(obj.counter2);
}
}   // main()未定义数组 //反编译命令是C:>javap -c -classpath . Singleton   //请高手留贴说明为什么运行不了   //问题2 public class AA{
 public static void main(String args[]){
  
  CC cc=new CC();
  System.out.println(cc.toString());
  }
 }
 
 
 class BB{StringBuffer output=new StringBuffer("?);
 public String toString(){
  return output;
  }
 
  }
 
 
 class CC extends BB{
&n......

阅读全文(1574) | 评论:0

java 通过jdbc连接sql server数据库的常见问题(2006-04-15 11:18:00)

摘要:在通过jdbc连接SQL Server经常回出现[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket,
原因如下:
1,通过url连接的时候指定的服务器名称或者服务器地址不正确,这一点你可以通过ping来验证。
2,指定的服务器上的sql server的服务没有启动,你可以通过sql server的查询工具来验证这个问题。
3,指定端口错误,sql server的默认端口是1433。
4,sql server没有提供tcp/ip的服务,你可以通过sql server的管理工具来查看这个问题。

5,如果你的系统是 windows XP 或者 Windows 2003,那么你的sql server一定要升级到sp3以上.

解决了如上问题一般就不会出现连接问题了。
......

阅读全文(5980) | 评论:2

你的Blog价值几何?(2006-04-15 11:08:00)

摘要:最近发现一个测试你的Blog在互联网中的影响力的工具,以前也看过一些类似的网站,姑且做个总结吧。 PageRank Tool:http://www.seochat.com/seo-tools/future-pagerank/,测试你的Blog的PR值,支持代码放在你的Blog里,方便你知道自己的Blog的PR值的变化。 How Much Is My Blog Worth:http://www.business-opportunities.biz/projects/how-much-is-your-blog-worth/,让你了解你的blog值多少钱,这个是由 Technorati 的反向连接来计算你的Blog值多少钱的东东。支持代码放在你的Blog里,方便你知道自己的Blog的价值的变化。 Bloginfluence:http://www.bloginfluence.net/,测试你的Blog在互联网中的影响力,它的计算方法为: [(blog+posts+web links) + (bloglines subs * 2)] * 1+(Pagerank/10) [(blog+文章数+反向链接数) + (bloglines订阅数* 2)] * 1+(GooglePR值/10) 。 支持两种代码放在你的Blog里,方便你知道自己的Blog的影响力的变化。 博客网址价值评估工具:http://www.anyp.cn/value,这是由国内的 博易 提供的,根据Alexa排名、各大搜索引擎搜索记录数、RSS订阅数进行综合评估。 我发现这些结果都有些浮动性,大家权当一乐吧。......

阅读全文(4592) | 评论:0

各种排序算法java实现 (2006-04-15 02:56:00)

摘要: 插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil;
/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class InsertSort implements SortUtil.Sort{     /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        int temp;
        for(int i=1;i<data.length;i++){
            for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
                SortUtil.swap(data,j,j-1);
            }
        }       
&......

阅读全文(3908) | 评论:2

java数据类型转换(2006-04-15 02:31:00)

摘要:一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double型之间的转换,整数和String类型之间的转换,以及处理、显示时间方面的问题等。下面笔者就开发中的一些体会介绍给大家。

       我们知道,Java的数据类型分为三大类,即布尔型、字符型和数值型,而其中数值型又分为整型和浮点型;相对于数据类型,Java的变量类型为布尔型boolean;字符型char;整型byte、short、int、long;浮点型float、double。其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围。此外,我们还经常用到两种类变量,即String和Date。对于这些变量类型之间的相互转换在我们编程中经常要用到,在下面的论述中,我们将阐述如何实现这些转换。

1 数据类型转换的种类
   java数据类型的转换一般分三种,分别是:
   (1). 简单数据类型之间的转换
   (2). 字符串与其它数据类型的转换
   (3). 其它实用数据类型转换
   下面我们对这三种类型转换分别进行论述。
2 简单数据类型之间的转换
   在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为
(byte,short,char)--int--long--float--double
    简单数据类型之间的转换又可以分为:
   ●低级到高级的自动类型转换
   ●高级到低级的强制类型转换
   ●包装类过渡类型能够转换
2.1自动类型转换
   低级变量可以直接转换为高级变量,笔者称之为自动类型转换,例如,下面的语句可以在Java中直接通过: byte b;
int i=b;
long l=b;
float f=b;
double d=b;     如果低级类......

阅读全文(5701) | 评论:1

漫谈Java程序设计中的接口应用(2006-04-15 02:14:00)

摘要:  大多数人认为,接口的意义在于顶替多重继承。众所周知Java没有c++那样多重继承的机制,但是却能够实现多个接口。其实这样做是很牵强的,接口和继承是完全不同的东西,接口没有能力代替多重继承,也没有这个义务。接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。Java的精髓,我认为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

   设计模式中最基础的是工厂模式(Factory),在我最近的一个很简单的应用中,我想尽量的让我的程序能够在多个数据库间移植,当然,这涉及很多问题,单是如何兼容不同DBMS的SQL就让人头痛。我们不妨先把问题简单化,只考虑如何连接不同的数据库。

   假设我有很多个类,分别是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他们分别连接不同的数据库,统一返回一个Connection对象,并且都有一个close方法,用于关闭连接。只需要针对你的DBMS,选择不同的类,就可以用了,但是我的用户他会使用什么数据库?我不知道,我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:


   package org.bromon.test;
   public interface DB
   {
   java.sql.Connection openDB(String url,String user,String password);
   void close();
   }



   这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实现这个接口的类来给出,比如Mysql.java:


   Package org.bromon.test;
   import java.sql.*;
   public class Mysql implements DB
   {
   private String url......

阅读全文(3265) | 评论:0

抽象类和接口的区别(2006-04-15 02:01:00)

摘要: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 

理解抽象类 

      abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 

    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 

    在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的......

阅读全文(3674) | 评论:0

java中的对象序列化(2006-04-15 00:30:00)

摘要:java对象序列化机制一般来讲有两种用途:
1.需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态
2.使用套接字在网络上传送对象的程序来说,是很有用的。
  我们通过让类实现java.io.Serializable 接口可以将类序列化。这个接口是一个制造者(marker)接口。也就是说,对于要实现它的类来说,该接口不需要实现任何方法。它主要用来通知Java虚拟机(JVM),需要将一个对象序列化。
  对于这个,有几点我们需要明确:
1.并非所有类都可以序列化,在cmd下,我们输入serialver java.net.socket,可以得到socket是否可序列化的信息,实际上socket是不可序列化的。
2.java有很多基础类已经实现了serializable接口,比如string,vector等。但是比如hashtable就没有实现serializable接口。
  将对象读出或者写入流的主要类有两个: ObjectOutputStream与ObjectInputStream 。ObjectOutputStream 提供用来将对象写入输出流的writeObject方法, ObjectInputStream提供从输入流中读出对象的readObject方法。使用这些方法的对象必须已经被序列化的。也就是说,必须已经实现Serializable接口。如果你想writeobject一个hashtable对象,那么,会得到一个异常。
  下面举个例子:
  import java.io.*;

public class testser implements Serializable {
  public       int    ii;
  
  testser()
  {
  
  }

  ......

阅读全文(4271) | 评论:2

Java服务器端编程安全必读(2006-04-15 00:29:00)

摘要:一、概述   编写安全的Internet应用并不是一件轻而易举的事情:只要看看各个专业公告板就可以找到连续不断的安全漏洞报告。你如何保证自己的Internet应用不象其他人的应用那样满是漏洞?你如何保证自己的名字不会出现在令人难堪的重大安全事故报道中?   如果你使用Java Servlet、JavaServer Pages(JSP)或者EJB,许多难以解决的问题都已经事先解决。当然,漏洞仍有可能出现。下面我们就来看看这些漏洞是什么,以及为什么Java程序员不必担心部分C和Perl程序员必须面对的问题。   C程序员对安全漏洞应该已经很熟悉,但象OpenBSD之类的工程提供了处理此类问题的安全系统。Java语言处理这类问题的经验要比C少20年,但另一方面,Java作为一种客户端编程语言诞生,客户端对安全的要求比服务器端苛刻得多。它意味着Java的发展有着一个稳固的安全性基础。   Java原先的定位目标是浏览器。然而,浏览器本身所带的Java虚拟机虽然很不错,但却并不完美。Sun的《Chronology of security-related bugs and issues》总结了运行时环境的漏洞发现历史。我们知道,当Java用作服务器端编程语言时,这些漏洞不可能被用作攻击手段。但即使Java作为客户端编程语言,重大安全问题的数量也从1996年的6个(其中3个是相当严重的问题)降低到2000年的1个。不过,这种安全性的相对提高并不意味着Java作为服务器端编程语言已经绝对安全,它只意味着攻击者能够使用的攻击手段越来越受到限制。那么,究竟有哪些地方容易受到攻击,其他编程语言又是如何面对类似问题的呢?   二、缓存溢出   在C程序中,缓存溢出是最常见的安全隐患。缓存溢出在用户输入超过已分配内存空间(专供用户输入使用)时出现。缓存溢出可能成为导致应用被覆盖的关键因素。C程序很容易出现缓存溢出,但Java程序几乎不可能出现缓存溢出。   从输入流读取输入数据的C代码通常如下所示:   char buffer[1000];   int len = read(buffer);      由于缓存的大小在读入数据之前确定,系统要检查为输入保留的缓存是否足够是很困难的。缓存溢出使得用户能够覆盖程序数据结构的关键部分,从而带来了安全上的隐患。有经验的攻击者能够......

阅读全文(3645) | 评论:0