如何编写java主函数

2024-11-29 16:48:42
推荐回答(5个)
回答1:

  一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数。主函数意味着建立一个独立进程,且该进程成为了程序的入口,对其它各函数(在某些OOP语言里称作方法,比如Java)进行调用,当然其它被调用函数也可以再去调用更多函数.......这样整个程序的运行轨迹就像一种栈,有时我们称之为调用栈。主函数既是程序的入口,又是程序的出口,通常我们还可以指定一个exit code再退出,以表明程序最后的结果是什么样的。
  作用:
  由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。
  各种语言示例:

  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函数。

回答2:

Java是种面向对象的语言,可以说,Java所有一切都是对象,这句话很好的描述的Java和别的面向对象的编程语言,例如Object Pascl的区别。而且,这个特性,也对函数的参数传递有着重要的影响。
用过dephi的人都知道,在object Pascal中,函数的参数传递有两种方式,值传递和变参传递,简单的说,就是加不加var的区别。加了var,就是变参传递,实质上传递的是这个参数的指针,也就是说,在函数中对参数的任何修改,实际上就是参数对应的变量的修改,这样程序执行完后,作为参数传进来的变量的值可能发生改变。而不加var,则就是值传递,实质上,就是将值先拷贝一份,然后,将拷贝的传递给函数,这样,修改实际上对原来的变量没有影响,(因为只是对拷贝的修改)而且,等到函数返回时,函数调用的空间退栈,拷贝的参数空间也被收回。
而Java来说,由于所有的皆是对象,所以,参数传递有所不同。其中,没有了var的区别。但实际上,由于对象作为参数,也就是相当于var式传递,因为,传递给函数的是原对象的指针,这样,对传入的参数的修改,实际上就是作为参数的对象的修改,在这一点上,Java的参数传递实际上和var方式很象。但在简单数据类型做参数上,Java却是遵循值传递的原则,即在函数中修改不会对传入的简单数据类型的变量产生影响,比如象int类型的参数,即使函数中有过修改,也不会对传入的原变量有影响。由于这样,我们在对简单类型的变量作修改时(比如,想让它们作函数参数,然后在函数中修改它们),会误以为真的修改了变量,其实不然,知道值参的传递就会很容易明白这个道理。所以,我们需要将变量包装成一个对象(例如,设一个对象,以一个int值的变量作参数)这样,以此对象作参数,当在函数中对对象中的int变量修改后,原对象中的值便得到修改了。
由此,我们可以更加深入的看看递归函数的问题。递归函数通过不断的调用自身,其实在做一个不断的入栈然后出栈的过程,随着递归的进行,新递归函数不断的入栈,等到条件满足返回时,再不断的出栈。这样,对于值参的话,每次递归都要将其现在的数据保存到栈中,而变参,则只保存引用,所以,递归函数在不同的编程语言中的应用要相应的注意。比如,数组类型的数据,在object pascal中要定义数组类型的type,这样,每次递归时,实际上是将当前的数组参数作值参存储,即每次递归就要存储相应的数组,这样,每次递归过程实际上是对一个新的数组进行操作。而java就不同,它是以数组变量作参数,这样,每次的递归操作实际上是对同一个数组进行操作。由于有这样的不同,所以,需要在对数组改变后作还原操作,这样,每次才能正确地递归。

回答3:

前面一帮人都是笨蛋,手机上的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;
}

回答4:

恩 入口函数么

public static void main(String[] args) {
//这里写代码
}

main函数的 static 和 void 是固定的,不能改。
参数String[] 数组也不能改,但是参数名args随意。

你写代码是不是没有用开发工具啊,main函数可以自动生成的

回答5:

public ReadTest(String b ,String d){
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("运行","程序");
}