由于我的大学时光大部分分配给了一个叫做《魔兽世界》的游戏,这导致我快毕业前对我的计算机专业一塌糊涂。所以在我快毕业的前一个月,我学习了整整一个月的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是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。
4.调用JNIEnv实例装载并处理class类。