文档库 最新最全的文档下载
当前位置:文档库 › 如何把JAVA程序封装成EXE文件

如何把JAVA程序封装成EXE文件

如何把JA V A 程序封装成EXE 文件

可以把普通的Java程序做成真正的exe,也就是单一个exe就可以在没有

安装JVM的机器上运行。这样的工具常见的有JET和gcj.前者是收费的,

而且做出来的exe还是需要一堆dll。推荐使用gcj.他有windows和Linux

版,直接下载zip包,不需要安装,里面有不少例子,一些build的批处

理文件。从原理来说gcj自己实现了JVM规范,也就是你编写一个

HelloWorld.java,其中的main方法为System.out.println("foo");

当使用gcj把它做成exe(大约2M),运行这个exe时,会启动里面的一个小

型jvm,在这上面跑HelloWorld。

其实,把Java做成纯exe实在是吃力不讨好,有很多限制,文件又大。

我比较倾向另几种做法:

. 使用InstallAnywhere等工具,制作一个exe的安装包

用户可以选择使用他机器上的JRE或是这个安装包内的JRE来运行程序

这是很常见的一种做法,如JBuilder就是这么做的。

这样的好处是不要求对方机器上装有JRE,而且你原来的程序不需要任何

改动。

InstallAnywhere中一个压缩的JRE大概是8M。

. 制作成可执行的jar,也就是在META-INF的MANIFEST文件制定

Main-Class

可以通过命令行java -jar jarfile.jar来执行,windows默认的把*.jar

使用javaw -jar打开,所以有些机器上可以直接双击jar运行。

. 制作伪exe,其实和上一种做法是一样的,只不过做成exe,调用系统的

java.exe来运行它,这样的工具有nativeJ,exe4j等

其实Java不像VB,Delphi只是一个语言,而是一个平台。

jar是最常用的部署单元,做成exe没什么意思。

一、exe4j。

说明:exe4j可以将Jar文件制作成exe文件,但需jre支持,也可将

Jar文件放在外面。

软件性质:共享软件

下载地址: 开始时间 2008-4-5 10:15

https://www.wendangku.net/doc/df13038235.html,/products/exe4j/overview.html

二、JBuilder。

说明:新版本的JBuilder可以直接把工程制作成各系统的可执行文

件,包括Windows系统。

软件性质:商业软件

下载地址:略。我是从eMule下载的。

三、NativeJ。

说明:与exe4j功能类似。

软件性质:共享软件

下载地址:

https://www.wendangku.net/doc/df13038235.html,/products/nativej/download.html

四、Excelsior JET。

说明:可以直接将Java类文件制作成exe文件,除AWT和Swing及第三方图形接口外可不需jre支持(Java5.0不行)。

软件性质:共享软件

下载地址:https://www.wendangku.net/doc/df13038235.html,/home.html

五、jshrink。

说明:可将Jar文件打包进exe文件。同时具有混淆功能(这才是它

的主要功能)。

软件性质:共享软件

下载地址:https://www.wendangku.net/doc/df13038235.html,/jshrink.html

六、InstallAnywhere。

说明:打包工具,对Java打包最好用。可打包成各操作系统运行包。

包括Windows系统。

软件性质:商业软件。

下载地址:https://www.wendangku.net/doc/df13038235.html,/

七、InstallShieldX。

说明:与InstallAnywhere类似,但比InstallAnywhere功能强大。

相对的,比较复杂,不易上手,我现在还没学会。

软件性质:商业软件。

下载地址:https://www.wendangku.net/doc/df13038235.html,/

【Java开源打包工具】

IzPack 是一个 Java 安装程序制作工具,能够制作一些简单的安装程序。制作出来的安装程序能在 Unix-like, MacOS X, Windows 等系统平

台上运行。

使用JSmooth将做好的JAR包装成EXE。

launch4j是Java应用程序的Windows本地可执行文件 (.exe) 封装器。提供了本地弹出屏幕,应用程序图标,JRE搜索或使用绑定的JRE,启动失

败反馈,传递命令行参数,ant脚本。

VAInstall是多平台的安装程序。你要包装起来的软件可以是可执行的 java class, Windows .EXE, Linux 可执行档,或者是 UNIX shell 档案。使用者可以选择四种安装的介面,graphic, xtra, text 或是 ansi。VAInstall 只需要很少的空间,他不会使用任何大的暂存档案,而且还

