认识JAVA

     由于我的大学时光大部分分配给了一个叫做《魔兽世界》的游戏,这导致我快毕业前对我的计算机专业一塌糊涂。所以在我快毕业的前一个月,我学习了整整一个月的JAVA编程,目的只是不希望自己毕业后一无是处。由于是为了找工作才学习的编程。所以我选择跳跃性地学习。以实现有用功能为目的的学习。这导致我在工作中异常的辛苦。不停地询问和查阅资料。所以说基础知识很重要。最后我选择在,工作不忙的时候重新学习一下编程。以JAVA为起点,再去学其他的东西。毕竟,很多编程语言都是共通的。写这些东西纯属自己的学习笔记。

   对于入手JAVA,那么首先我们需要下载安装JDK,这是JAVA的开发环境。JDK中包含了JRE,这是执行环境。下载之后,需要配置环境变量,配置在系统变量和用户变量均可。只是可操作的用户不同而已。

  配置完成后我们就可以编写最简单的JAVA程序了。

 (1)第一个程序:Test.java

public class Test

{

    public static void main(String[] args)

    {

           System.out.println("First!");

    } 

}

接下来cmd下编译Test.java(javac  Test.java),发现目录下生成Test.class  ,继续输入命令(java  Test)输出:First!

(2)第二个程序:Test.java

class Test1

{

    public static void main(String[] args)

    {

           System.out.println("First!");

    } 

}

接下来cmd下编译Test.java(javac  Test.java),发现目录下生成Test1.class  ,继续输入命令(java  Test),发现命令行报错:

错误: 找不到或无法加载主类Test 再次输入命令(java Test1)输出First

所以由上两个程序可以看出 编译的是.java文件,而在真正执行的是.class文件。

那么.class文件中包含了什么,.class文件中是字节码。字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。所以Java程序最终让机器执行的就是一段字节码。与C语言不同,C语言可以直接编译成为计算机可以识别的二进制代码。

我们通过工具查看下这两个class文件中包含了什么

(1)Test.class

0 getstatic #2 <java/lang/System.out>
3 ldc #3 <First!>
5 invokevirtual #4 <java/io/PrintStream.println>
8 return

(2)Test1.class

0 getstatic #2 <java/lang/System.out>
3 ldc #3 <First!>
5 invokevirtual #4 <java/io/PrintStream.println>
8 return

由此可见在main方法下两个class文件执行的字节码是一样的。


Java是如何做到跨平台的呢?这都归功于由C语言编写的JVM(Java虚拟机),JVM是Java编译器和os平台之间的虚拟处理器。Java文件编译后的字节码代码并不是直接由os运行,而是由JVM翻译成该os认识的机器语言,再由该os运行。所以Java可以实现跨平台运行。编写一次程序,利用JVM,可以在多个os下运行。总的来讲,正式因为JVM,Java才可以做得到跨平台。

下面是摘自百度百科的关于JVM的运行流程,(自己懒得写了,尊重科学,不做重复操作):

JVM执行程序的过程 :
I.加载.class文件
II.管理并分配内存
III.执行垃圾收集
JRE(java运行时环境)由JVM构造的java程序的运行环境
JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。
JVM在整个jdk中处于最底层,负责于操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就虚拟计算机.操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境。
1.创建JVM装载环境和配置
2.装载JVM.dll
3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例

4.调用JNIEnv实例装载并处理class类。



  

原文地址:https://www.cnblogs.com/MedivhQ/p/3801424.html