如何编写java主函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写java主函数相关的知识,希望对你有一定的参考价值。
别鄙视我,我只是一个小菜鸟...
我想输出一个j2me应用,但我不知道怎么编写main class,求大侠帮帮我
作用:
由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。
各种语言示例:
C语言
按照C99标准的规定,C语言的main函数如下:
int main(
void)/*百度百科示例代码*///整数类型主函数(无类型)
或者
int main(intargc,
char*argv[])/*百度百科示例代码*///整数类型主函数(整数类型统计参数个数,字符类型*
数组指针至字符[])
C++语言
按照C++98标准和C++11标准的规定,C++语言的主函数如下:
int main()/*百度百科示例代码*///整数类型主函数
或者
int main(intargc,
char*argv[])/*百度百科示例代码*///整数类型主函数(整数类型统计参数个数,字符类型*
数组指针至字符[])
Java语言
Java语言规定主函数必须是这样的:
staticvoidMain(String[]args)//静态无类型主函数(字符串[]args)
//百度百科示例代码......
这样就可以传一些参数给main函数。 参考技术A Java是种面向对象的语言,可以说,Java所有一切都是对象,这句话很好的描述的Java和别的面向对象的编程语言,例如Object Pascl的区别。而且,这个特性,也对函数的参数传递有着重要的影响。
用过dephi的人都知道,在object Pascal中,函数的参数传递有两种方式,值传递和变参传递,简单的说,就是加不加var的区别。加了var,就是变参传递,实质上传递的是这个参数的指针,也就是说,在函数中对参数的任何修改,实际上就是参数对应的变量的修改,这样程序执行完后,作为参数传进来的变量的值可能发生改变。而不加var,则就是值传递,实质上,就是将值先拷贝一份,然后,将拷贝的传递给函数,这样,修改实际上对原来的变量没有影响,(因为只是对拷贝的修改)而且,等到函数返回时,函数调用的空间退栈,拷贝的参数空间也被收回。
而Java来说,由于所有的皆是对象,所以,参数传递有所不同。其中,没有了var的区别。但实际上,由于对象作为参数,也就是相当于var式传递,因为,传递给函数的是原对象的指针,这样,对传入的参数的修改,实际上就是作为参数的对象的修改,在这一点上,Java的参数传递实际上和var方式很象。但在简单数据类型做参数上,Java却是遵循值传递的原则,即在函数中修改不会对传入的简单数据类型的变量产生影响,比如象int类型的参数,即使函数中有过修改,也不会对传入的原变量有影响。由于这样,我们在对简单类型的变量作修改时(比如,想让它们作函数参数,然后在函数中修改它们),会误以为真的修改了变量,其实不然,知道值参的传递就会很容易明白这个道理。所以,我们需要将变量包装成一个对象(例如,设一个对象,以一个int值的变量作参数)这样,以此对象作参数,当在函数中对对象中的int变量修改后,原对象中的值便得到修改了。
由此,我们可以更加深入的看看递归函数的问题。递归函数通过不断的调用自身,其实在做一个不断的入栈然后出栈的过程,随着递归的进行,新递归函数不断的入栈,等到条件满足返回时,再不断的出栈。这样,对于值参的话,每次递归都要将其现在的数据保存到栈中,而变参,则只保存引用,所以,递归函数在不同的编程语言中的应用要相应的注意。比如,数组类型的数据,在object pascal中要定义数组类型的type,这样,每次递归时,实际上是将当前的数组参数作值参存储,即每次递归就要存储相应的数组,这样,每次递归过程实际上是对一个新的数组进行操作。而java就不同,它是以数组变量作参数,这样,每次的递归操作实际上是对同一个数组进行操作。由于有这样的不同,所以,需要在对数组改变后作还原操作,这样,每次才能正确地递归。
参考技术B 前面一帮人都是笨蛋,手机上的Java叫J2ME,你们了解过吗?就一堆main函数出来了?别在这里误人子弟!
楼主告诉你,J2ME的入口函数跟j2SE完全不一样,首先他必须引入包javax.microedition.midlet.MIDlet,然后使你的主类继承MIDlet,并实现其三个方法:startApp()、pauseApp()和destroyApp(boolean flag)。在startApp()中写入你初始化界面绘制类的代码,手机的JVM会自动调用此方法,然后开始游戏循环。
另外,j2se的所有包,在j2me上都不可用。你想开发j2ME,必须使用sun公司的WTK或者集成开发环境。
至于教程,网上多的是,自己搜索J2ME游戏开发,里面就会介绍到。
给个代码你参考一下:
// Source File Name: RPGMIDlet.java
package current;
import core.MapSpace;
import java.io.PrintStream;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
// Referenced classes of package current:
// RoleManger, CommComponent
public class RPGMIDlet extends MIDlet
public RPGMIDlet()
instance = this;
protected void startApp()
throws MIDletStateChangeException
if(display == null)
display = Display.getDisplay(this);
createManData();
screenClosed();
protected void pauseApp()
public void destroyApp(boolean flag)
public void createManData()
roleManger = new RoleManger();
instance.roleManger.initRole(1);
instance.roleManger.initRole(2);
instance.roleManger.initRole(3);
public void screenClosed()
mapspace = new MapSpace();
Thread t = new Thread(mapspace);
t.start();
public CommComponent getCommponent()
return commComponent;
public void quitApp()
System.out.println("over");
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
public static RPGMIDlet instance;
public RoleManger roleManger;
public CommComponent commComponent;
MapSpace mapspace;
Display display;
本回答被提问者采纳 参考技术C 恩 入口函数么
public static void main(String[] args)
//这里写代码
main函数的 static 和 void 是固定的,不能改。
参数String[] 数组也不能改,但是参数名args随意。
你写代码是不是没有用开发工具啊,main函数可以自动生成的追问
写=》手机《=软件啊~~~
嗯,我输出的jar文件在=》诺基亚《=上总无法安装...
String a = null;
a=c(b)+c(d);
System.out.println(a);
public String c (String d)
return d;
public static void main(String[] args)
ReadTest r = new ReadTest("运行","程序");
如何从 .java 文件制作 JAR?
【中文标题】如何从 .java 文件制作 JAR?【英文标题】:How do I make a JAR from a .java file? 【发布时间】:2012-04-14 00:56:57 【问题描述】:我正在使用具有单个框架的 Java 应用程序(不是具有项目的应用程序,而是项目内的应用程序;.java)编写一个简单的程序。这两个文件都是 .java 所以我无法编写 JAR 所需的 manifest。
MyApp.java 开始像一个带有包的类,然后导入公共类MyApp
并有一个主函数,但它仍然是.java 文件!如果有帮助,我会在 JDeveloper 11g 中编写它。
任何想法如何从这些文件制作 JAR?
【问题讨论】:
我认为这可以通过使用 ANT 或 Maven 等打包工具更轻松地完成 同意查克。看看蚂蚁。 IDE 非常适合开发,但您需要了解事物的工作原理。 java 文件通过 javac 编译成 .class 文件,之后可以使用 jar 命令将 .class 文件打包成 jar。 (Ant 有执行此操作的任务,甚至 jdeveloper 也有执行此操作的向导)。 JDeveloper 本身应该具有创建 jar 文件的能力。一个快速的谷歌搜索会在这里找到一个方法:tompeez.wordpress.com/2011/06/01/… 你能澄清你的问题吗? 转到源目录并运行命令:- javac *.java && jar cvf JarName.jar *.class 【参考方案1】:打开命令提示符。
转到您的 .java 文件所在的目录
创建目录构建
从命令行运行java编译
javac -d ./build *.java
如果没有错误,在构建目录中你应该有你的类树
移动到构建目录并做一个
jar cvf YourJar.jar *
用于添加清单检查 jar 命令行开关
【讨论】:
我尝试从命令行编译,但我得到一个错误:Frame1.java:23: package oracle.jdeveloper.layout 不存在我该如何解决?抱歉新手问题... 您必须构建引用您在类中引用的所有库的类路径。检查您的 jdeveloper 安装,应该有一些 ant 构建示例(build.xml 文件)和至少几个关于如何在 Oracle 网站上使用 jDeveloper 和 ANT 的好教程。 @user1303007 看这里oracle.com/technetwork/articles/adf/part4-098813.html 我在我的 jar 命令中添加了一个选项来自动将 Main-Class 添加到清单中...jar cfe Main.jar Main *
(虽然我很困惑,我不得不把 Main-输出文件名后的类名。)
我想指出:You have to move to build directory
。如果你尝试jar cvf YourJar.jar ./build/*
,你以后运行你的jar文件会有问题。【参考方案2】:
只需命令行:
javac MyApp.java
jar -cf myJar.jar MyApp.class
当然 IDE 避免使用命令行终端
【讨论】:
上述方法有效,但我需要指定 myApp 的.class
。所以是jar -cf myJar.jar myApp.class
这里也有拼写错误,它假定没有包声明。不够。【参考方案3】:
好的,这是我希望找到的解决方案,我在这里写它:
首先创建与为.java文件定义的包对应的目录结构,如果是my.super.application,则创建目录“my”,在其中创建“super”,在其中创建.java文件“App.java "
然后从命令行:
javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java
请注意,上面将包含多个库,如果在 windows 下使用“,”来分隔多个文件,否则在 GNU/Linux 下使用“:” 创建 jar 文件
jar -cvfe App.jar App my/app/
上面将创建应用程序,其对应的 Manifest 指示 App 作为主类。
使用 java 或 jar 命令行参数无法在 jar 文件中包含所需的库。
您可以改为:
-
手动解压库到jar文件的根目录
使用 Netbeans 等 IDE 并在 nbproject/build-impl.xml 的 post-jar 部分插入规则以提取 jar 中的库。见下文。
<target name="-post-jar"> <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> <jar jarfile="$dist.jar" update="true"> <zipfileset src="$dist.jar" includes="**/*.class" /> <zipfileset src="$file.reference.iText-1.0.8.jar" includes="**/*"/> <zipfileset src="$file.reference.itextpdf-3.2.1.jar" includes="**/*"/> </jar> </target>
将库添加到 Netbeans IDE 后,可以在 project.properties 文件中找到 file.reference 名称。
【讨论】:
【参考方案4】:您通常需要指定一个清单,如下所示:
jar -cvfm myJar.jar myManifest.txt myApp.class
内容为:“create verbose jarFilename manifestFilename”,后跟要包含的文件。详细意味着打印关于它正在做什么的消息。
请注意,您提供的清单文件的名称可以是任何名称,因为jar
会自动重命名它并将其放入 jar 文件中的正确目录中。
【讨论】:
【参考方案5】:这可以在没有终端的情况下直接从 IDE 完成。例如,Netbeans。
-
使用包创建一个单独的项目(创建项目 - Java - Java 类库)。
将您的 .java 类放在那里。
构建这个项目。
转到您的项目文件夹并在那里找到 build 和 dist 文件夹。
在 dist 文件夹中找到 .jar 文件。
获取您的其他项目并将此 .jar 文件添加到项目库中。
如果自动为您完成导入,您现在可以直接从代码中引用此库中的类及其方法。
【讨论】:
【参考方案6】:这是另一种奇妙的方法:
$ ls | grep .java | xargs -I javac ; jar -cf myJar.jar *.class
这将从当前目录中获取所有 .java 文件 (ls | grep .java
) 并将它们编译成 .class (xargs -I javac
),然后从之前编译的类 (jar -cf myJar.jar *.class
) 中创建 jar 文件。
【讨论】:
【参考方案7】:也许最适合初学者的从 Java 代码编译 JAR 的方法是使用 IDE(集成开发环境;本质上只是用于开发的用户友好型软件),例如 Netbeans 或 Eclipse。
安装和设置 IDE。 Here is the latest version of Eclipse。 在您的 IDE 中创建一个项目并将您的 Java 文件放入项目文件夹中。 在 IDE 中选择项目并将项目导出为 JAR。仔细检查导出时是否选择了适当的 java 文件。您始终可以使用命令行非常轻松地完成这一切。在执行如下命令之前,请确保您与目标文件位于同一目录中:
javac YourApp.java
jar -cf YourJar.jar YourApp.class
...将“YourApp”和“YourJar”分别更改为文件的正确名称。
【讨论】:
【参考方案8】:如果您有一个简单的主类(比如说 Count.class),并且想要一个带有指向该类作为入口点的 MANIFEST 文件的 jar,您可以这样做:
jar cfe app.jar Count Count.class
来源:https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
【讨论】:
以上是关于如何编写java主函数的主要内容,如果未能解决你的问题,请参考以下文章
用java编写的swing程序。如何在主界面中实现刷新的功能,就是让主界面的组件刷新