`
wanwok
  • 浏览: 31296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

j2se工程中有多个main()方法

阅读更多
   [color=cyan] 学习java以来,都是按照书上的一些例子,做一些练习。写的东西都是按照书上说的思路,所以很少发现工程方面的问题。
    最近在做一个网站的维护,我发现他们的源码里,很多的类都写了main()方法。这些类的一个特点都是在工程启动的时候就需要加载的,而且main()方法的作用也差不多是执行一下当前类的构造函数。
    按照自己的理解,一个工程一般只有一个main()方法,没有必要写多个主方法。但由于代码是高人所写,所以让我觉得很不好理解的。希望知道的朋友帮忙指点哈子。
[/color]
分享到:
评论
10 楼 wanwok 2008-05-22  
现在我也觉得应该是做测试做的.
9 楼 魔力猫咪 2008-05-20  
好像是给类做初始化。不过怎么调用这个实例呢?实例变量是Main的临时变量。有没有调用Main的代码?
8 楼 wanwok 2008-05-20  
先贴一个吧.要不然把贴子拉的太长了
7 楼 wanwok 2008-05-20  
public class GetRealData extends Thread {
  private DatagramSocket datasocket=null;//udp socket 对象
  private Vector vectStore=null;//未保存的实时数据Vector
  private Vector vectProcess=null;//未处理的实时数据Vector

  private RunLog runlog=new RunLog();
  private LogInfo loginfo=new LogInfo("RealAnalyze");

  //构造函数
  public GetRealData(Vector vctStore,Vector vctProcess) {
    this.vectStore=vctStore;
    this.vectProcess=vctProcess;
    init();
  }
  public static void main(String[] args) {
    Vector  vect=new Vector(10);
    Vector  vect1=new Vector(10);
    GetRealData getRealData1 = new GetRealData(vect,vect1);
  }

  //线程主程序
  public void run(){
    //upd 数据包
    DatagramPacket p = null;

    //保存实时数据
    byte[]  bt=new byte[4096];

    //初始化upd 包的缓冲区
    try {
      byte[] buf = new byte[datasocket.getReceiveBufferSize()];
      p = new DatagramPacket(buf, buf.length);
    }
    catch (SocketException ex1) {
      loginfo.setFatal("getrealData 初始化socket数据时发生SocketException错误"+ex1.getMessage());
    }
//    RandomAccessFile fl=null;
//    try {
//      fl = new RandomAccessFile("c://test1.txt","rwd");
//    }
//    catch (Exception ex2) {
//    }
    //保存数据的长度
   // System.out.println("start");
    int datleng=0;
    //变量
    int i=0;
    while(true){
      try {
        //接收数据包
    // System.out.println("start1");
        datasocket.receive(p);
        //System.out.println("start2");
        //得到udp数据包
        bt=p.getData();
        //得到udp数据包长度
        datleng=p.getLength();
        //把接收到的数据前面为0的数据去掉
        for(i=0;i<datleng;i++){
            if(bt[i]>0) break;
        }

vectProcess.add(new String(bt,i,datleng-i,"gb2312"));
        try {
          loginfo.setDebug(new String(bt, i, datleng - i, "gb2312"));
        }
        catch (UnsupportedEncodingException ex3) {
        }
      }
      catch (IOException ex) {
        loginfo.setFatal("接收socket时发生IOException错误:"+ex.getMessage());
      }
      catch(Exception ex){
        loginfo.setFatal("接收socket时发生不明错误:" +
                           ex.getMessage());
      }

      //等待
      try {
        sleep(2);
      }
      catch (InterruptedException ex2) {
      }
    }
  }


  //初始化udp侦听,端口号
  private boolean init(){
    try {
      int iport=getPort();
      if(iport==0){
        loginfo.setFatal("取UDP侦听端口号出错!");
        return false;
      }
      //设置端口号
      datasocket = new DatagramSocket(iport);
      //设置缓冲池
      datasocket.setReceiveBufferSize(4096);
    }
    catch (SocketException ex) {
      loginfo.setFatal("初始化socket时发生SocketException错误:" + ex.getMessage());
      return false;
    }
    return true;
  }

  //从配置文件中读取端口号
  private int getPort(){
    try {
      SAXBuilder sb = new SAXBuilder();
      Document doc = null;
//     doc = sb.build(getClass().getResourceAsStream("config/realconf.xml"));
       doc = sb.build(new FileReader("realconf.xml"));
      Element el = doc.getRootElement();
      if (el.getName().compareToIgnoreCase("realconf") != 0) {
        return 0;
      }
      List lst = el.getChildren();
      for (int i = 0; i < lst.size(); i++) {
        el = (Element) lst.get(i);
        if (el.getName().compareToIgnoreCase("reallisten") == 0) {
          Element portel = el.getChild("port");
          return Integer.parseInt(portel.getText() == null?"0":
                                  portel.getText());
        }
      }
    }
    catch (JDOMException ex) {
      loginfo.setError("取UDP实时数据端口时出FileNotFoundException错:"+ex.getMessage());
      return 0;
    }
    catch(IOException ex){
      loginfo.setError("取UDP实时数据端口时出IOException错:"+ex.getMessage());
      return 0;
    }
    return 0;
  }
}
6 楼 jiyanliang 2008-05-20  
可以把代码贴出来看看阿,看了代码大家不就都清楚了吗。
5 楼 wanwok 2008-05-20  
不是网站.我说的不够清楚.这是一个单独辅助程序,主要作用是过滤数据,然后插入数据中.
4 楼 xiwa 2008-05-20  
WEB工程吗? 我没见过服务器启动时会去调你写的main方法。。。 你也不可能自己去调吧? 有可能是做模块测试用的吧。
3 楼 kayoo 2008-05-19  
想当初 为了测试 我也干过这种事啊--在类里写main方法
2 楼 魔力猫咪 2008-05-19  
其实最主要的还是看他在Main里写了什么。一般情况下Java由一个指定的类的Main作为起点。不过网站程序中所有的程序由容器管理,main就不用写了。
如果你看到的这个程序是把Main作为一个初始化自身对象的话,应该是一个不好的写法。对象的生命周期最好根据需求由服务器容器或者IOC容器管理,至不济自己写个工厂类处理。靠每个类的Main方法处理,应该是个反模式。
1 楼 wanwok 2008-05-19  
怎么就没这个说话呢,是我说的大家都不懂?

相关推荐

    高级软件工程(java程序设计)

    【高级软件工程(Java程序设计)】是一门深入讲解Java编程技术的课程,适合有一定基础或者有需求深入了解Java编程的人员。本课程涵盖了Java语言的基础和高级特性,旨在帮助学习者掌握Java编程的核心技能。 首先,...

    TankWar单机版开发详解

    主要工作是设定窗口的位置和大小,并在main方法中启动窗口。通过MyEclipse设置项目结构和JDK版本,注意类和方法的命名规范。 2. 版本0.2:实现窗口关闭事件处理,不允许窗口大小改变。这涉及到匿名类的使用,根据...

    QrCode 二维码生成与解析

    如果需要解析多个二维码文件,可以将这段代码封装成一个方法,然后遍历指定文件夹下的所有图片文件,逐一进行解码操作。这样就可以批量处理大量二维码图片,提高工作效率。 总之,二维码的生成与解析是现代移动应用...

    Qrcode二维码java生成项目(带logo)

    上述代码中,我们先创建了一个`QRCodeWriter`实例,然后使用`encode`方法编码输入的数据(URL)为`BitMatrix`。接着,我们配置了二维码的图像颜色,并将`BitMatrix`写入到PNG图像文件中。 项目中提到的"带logo"功能...

    java实现贪吃蛇.doc

    * 项目的主程序入口设计:使用 Java 的 main 方法 * 蛇的数据结构设计与移动显示:使用 Java 的数据结构(数组、链表等) 七、游戏实现难点分析 * 监听事件的实现难点:如何监听键盘事件和鼠标事件 * 蛇身移动的...

    zxing二维码生成

    在描述中提到,需要将`zxing-2.0.jar`和`zxing-core-2.0.jar`两个文件添加到你的工程中。这通常是通过将它们放入项目的`lib`目录,或在使用构建工具如Maven或Gradle时,在相应的配置文件中声明依赖来实现的。例如,...

    Google zxing 二维码生成

    【Google zxing 二维码生成】是一个关于利用Google的ZXing(Zebra Crossing)库在Java环境中生成二维码的技术分享。ZXing,全称为“条形码扫描”,是一个开源项目,提供了多种条形码和二维码的读取与生成能力。在...

    2021-2022计算机二级等级考试试题及答案No.10860.docx

    联合查询是将一个或多个表、一个或多个查询的字段组合作为查询结果中的一个字段,执行此查询时,将返回所包含的表或查询中对应字段的记录。 #### JavaApplication实例 12. 在Java中,可以通过命令行参数传递信息给...

    Java和JBuilder集成开发PPT学习教案.pptx

    3. **工程组管理**:方便组织和管理多个相关项目。 4. **自动修改机制**:简化类名、方法名的更改过程。 5. **简单发布功能**:一键打包应用程序,方便部署。 6. **企业应用开发**:支持多种应用服务器,适合企业级...

    java代码-java2

    综上所述,"java代码-java2"涵盖了Java 2平台的多个方面,包括编程基础、项目管理和最佳实践。通过理解和分析`main.java`中的代码,我们可以深入学习Java编程,并掌握企业级应用开发的关键技能。

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    Java是一种广泛使用的高级编程语言,由Sun Microsystems的James Gosling于1990年启动的“绿色计划”中诞生,并于1995年正式发布第一个版本,现在最新的版本是JDK 7.0。Java的主要特点是其简单性、面向对象、跨平台...

    LEJOS-EBOOK

    - **主方法**:是程序的入口点,所有Java应用程序都必须包含一个名为main的方法。 以上只是本书《LEJOS-EBOOK》的部分内容概述,读者可以通过深入阅读来获取更多关于LEJOS编程的知识和技术细节。

    2015年Java传智博客基础视频笔记_风清扬(刘意).pdf

    多个单词则从第二个单词开始每个单词首字母大写,如`getAge()`。 - 常量:全部大写,多个单词间用`_`分隔,如`STUDENT_AGE`。 以上是对给定文档中提到的IT知识点的详细阐述,涵盖了从计算机基础知识到Java编程环境...

    新版Android开发教程.rar

    � 开发方向有三个重点 :----------------------------------- Android 编程基础 7 � 应用软件的开发 � 特殊功能的原生链接库 � 专属应用程序框架 � 由于 Android 的A pp Market 性质,可能催生出专门的应用...

    Java和JBuilder集成开发PPT教案.pptx

    3. **工程组管理**:方便管理多个相关项目。 4. **自动修改机制**:自动更新类名、方法名等,简化代码维护。 5. **程序发布**:提供简便的打包和发布功能。 6. **企业应用开发**:集成多种应用服务器,适应企业级...

    Java3D-API第一章

    - **分支组(BranchGroup)**:用于将多个节点组合在一起。 - **转换组(TransformGroup)**:控制一组节点的位置、旋转和缩放。 - **形状(Shape3D)**:表示一个具体的三维几何体。 - **纹理(Texture)**:用于在表面上...

    java最新面试题大全

    - 方法和变量名首字母小写,多个单词间采用驼峰命名法。 #### 15. 关键字 true、false、null、sizeof、goto、const 的使用 - **true** 和 **false**:布尔类型的两个值。 - **null**:表示没有任何值的对象引用。 ...

    Java2存储库

    1. **源代码文件夹**:项目的核心代码通常被组织在src目录下,分为多个包(package),每个包内包含相关的类(class)文件。 2. **构建文件**:如build.gradle或pom.xml,用于自动化构建过程,其中Gradle和Maven是...

    java面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

Global site tag (gtag.js) - Google Analytics