可以很容易使用反安装功能。

Toolshed是一个既小又简单的JAVA安装制作工具。

AntInstaller通过XML文件定义UI,用Ant做后台。所以ANT所能做的事情

AntInstaller同样也胜任。

eeInstaller能够把JAVA程序打包成多种平台下的应用程序比如UNIX Fr,

LINUX 和 Windows NT.

这个工具利用 ANT 来制作在 Windows, MacOS X, Unix 平台上可执行的文件,比如 exe,zip,jar。ROXES ANT Tasks 基于 GPL 发布。 Mini Installer是用来构建JAVA安装程序一个简单类包。整个过程以脚本为驱动,最后结果是一个独特的JAR文件。用户可以通过双击来执行一

个类似向导的安装过程。

Antigen (Ant Installer Generator)这个工具结合一个ANT构建脚本与一个GUI来把Java文件打包成可执行的Jar文件。它的主要目的是从Ant脚

本创造一个强大的图形安装工具。

Packlet是一个针对Java的简单安装工具。一个Packlet类似于一个zip或

tgz文件。它把应用程序打包成一个单一的可分解的压缩文件。Packlet

文件能够在任何有安装Java 2运行环境的机器上运行。

Java Service Wrapper可以把Java应用程序安装成一个Windows NT服务

或Unix Daemon.它同时还为应用程序提供日记功能,灵活的配置,可靠的

运行性能,按需求重新启动,简化应用程序的安装等,

Autojar帮助从不同的inputs(如:自身classes,外部文档等)制作最小的

文件。它从一个或多个给定的classes开始,依据字节码(bytecod

Jar e)

递归搜索相关联的classes,然后从input文档中提取这些Classes,并把

它们拷贝到output中. 最终的文档将只包含真正需要的classes. 因而

能够保持applet的大小并降低applet的加载时间或者让应用程序独立于

第三方类库。

MJAR(Managed Jar Framework)Java软件分发/打包框架。它允许在相同

VM内并行部署classloader分离的应用程序。MJAR使用Spring框架来管理

内部组件。

[最初发表于:2008-4-5 11:15]

主题回复

wfwbw 2008-4-5 10:25

1楼想要把java生成可执行文件需要第三方软件的支持,不过在没有安装JDK的机器上是不可能运行JAVA程序的,哪怕是编译成为exe文件。

将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)

1. 从https://www.wendangku.net/doc/df13038235.html,获得一个TowerJ编译器,该编译器可以将你的CLASS文件

编译成EXE文件。

2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以

从微软的网站免费下载,地址如下:

https://www.wendangku.net/doc/df13038235.html,/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编译器,该编译器可以从下面的 地址获得:

https://www.wendangku.net/doc/df13038235.html,/tech/hpc

6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个 测试版本:

https://www.wendangku.net/doc/df13038235.html,/jet.html

7. Instantiations公司的JOVE

https://www.wendangku.net/doc/df13038235.html,/jove/...ejovesystem.htm

JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede

已经不复存在了。

8. JToEXE

Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的

网页上免费下载的,不过目前在该公司的主页上找不到了。

wfwbw 2008-4-5 10:26

2楼

看到有同志的《将Java程序作成exe文件的几种方法》文章,写的不错,但是这篇文章完成的时间比较早,许多内容已经不合适了。我在这里补充几条:

一、exe4j。

说明:exe4j可以将Jar文件制作成exe文件,但需jre支持,也可将Jar文件放在外面。 软 下载地址:件性质:共享软件

https://www.wendangku.net/doc/df13038235.html,/products/exe4j/overview.html

的JBuilder可以直接把工程制作成各系统的可执行文件,包括Windows系性质:商业软件

eMule下载的。

http://www 二、JBuilder。

说明:新版本统。

软件 下载地址:略。我是从

三、NativeJ。

说明:与exe 软件性质:共享软件

下载地址:4j功能类似。

https://www.wendangku.net/doc/df13038235.html,/products/nativej/download.html

ava类文件制作成exe文件,除AWT和Swing及第三方图形接口外可不https://www.wendangku.net/doc/df13038235.html,/home.html

ar文件打包进exe文件。同时具有混淆功能(这才是它的主要功能)。 https://www.wendangku.net/doc/df13038235.html,/jshrink.html

ava打包最好用。可打包成各操作系统运行包。包括Windows系统。

