public class Hello{
//类中
//这是java中的程序入口方法,一切代码的执行,都要从这里开始
public static void main(String[] args){
//方法中,可以编写一行行需要运行的代码
//方法在类中
System.out.println("hello world");
}
}
1.Hello是我们定义的一个类,在写java代码的时候必须写一个类。
① 在Java中,类是组织代码的基本单元。在类中,可以编写方法。在方法里,才是真正需要JVM去执行的一行行的代码。
②Java语言规定,在大多数情况下,需要把执行的代码写在方法中,方法写到类中。所以在写代码的时候,一般都是先定义一个类,类中定义一个方法,然后把要执行的代码写到方法中。
2.main方法是Java中的一个特殊的方法,作为Java程序的唯一入口而存在。
① Java使用了一个固定的方法来作为程序的入口。
②无论写了多少类,多少方法,JVM一定是从这个固定的程序入口方法开始执行代码的。为了能够让JVM很好地识别这个方法入口,这个方法的编写形式就是固定的:public static void main(String[] args){ }
。
③在Hello类中定义一个main方法的目的:让JVM运行Hello类的时候,可以直接从类中的程序入口main方法开始运行代码。由于main方法是固定的写法,所以JVM很容易就识别出来,然后去运行它,main方法被运行了,那么main中的代码就会被一行行的顺序执行了。
3.如果Hello类中没有main方法,使用java Hello
运行时,会报错。
因为JVM在Hello类中找不到指定的程序入口,也就是main方法。这个情况下, 还要使用Hello这个的话,就需要在定义其他的一个类。例如Test类,在Test类中定义程序入口main,并且在main方法中调用Hello类中的属性或其他方法,这时候就使用到了Hello类中的代码了。
4.System.out.println(“hello world”)
System是JavaSE-API中所提供的一个类, out是System类中的一个属性, println是out中的一个方法,所以,System.out是访问System类中的一个属性,System.out.println是调用out中的一个方法,而println(“hello world”)方法的作用是将字符串"hello world"输出到命令行或控制台中。
5.在Hello中,使用System这个类的要求:
①system这个类所在的.java文件已经编写完成,并且已经编译成.class文件。(system.java文件在src.zip中,编译好的System.class文件在rt.jar中)
②这个.class文件所在位置,是JVM可以自动加载的指定路径,这样就可以保证JVM可以把这个.class文件中的字节码(也就是System这个类的代码),加载到JVM的内存中。JVM在启动的时候,会自动读取rt.jar中所需要的class文件,当然也包括System.class文件。
③在Hello中,使用import(导入)关键字,将要使用的system类,引入到Hello中,如果system类是在java.lang包中进行定义的,或者System类和Hello类是在同一个包下面定义的,那么import语句可以省去不写。当前Hello类中,是没有声明package(包)的,那么这时候Hello类就算是在默认包中,而system类,是在java.lang包下定义的,所以当前情况下, Hello类中不使用import导入,也可以直接使用system类。
6.输入java -verbose Hello > a.txt
,可以看到JVM去启动运行Hello类之前,确实从rt.jar中加载到了System这个类。通过文件中记录的输出内容,就可以看到JVM在运行Hello这个类之前,整个加载的过程和顺序。注意,这里JVM其实就是给我们自己编写的类Hello准备运行的环境。rt.jar中rt就是runtime的缩写,表示运行时环境的意思。
7.Hello这个类的名字和Hello.java的名字没有必然的关系。Hello这个类不一定在Hello.java中,但是成功后,Hello这个类一定在Hello.class中。
①如果文件中的类是public关键字修饰的,那么这个类的名字和java文件的名字就一定要一样。
②如果文件中的类不是public关键字修饰的,那么这个类的名字和java文件的名字不一样也可以。
③类名和java文件名字的首字母大写,这是编程规范,默认遵循这个要求,其实这个字母小写也没有任何问题。