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方法,不能进行调试、编译和运行。在命令行下面是可以的。^_^
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方法,不能进行调试、编译和运行。在命令行下面是可以的。^_^
相关文章推荐
- 深入理解java虚拟机【Java Class类文件结构】
- 深入理解Java虚拟机笔记---class类文件结构概述
- 深入理解JAVA虚拟机之类文件结构
- 探索深入理解java虚拟机之虚拟机类文件结构(5)
- java面试- 深入理解JVM(七)——Class文件结构
- 深入理解java 虚拟机类文件结构
- 深入理解Java虚拟机笔记---class类文件结构概述
- Java中的类文件结构之一:如何分析一个.class文件的二进制码内容
- 【深入Java虚拟机】之二:Class类文件结构
- java Class文件内部结构解析
- 理解JAVA Class文件,破解class文件的第一步
- 深入理解Java Class文件格式(六)
- java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解
- android的文件系统结构及其引导过程的初步理解
- JAVA Eclipse的Android文件结构是怎么样的
- 深入理解java虚拟机(一):java内存区域(内存结构划分)
- 理解 Windows CE .NET 中的文件系统体系结构
- 从Java视角理解系统结构(二)CPU缓存
- 深入理解Java Class文件格式(一)
- 深入理解Java Class文件格式(七)