载地址:https://www.wendangku.net/doc/df13038235.html,/

InstallAnywhere功能强大。相对的,比较复杂,会。

https://www.wendangku.net/doc/df13038235.html,/

吧。

某一个里面的某一个方法就够.

52bengbeng 2008-4-5 10:27

https://www.wendangku.net/doc/df13038235.html,/read.php?tid=46512

https://www.wendangku.net/doc/df13038235.html,/cgi- ... rum=1&topic=345

http://www 四、Excelsior JET。

说明:可以直接将J 需jre支持(Java5.0不行)。

软件性质:共享软件

下载地址:http://exc 五、jshrink。

说明:可将J 软件性质:共享软件

下载地址:http://www 六、InstallAnywhere。

说明:打包工具,对J 软件性质:商业软件。

下七、InstallShieldX。

说明:与InstallAnywhere类似,但比不易上手,我现在还没学 软件性质:商业软件。

下载地址:http://www.ins

好了,匆匆忙忙就想这么多,写的不好,大家勉强看

以上是关于这个问题,讨论最完整的两个版本, 楼主是需学习了3楼

https://www.wendangku.net/doc/df13038235.html,/s?wd=%b0%d1 ... e%c4%bc%fe&cl=3

工具还是比较多的

tuutoo 2008-4-5 11:43

4楼

我用过比较方便的还是Install any where

哈 不太会用。

张春光 2008-4-5 12:10

5楼

以上都是英文的,有没有中文的

wfwbw 2008-4-5 12:15

6楼

那楼主试试这个吧,好像只有这个有中文版: setup2go 是个很好用的安装制作程序,有载地址:

.9.11 汉化版

/1398.html

个教程:

https://www.wendangku.net/doc/df13038235.html,/u1/38994/showart_505987.html

张春光 2008-4-5 12:23

7楼

可不可以用JAVA 直接做成EXE 文件呢

Jet 也试过 但是纯英文的 感觉好复杂 哈中文版,且完全免费.

下Setup2Go v1https://www.wendangku.net/doc/df13038235.html,/soft

附http://blog

java对象转换String类型的三种方法

北大青鸟中关村 java对象转换String类型的三种方法在很多情况下我们都需要将一个对象转换为String类型。一般来说有三种方法可以实现:Object.toString()、(String)Object、String.valueOf(Object)。下面对这三种方法一一分析 一、采用Object.toString() toString方法是https://www.wendangku.net/doc/df13038235.html,ng.Object对象的一个public方法。在java中任何对象都会继承Object 对象,所以一般来说任何对象都可以调用toString这个方法。这是采用该种方法时,常派生类会覆盖Object里的toString()方法。 但是在使用该方法时要注意,必须保证Object不是null值,否则将抛出NullPointerException 异常。 二、采用(String)Object 该方法是一个标准的类型转换的方法,可以将Object转换为String。但是在使用该方法是要注意的是需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误。 代码代码如下: Object o = new Integer(100); String string = (String)o; 这段程序代码会出现https://www.wendangku.net/doc/df13038235.html,ng.ClassCastException: https://www.wendangku.net/doc/df13038235.html,ng.Integer cannot be cast to https://www.wendangku.net/doc/df13038235.html,ng.String。因为将Integer类型强制转换为String类型,无法通过。 三、String.valueOf(Object) 上面我们使用Object.toString()方法时需要担心null问题。但是使用该方法无需担心null值问题。因为在使用String.valueOf(Object)时,它会判断Object是否为空值,如果是,则返回null。下面为String.valueOf(Object)的源码: 代码代码如下: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 从上面我们可以看出两点:一是不需要担心null问题。二是它是以toString()方法为基础的。但是一定要注意:当object为null时,String.valueOf(object)的值是字符串对象:"null",而不是null!!!

java中什么是构造函数

