解释java程序所使⽤的命令是,Java程序的执⾏原理以及解释说
明
在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑⼯具编写程序了。推荐在Windows操作系统中使⽤EditPlus ⼯具进⾏编写。由于我使⽤的是Mac OS,所以,我使⽤Sublime Text编辑⼯具进⾏编写。
下⾯我们通过⽂本编辑⼯具写⼀个⼊门的“问世”程序:
HelloWorld.java
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
下⾯所写的内容都将以上⾯的程序为例,以Mac OS系统为操作环境。
Java的加载与执⾏
Java程序的运⾏包括两个阶段:编译阶段和运⾏阶段。
1. 编译阶段
这个阶段的主要任务是检查Java源程序是否符合Java语法,符合Java语法规则则能够⽣成正常的字节码⽂件(xxx.class);不符合Java语法规则则⽆法⽣成字节码⽂件,并报出相应的错误。
编译阶段的过程:程序员需要创建⼀个以“.java”为扩展名的⽂件,该⽂件成为java源⽂件,源⽂件当中编写的内容是Java源代码/源程序,⽽这个源程序是不能随意编写的,必须符合Java语法规则,然后Java程序员需要使⽤JDK当中⾃带的javac命令对程序进⾏编译。
javac的使⽤规则:javac java源⽂件的路径
下⾯我们可以运⾏⼀下:
图1.png
通过上图的命令,会⽣成HelloWorld.class⽂件,如下图:
图2.png
注意:
字节码⽂件不是纯粹的⼆进制,这种⽂件⽆法直接在操作系统中执⾏,它是⼀种被Java虚拟机识别的机器码指令,通过Java虚拟机在操作系统中执⾏。
字节码⽂件是最终要执⾏的⽂件,所以说class⽂件⽣成之后,java源⽂件删除并不会影响java程序的执⾏。但是⼀般java源程序不要删除,因为class⽂件最终执⾏效果可能不是我们想要的,那个这个时候需要回头再重新修改java源⽂件,然后将java源程序重新编译⽣成新的class⽂件,然后再运⾏这个class程序,⽣成新的效果。
javac是⼀个java编译器⼯具/命令。
⼀个源⽂件可以编译⽣成多个class⽂件,class⽂件的命名是根据类名命名的;
测试javac命令是否可⽤:javac -version,这也是检查编译器版本的命令。
2. 运⾏阶段
在编译阶段⽣成字节码⽂件后,我们就需要运⾏字节码⽂件执⾏最后的⼀步。
该阶段通过使⽤java命令实现。
java命令的使⽤规则:java 类名
运⾏阶段的过程:通过cd命令进⼊字节码⽂件所在的⽬录,然后执⾏java 类名命令。
下⾯我们看⼀下:
图3.png
通过上图,可以看到最终打印出“HelloWorld”这句话,就说明运⾏成功。
注意:
测试java命令是否可⽤:java -version,这也是检查Java虚拟机版本的命令;
在运⾏阶段,我们必须先进⼊字节码⽂件所在的⽬录,否则会报错,原因我们会在下⾯将要介绍的执⾏原理中介绍;
java命令后⾯跟的是类名,不是路径,就像我们现在举例HelloWorld.java⽂件,它的类名是HelloWorld。
Java的执⾏过程以及原理
通过执⾏java命令,会先启动JVM;
JVM启动后,JVM会去启动“类加载器ClassLoader”;
类加载器的作⽤:加载类的。本质上类加载器负责去硬盘上“类”对应的“字节码”⽂件,以java HelloWorld为例,那么类加载器会去硬盘上搜索“HelloWorld.class”⽂件;
类加载器如果在硬盘上不到相应的字节码⽂件,会报错:
错误: 不到或⽆法加载主类 Test
类加载器如果在硬盘上到了对应的字节码⽂件,类加载器会将该字节码⽂件装载到JVM当中,JVM启动“解释器”将字节码解释
成“”这种⼆进制码,操作系统执⾏⼆进制码和硬件交互。
注意:
默认情况下,类加载器会去硬盘中当前路径下字节码⽂件,这⾥就是为什么使⽤java命令执⾏之前,需要进⼊字节码⽂件所在的⽬录下,否则会报错。
下⾯是整个程序编译和运⾏两个阶段的逻辑图:
图4.png
问题:能不能给类加载器指定⼀个路径,让类加载器去指定的路径下加载字节码⽂件呢?
答案是可以,但是需要设置环境变量classpath。
classpath是给类加载器指路的,属于Java特有的,我们如果配置了classpath后,类加载器只能在配置
的路径下查字节码⽂件,不再再当前路径下查了。所以,我们不需要配置环境变量classpath,每次执⾏的时候,需要切换到字节码⽂件所在的路径在,然后运⾏。
Java程序的解释说明
public:公共的;
class:修饰类的关键字;java用什么软件运行
HelloWorld:我们给类定义的名字,也叫类名;
static:静态的;
void:返回参数类型为void,表⽰可以不返回参数;
main():main⽅法;
public static void main(String[] args):这是固定写法,叫做main⽅法,也叫做主⽅法,是程序的⼊⼝。JVM在执⾏程序的时候,会主动去main⽅法,没有这个规格的写法,程序是⽆法执⾏的。其中:String[] args是main⽅法的形式参数,args可以改变,对于主⽅法来说,只有这个地⽅可以改变,其他地⽅都是固定写法。
public class和class的区别
在⼀个类中,可以定义多个class类;
类不是必须要public修饰的,可以没有public;
在源⽂件中,只要有⼀个class类,编译后,必然会对应⽣成⼀个class⽂件,如果在⼀个类中,定义多个class类,编译后,也会相对应的⽣成多个class⽂件;
public修饰的类可以没有,如果有的话,有且只有⼀个,public修饰的类名必须和源⽂件保持⼀致;
每个类都可以编写⼊⼝,执⾏的时候,java 具体某个类,这样就可以。但是⼀般⼀个软件只有⼀个⼊⼝,不会出现多个,所以,这⾥只适⽤于测试;
当在命令窗⼝中执⾏java HelloWorld,那么HelloWorld.class当中必须有主⽅法,没有主⽅法,虽然会编译通过,但是运⾏阶段会报错。
以上就是这篇⽂章的内容!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论