【源码】
public class Rect{//Rect类
double width;
double height;
double getArea(){
return width*height;
}
}
class Example{//主类
public static void main(String args[]){
Rect rectangle;
rectangle=new Rect();
rectangle.width=1.819;
rectangle.height=1.5;
double area=rectangle.getArea();
System.out.println("矩形面积:"+area);
}
}
【编译错误】
Example.java:1: 错误: 类 Rect 是公共的, 应在名为 Rect.java 的文件中声明
【解决方法】
源文件的命名:如果源文件中有多个类,那么至多只能有一个类是public;如果有一个类是public,那么源文件的名字必须与这个类的名字完全相同,并且扩展名是java就可以了(不要求主类一定是public类)。上例中,源文件中的Rect类是public类,所以必须把源文件命名为Rect.java
从主类开始运行:当java应用程序中有多个类时,java命令执行的类名必须是主类的名字(没有扩展名)。当使用解释器java运行应用程序时,java的运行环境将Rect.class和Example.class加载到内存,然后执行主类的main方法来运行程序。
【java与C\C++的不同】
字节码的平台无关性:平台的核心是操作系统(OS)和处理器(CPU),每种平台都会行成自己独特的机器指令,比如,某个平台可能用8位序列代码10001111表示一次加法操作,以10100000表示一次减法操作,而另外一种平台可能用8位序列代码10101010表示一次加法操作,以10010011表示一次减法操作。程序需要经过操作系统和处理器来运行,因此,与平台无关是指程序的运行不因操作系统、处理器的变化导致无法运行或出现运行错误。
C\C++语言提供的编译器对C\C++源程序进行编译时,将针对当前C\C++源程序所在的特定平台进行编译、连接,然后生成机器指令,即根据当前平台的机器指令生成机器码文件(可执行文件)。这样一来,就无法保证C\C++编译器所产生的可执行文件在所有的平台上都能正确的被运行,这是因为不同的平台可能具有不同的机器指令。
C\C++针对特定的操作系统 和CPU进行编译,而java语言提供的编译器针对java虚拟机把java源程序编译为称作字节码(Byte-code)的一种“中间代码”。字节码是可以被java虚拟机识别、执行的代码,即java虚拟机负责解释运行字节码,其运行原理是:java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码。在一台计算机上编译得到的字节码文件可以复制到任何一个安装了java运行环境的计算机上直接使用。字节码由java虚拟机负责解释运行,即java虚拟机负责将字节码翻译成本地计算机的机器码,并将机器码交给本地的操作系统来执行。