java中类的构造函数到底有什么用 如题,例如一段代码 class point2{ int x,y; point2(int a,int b){//构造函数;含参的构造函数;构造方法必须要和类名一致 //且没有返回值 x=a; y=b; } void output(){ System.out.println(x); System.out.println(y); } public static void main(String args[]){//类的实例 point2 pt; pt=new point2(3,3);//声明实例变量;传递参数给构造函数的变量 pt.output();//实际上调用了类中的构造函数; } } 那么我不用构造函数,只声明成员变量是否可以直接代替构造函数,请详细解释构造函数的作用 满意回答 什么是构造函数,问的好。 开始的时候我也不理解为什么要构造函数。因为那时候的设计思想还停留在面向过程编程。即我要干什么事,这件事有几个步骤,然后我决定怎么干。 面向对象不是这么直接简单,它的设计思想就是要代码重用。即我以前干过类似的事,那么我找出以前可以用到的代码,完成一部分。以前没有的我重新写。这样就有了类。 回到你提的问题。有了类,就是有了可以重用的代码,但是我怎么产生这个对象呢。必须要实例化这个类(当然这不是唯一产生对象的途径,比如单例模式,但本质上说所有途径都是一样的)。那么就要用到构造函数。即告诉程序我现在要实例化一个对象了,你给我马上分配内存。将内存的首地址赋给我指定的类对象。而且有时候你需要传递参数到函数里面,有了构造函数就方便了,构造函数

可以有无数个。当然,传递参数到到对象里面也可以其它方法,比如直接赋一个值给成员变量,举例: class point2{ int x,y; point2(){ } point2(int a,int b){//构造函数;含参的构造函数;构造方法必须要和类名一致 //且没有返回值 x=a; y=b; } void output(){ System.out.println(x); System.out.println(y); } public static void main(String args[]){ point2 pt=new point2();//实例化对象,这时候x,y没有赋值,默认初始值为0; pt.output(); pt.x=3;pt.y=3; pt.output(); } } =============================================================================== ===============================================================================

java面向对象—封装详解

Java面向对象 面向对象 在Java中,高手们的概念就是万物皆对象。 面向对象的概念: 面向对象:是基于面向过程的一种思想。 面向过程:强调的是功能行为。 面向对象:将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的。 面向对象和面向过程: 图例:

面向对象特点: 1,面向对象就是一种常见的思想。符合人们的思考习惯。 2,面向对象的出现,将复杂的问题简单化。 3,面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。面试题:你怎么理解面向对象的? 1,它符合现在人们思考的一种习惯 2,它让我们复杂的事情简单化 3,让我们从曾经的执行都变为现在的指挥者 其实面试官你本身就在用面向对象的方式思考问题

因为以面试官您的能力而言,来了一个软件项目的话,您从需求分析到设计到开发到测试,都能完成,但是这样特别耗时间,所以您为了提高效率,您就需要 去找一些具备专业编程经验的人来完成这些项目,我正好就是那个具备专业编程经验的对象,您只要指挥我这个对象做事情就可以了,我会给您一个非常满意的 结果,至于过程您不用管。所以面试官您就在用面向对象的方式思考问题,来提高公司的效率,而我就是具备专业编程经验的人。 面向对象有三个特征:封装,继承,多态 以后的开发过程:其实就是找对象用。没有对象,就创建一个对象。 找对象,建立对象,使用对象,并维护对象的关系。 类和对象的关系: 类:就是对现实生活中事物的描述。 对象:就是这类事物,实实在在存在的个体。 想要描述:提取对象中共性内容。对具体的抽象。 映射到Java中描述就是class定义的类。 具体对象就是对应Java在堆内存中用new建立实体。 例子: 需求:描述小汽车。描述事物其实就是在描述事情的属性和行为。 分析: 1,属性:轮胎数。颜色。 2,行为:运行。 定义类其实就是在定义类中的成员。 成员:成员变量<-->属性,成员函数<-->行为。 属性对应是类中变量,行为对应的类中函数或方法。 其实定义类,就是在描述事物,就是在定义属性和方法,属性和行为共同成为类中的成员(成员变量和成员方法)。

《Java范例开发大全》

下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人

实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException)

Java中常见异常类型及分析

Java常见异常类型及原因分析 这里介绍几种常见的异常并对原因进行分析,包括: ●NullPointException异常; ● ClassCastException异常; ● ArrayIndexOutOfBoundsException异常; ●UnsupportedClassVersionError错误; ●NumberFormatExceptio异常 ●堆栈溢出和内存溢出。 1 NullPointException异常 顾名思义,NullPointerException是空指针异常。但是在Java中没有指针,怎么会有空指针异常呢? 在C++中,声明的指针需要指向一个实例(通过new方法构造),这个指针可以理解为地址。 在Java中,虽然没有指针,但是有引用(通常称为对象引用,一般直接说对象),引用也是要指向一个实例对象(通过new方法构造)的,从这种意义上说,Java中的引用与C++中的指针没有本质的区别,不同的是,处于安全的目的,在Java中不能对引用进行操作,而在C++中可以直接进行指针的运算,例如book++等。 所以这里的NullPointerException虽然不是真正的空指针异常,但本质上差不多,是因为引用没有指向具体的实例,所以当访问这个引用的方法的时候就会产生这种异常。例如下面的代码: String str = "这是一个测试用的字符串!"; System.out.println(str.length()); 这段代码没有问题,但是如果改成下面的代码: String str ; System.out.println(str.length()); 就会产生NullPointerException异常了,当然一般人不会犯这样低级的错误。 那这种异常通常是如何产生的呢?比较多见的是下面的两种情况: 1)把调用某个方法的返回值直接赋值给某个引用,然后调用这个引用的方法。在这种情况下,如果返回的值是null,必然会产生NullPointerException异常。例如: String userName=request.getParameter("userName"); if(userName.length()==0) ...... else ...... 如果request.getParameter("userName")的结果为null,则这里就会产生这种异常。 2)在方法体中调用参数的方法。这种情况下,如果调用方法的时候传递进来的值是null,也要产生NullPointerException异常。 要解决这种异常,只需要检查异常出现在第几行(通常在集成开发环境中会提示用户错误发生在第几行),然后查看调用了哪个对象的方法,然后检查这个对象为什么没有赋值成

如何用记事本编写一个简单的java代码

如何用记事本编写一个简单的j a v a代码 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

一:怎么用记事本写第一个java代码 第一步:新建txt文档 首先我们在F盘新建一个txt文档,并命名为,如下图所示: 第二步:编写代码 我们双击打开:如下图所示 第三步:编写好代码 我们在记事本中写代码,写好后如下所示:

然后我们同时按Ctrl+s键保存,然后关闭记事本即可 上面的源代码如下: public class Test{//这里的Test为类名,这里类名要与我们刚才新建的记事本的名字必须一致,首字母大写 public static void main(String[] args){//java中的主函数的写法 "HelloWorld");//java中的输出语句写法 } } 第三步:打开控制台界面 我们在计算机中,打开如下图界面,

然后在这里,输入cmd,并按回车,然后弹出如图所示

第四步:在控制台中运行并输出 我们用鼠标点击一下里面黑色部分,然后输入F:然后回车,然后再输入javac 然后回车,最后输入java Test,就可以看到结果了,如下图所示:

红色圈出来部分就是结果了 二:温馨提示: 1,上面演算中在控制台中首先输入F:的原因是因为我在F盘建立一个文本文档,并命名为,如果你是把你的文档文档建立在D盘,则应该输入D: 以此类推。 2,如果你是在F盘下的CH文件夹建立一个记事本,并命名为,则输入的情况如下, cd CH表示转到CH这个文件夹下,然后再输入回车,再输入java Test 就可以看到运行结果了

简析JAVA中int、String间类型转换

初学Java,对于类型转换以及强制类型转换还是没什么难度的,但是初学者往往在涉及到String类型的转换时,就会抛出问题了。这里收集整理了下,仅供参考。 int 转String int i=12345; String s=”"; 第一种方法:s=i+”"; 第二种方法:s=String.valueOf(i); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String转int s=”12345″; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue(); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? 以下是答案:

3.) String s = “” + i; 注: Double, Float, Long 转成字串的方法大同小异. JAVA数据类型转换这是一个例子,说的是JAVA中数据数型的转换.供大家学习package shenmixiaozhu; import java.sql.Date; public class TypeChange { public TypeChange() { } //change the string type to the int type public static int stringToInt(String intstr) { Integer integer; integer = Integer.valueOf(intstr); return integer.intValue(); } //change int type to the string type public static String intToString(int value) { Integer integer = new Integer(value); return integer.toString(); } //change the string type to the float type public static float stringToFloat(String floatstr) { Float floatee; floatee = Float.valueOf(floatstr); return floatee.floatValue(); } //change the float type to the string type public static String floatToString(float value) { Float floatee = new Float(value); return floatee.toString(); } //change the string type to the sqlDate type public static java.sql.Date stringToDate(String dateStr) { return java.sql.Date.valueOf(dateStr); } //change the sqlDate type to the string type

java基础知识点总结

Created by AIwen on 2017/5/14. java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。 实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。 java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。 返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。

如何写一个正确的JAVA程序

若在定义中出现了常数初始化字符,则大写基本类型标识符中地所有字母.这样便可标志出它们属于编译期地常数.个人收集整理勿做商业用途 包()属于一种特殊情况:它们全都是小写字母,即便中间地单词亦是如此.对于域名扩展名称,如,,或者等,全部都应小写(这也是和地区别之一).个人收集整理勿做商业用途() 为了常规用途而创建一个类时,请采取“经典形式”,并包含对下述元素地定义:() () () ()( ) () 对于自己创建地每一个类,都考虑置入一个(),其中包含了用于测试那个类地代码.为使用一个项目中地类,我们没必要删除测试代码.若进行了任何形式地改动,可方便地返回测试.这些代码也可作为如何使用类地一个示例使用.个人收集整理勿做商业用途() 应将方法设计成简要地、功能性单元,用它描述和实现一个不连续地类接口部分.理想情况下,方法应简明扼要.若长度很大,可考虑通过某种方式将其分割成较短地几个方法.这样做也便于类内代码地重复使用(有些时候,方法必须非常大,但它们仍应只做同样地一件事情). () 设计一个类时,请设身处地为客户程序员考虑一下(类地使用方法应该是非常明确地).然后,再设身处地为管理代码地人考虑一下(预计有可能进行哪些形式地修改,想想用什么方法可把它们变得更简单).个人收集整理勿做商业用途 () 使类尽可能短小精悍,而且只解决一个特定地问题.下面是对类设计地一些建议:■一个复杂地开关语句:考虑采用“多形”机制 ■数量众多地方法涉及到类型差别极大地操作:考虑用几个类来分别实现 ■许多成员变量在特征上有很大地差别:考虑使用几个类. () 让一切东西都尽可能地“私有”——.可使库地某一部分“公共化”(一个方法、类或者一个字段等等),就永远不能把它拿出.若强行拿出,就可能破坏其他人现有地代码,使他们不得不重新编写和设计.若只公布自己必须公布地,就可放心大胆地改变其他任何东西.在多线程环境中,隐私是特别重要地一个因素——只有字段才能在非同步使用地情况下受到保护.个人收集整理勿做商业用途 () 谨惕“巨大对象综合症”.对一些习惯于顺序编程思维、且初涉领域地新手,往往喜欢先写一个顺序执行地程序,再把它嵌入一个或两个巨大地对象里.根据编程原理,对象表达地应该是应用程序地概念,而非应用程序本身.个人收集整理勿做商业用途() 若不得已进行一些不太雅观地编程,至少应该把那些代码置于一个类地内部. () 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第章小节地“用内部类改进代码”).个人收集整理勿做商业用途() 尽可能细致地加上注释,并用注释文档语法生成自己地程序文档. () 避免使用“魔术数字”,这些数字很难与代码很好地配合.如以后需要修改它,无疑会成为一场噩梦,因为根本不知道“”到底是指“数组大小”还是“其他全然不同地东西”.所以,我们应创建一个常数,并为其使用具有说服力地描述性名称,并在整个程序中都采用常数标识符.这样可使程序更易理解以及更易维护.个人收集整理勿做商业用途 () 涉及构建器和异常地时候,通常希望重新丢弃在构建器中捕获地任何异常——如果它造成了那个对象地创建失败.这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续.个人收集整理勿做商业用途

java封装对象

package cn.itcast.introspector; import java.io.BufferedReader; /* 需求:编写一个工厂方法根据配置文件的内容,工厂方法返回对应的对象,并且把对象要有对应的属性值。 */ import java.io.FileReader; import https://www.wendangku.net/doc/df13038235.html,ng.reflect.Constructor; import https://www.wendangku.net/doc/df13038235.html,ng.reflect.Field; /* 以后我们开发框架的时候,我们是经常需要把一些数据封装到对象中的。 */ public class Demo1 { public static void main(String[] args) throws Exception { Person p = (Person) getInstance(); System.out.println(p); } //根据配置文件的内容生产对象的对象并且要把对象的属性值封装到对象中。

public static Object getInstance() throws Exception{ BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt")); String className = bufferedReader.readLine(); //读取配置文件获取到完整的类名。 Class clazz = Class.forName(className); //通过class对象获取到无参的构造方法 Constructor constructor = clazz.getConstructor(null); //创建对象 Object o = constructor.newInstance(null); //读取属性值 String line = null; while((line = bufferedReader.readLine())!=null){ String[] datas = line.split("="); //通过属性名获取到对应的Field对象。 Field field = clazz.getDeclaredField(datas[0]); if(field.getType()==int.class){ field.set(o, Integer.parseInt(datas[1])); }else{ field.set(o, datas[1]); } } return o; } }

看完这30个技巧让你写好Java代码

看完这30个技巧让你写好Java代码 2019.8整理 成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看代码编写的30条建议吧。 (1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如: 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。 Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。 (2) 为了常规用途而创建一个类时,请采取”经典形式”,并包含对下述元素的定义:

(3) 对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。 (4) 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。 (5) 设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。 (6) 使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议: ?一个复杂的开关语句:考虑采用”多形”机制 ?数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现 ?许多成员变量在特征上有很大的差别:考虑使用几个类 (7) 让一切东西都尽可能地”私有”–private。可使库的某一部分”公共化”(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素–只有private字段才能在非同步使用的情况下受到保护。 (8) 谨惕”巨大对象综合症”。对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原理,对象表达的应该是应用程序的概念,而非应用程序本身。 (9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。 (10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第14章14.1.2小节的”用内部类改进代码”)。 (11) 尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。

Java(1-4)复习题

《使用Java理解程序逻辑》1-4章阶段测试 一课后选择题 二、选择题 1、下列语句中,( BD )正确完成整形变量的声明和赋值。 A). int count,count=0; B). int count=0; C). count=0; D). int count1=0,count2=1; 2、在JAVA中,用于向控制台打印输出信息的语句是(A)。 A). System.out.println() B). System.println() C). Out.println() D). Print.println() 3、给定某Java程序的main方法如下所示,该程序的运行结果是( A)。Public static void main(String[] args){ int i=0; System.out.println(i ); } (选择一项)A A). 输出0 B). 输出1 C). 编译错误 D). 运行时出现异常 4、在Java 中,下列代码的远行结果是(D )。 public static void main(String[] args) { int a=1,b=2,c=3; if(a<0) if(b<0) c=10;

c=20; System.out.println(c); } A). 输出:10 B). 输出:20 C). 输出:3 D). 编译报错 5、在Java中,源文件Test.java中包括如下代码段,则程序编译运行结果是(b)。 public class Test{ public static void main(String[]args){ system.out.print(“Hello!”); } } A). a) 输出:Hello! B). b) 编译出错,提示“无法解析system” C). c) 运行正常,但没有输出任何内容 D). d) 运行时出现异常 6、在Java中,Scanner类提供从控制台获取键盘输入的功能,下列语句( b)能够正确实例化Scanner类的对象,用于获得键盘输入的数据。 A). Scanner input = new Scanner(System.out) B). Scanner input = new Scanner(System.in) C). Scanner input = new Scanner(System) D). Scanner input = new Scanner() 7、下面程序的执行结果是( c) public class Weather { public static void main(String[] args) { int shiDu=45; if(shiDu>=80){ System.out.println("要下雨了"); }else if(shiDu>=50){ System.out.println("天很阴"); }else if(shiDu>=30){ System.out.println("很舒适"); }else if(shiDu>=0){ System.out.println("很干燥");

《Java程序设计》题目样例

【题目样例】 一、单选题 1.下面哪个特性不是Java具有的(D )。 A、“纯”面向对象 B、安全性高 C、可移植性好 D、运行速度快 2.下面哪个类型是Java中不支持的(C )。 A、布尔类型 B、字符串 C、指针 D、数组 3.下面哪个不属于Java语言的关键字(B )。 A、native B、const C、final D、finally 4.下面关于数组的使用,不正确的是(C )。 A、int a[] = {1, 2, 3}; B、int a[][] = {{ 1, 2 }, { 3, 4} }; C、int a = new int[6] for (int i=0; i<6; i++) a[i] = i * i; D、int a[][] =new int[2][ ]; int a[1] = new int [4]; int a[2] = new int[5]; 5.应用程序的main方法中有以下语句,则输出的结果是(A )。 String obj = new String("abcxyz"); for(int i = obj.length() - 1; I > 0; i--) System.out.print(obj.charAt(i)); A、zyxcba B、xyz C、zyxcb D、abcxyz 6.下面函数,哪一组不属于方法重载(A )。 A、int fun(int a, int b, float c) { … } float fun(int b, int a, float c) { … } B、int fun(int a, int b) { … } int fun(int a, int a, float c) { … } C、int fun(int a) { … } int fun(int a, int b) { … } D、int fun(int a, float b) { … } int fun(float b, int a) { … } 7.若创建RandomAccessFile类对象raf2: RandomAccessFile raf2 = new RandomAccessFile("1.txt", "rw"),该语句的功能是(B )。 A、打开当前目录下的文件1.txt,但只能向文件写入数据,不能从文件读取数据。 B、打开当前目录下的文件1.txt,既可以向文件写入数据,也可以从文件读取数据。 C、打开当前目录下的文件1.txt,但不能向文件写入数据,只能从文件读取数据。 D、以上说法都不对。 8.应用程序main方法中有以下语句,则输出的结果是(A )。 String s = "java@123456@"; int n = s.indexOf("@"); int k = s.indexOf("@", 5); String s2 = s.substring(n + 1, k);

JAVA编程实例大全及详解答案(50例)

JA V A编程实例大全及详解答案(50例) 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count);

Java语言基本数据类型、转换及其封装

Java语言基本数据类型、转换及其封装Java语言基本数据类型、转换及其封装 1. 逻辑类型 ·常量 true,false。 ·变量的定义 使用关键字boolean来定义逻辑变量: boolean x; boolean tom_12; 也可以一次定义几个: boolean x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是变量的名字。定义时也可以赋给初值: boolean x=true,tom=false,漂亮=true,jiafei 2.整数类型 ·常量123,6000(十进制),077(八进制),0x3ABC(十六进制)。 ·整型变量的定义分为4种: 1.int 型 使用关键字int来定义int型整形变量 int x int tom_12 也可以定义几个: int x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: int x=12,tom=-1230,漂亮=9898,jiafei 对于int型变量,分配给4个字节byte,一个字节由8位(bit)组成,4个字节占32位(bit)。bit 有两状态,分别用来表示0,1。这样计算机就可以使用2进制数来存储信息了。内存是一种特殊的电子元件,如果把内存条放大到摩天大

楼那么大,那么它的基本单位——字节,就好比是大楼的房间,每个房间的结构都是完全相同的,一个字节由8个能显示两种状态的bit组成,就好比每个房间里有8个灯泡,每个灯泡有两种状态——亮灯灭灯。 对于 int x=7; 内存存储状态如下: 00000000 00000000 00000000 00000111 最高位:左边的第一位,是符号位,用来区分正数或负数,正数使用原码表示,最高位是0,负数用补码表示,最高位是1。例如: int x=-8; 内存的存储状态如下: 11111111 11111111 11111111 11111000 要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码。 因此,int型变量的取值范围是-2^31~2^31-1。 2. byte型 使用关键字byte来定义byte型整型变量 byte x ; byte tom_12; 也可以一次定义几个: byte x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: byte x=-12,tom=28,漂亮=98,jiafei 注:对于byte型变量,内存分配给1个字节,占8位,因此byte型变量的取值范围是: -2^7~2^7-1。

java简单图形用户界面代码

package dsr; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import https://www.wendangku.net/doc/df13038235.html,.Socket; public class Login extends JFrame implements ActionListener{ //定义组件 JPanel northPanel,southPanel,centerPanel,centerPanel1,centerPanel11,centerPanel12; JButton loginBtn,registerBtn,cancalBtn; JLabel userLbl,passwordLbl,titleLbl; JTextField userTxt; JPasswordField passwordPwd; static String name; public Login () { super("用户登录"); northPanel=new JPanel(); southPanel=new JPanel(); centerPanel1=new JPanel(); centerPanel11=new JPanel(); centerPanel12=new JPanel(); //标题 titleLbl=new JLabel("欢迎进入考试系统"); titleLbl.setFont(new Font("隶书",Font.BOLD,24)); northPanel.add(titleLbl); this.add(northPanel,BorderLayout.NORTH); //中间部分 centerPanel1.setLayout(new BorderLayout()); userLbl=new JLabel("用户名"); userTxt=new JTextField(12); centerPanel11.add(userLbl); centerPanel11.add(userTxt); centerPanel1.add(centerPanel11,BorderLayout.NORTH); passwordLbl=new JLabel("密码"); passwordPwd=new JPasswordField(12); centerPanel12.add(passwordLbl); centerPanel12.add(passwordPwd);

相关文档
相关文档 最新文档