您的位置:首页 > 编程语言 > Java开发

Java文件结构的点点理解

2011-08-02 19:06 197 查看
今天看Core Java,看到对象与类的静态域与静态方法这块时, 还发现里面居然说到每个类可以有一个main方法,现在对Java的文件结构作个梳理:Java的文件都是以class来组织的,假设源文件名为:Application.java,在里面,首先必须有一个公共类public修饰的类,其名与文件名完全一致(一模一样):

public class Application

{// implement the class

      ...  ...

}

同时,需要其它类的时候,可以在上面的公共类后面接着定义另外的类:

public class Application

{// implement the class

      ...  ...

}

class  otherApplication1

{// implement the class

      ...  ...

}

class  otherApplication2

{// implement the class

      ...  ...

}

只是后面跟的类不能在有public关键词修饰。一个*.java文件中只能有一个public 类。其它类个数无所谓,这一点虽然有点难于理解,因为一个*.java文件经编译过后,是*.class文件形式的字节码文件,但是从下面的文件结构可以看出一些点滴:



首先说明InnerClassTest.java的文件结构,且是在Eclipse里面的进行编译的:
public class InnerClassTest   //the only public class named as the same as the file name;
{

public static void main(String[] args);
...   ...

}
class TalkingClock
{...    ...

private class TimePrinter implements ActionListener
{
...   ...
}

          }

在命令行下进行编译过后的文件结构如下图所示:



其它不在这里多讲,只是提一下,在命令行用javac命令编译后,*.class文件要比在Eclipse下面多一个TalkingClock$1.class文件,我猜想可能是为内部类多给了一个编号吧!!
 

下面说说java文件中最重要的方法,也就是main方法的组织结构:

不需要使用对象调用静态方法。例如,不需要构造Math类对象就可以调用Math.pow,而从java文件的声明可以看出,main方法也是一个公开的,静态的,空类型的,有一个字符串参数的方法。基本格式是定的,当然其中出现过main到底是否是必需为public的著名bug(可以在htttp://bugs.sun.com/bugdatabase/index.jsp,其bug号为4252539),只不过后面强制声明main方法必需是public类型的了。(下面是摘抄Core
Java2 7th的内容)

    

public class Application

{

      public static void main(String args[])

      {

               //construct objects here

               ....

      } 

 }

   main()不对任何对象进行操作,事实上,在启动程序的时候,还没有任何一个对象。静态的main方法将执行并创建程序需要的对象。提示:每一个类可以有一个main方法。这是对类进行单元测试一个常用的技巧。例如,可以在Emplyee类中添加一个main方法:

        class Employee

        {

         public Employee(String n, double s, int year, int month, int day)

         {

          name = n;

          salary = s;

          GregorianCalendar calendar = new GregorianCalendar(year, month-1, day);

          hireDay = calendar.getTime();

         }

        }

        ...

        public static void main(String[] args) // unit test

     {

   Employee e = new Employee("Harry", 50000);

   System.out.println(e.getName() + " " + e.getSalary());

     }

    如果想要独立测试Employee类,只执行:java Employee
    如果雇员类是大型应用程序的一部分,那么可以使用下在这条语句运行程序:java Application
    并且Employee类的main方法永远不会被执行。当然,在Eclipse里面,可以分开运行同一个java源文件里面不同的类。从这里,我们可以学习到一个常用的单元类调试的方法:此处就把这些普通类当作了方法一样,可以分开测试单元类里的工作情况。非常实用!!

 

下面也抄一下:用static块的初始化,不需要main方法,也能打印出“Hello World!!”的经典例子,从中也可以看出一些知识来:

public class NoMainHelloWrold

{

       static

       {

               System.out.println("Hello World!!");

               System.exit(0);

       }

}

注意:在Eclipse下面是不能运行的,因为Eclipse会报告没有mian方法,不能进行调试、编译和运行。在命令行下面是可以的。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息