第一章前言

在学长的建议下,为了弥补之前学Java漏下的或者不是非常清楚的知识点,买了本蛮好的教科书-《Java学习笔记(JDK6)》,正式又一次学习。为了记下一些让我恍然大悟的知识。写了本文档。

第二章Java入门

2.1
JVM
的认识

说究竟Java是一种计算机高级语言,一般高级语言假设须要在操作系统上执行,那么它必须编译成机器语言。比方C语言,它的编译过程就是从C语言到汇编语言到机器语言。而Java的奇妙之处在于Java的编译没有直接变成机器语言,而是一种中间语言,那么中间语言要在机器上执行就必须一个转换环境,这就是Java虚拟机即JVM扮演的角色。

这样做不是非常麻烦吗?为什么不直接编译成机器语言,而是变成中间语言?这样做不是提高了Java开发的成本吗,还要安装一个虚拟机?

的确,C语言的开发在一些系统中甚至不须要下载编译器,比方Linux系统下的C语言仅仅须要写一个.c文本文件,然后在终端上直接输入gcc
xxx.c指令就可以编译成功。

可是这样做的优点在于,通过建立不同操作系统下的JVM版本号。能够使得Java编译后的中间语言通过不同系统版本号的JVM直接执行。也就是说我们不须要在编译同一个Java程序多次。一次编译成功的.class中间语言文件就可以在多个平台上执行。

而你在windows系统下c语言编译得到的.exe文件却不能在linux系统下执行。你须要将原来的c语言源码拿来,在linux系统下再编译一次。

细致想想,这有点像司马光砸缸的故事。是让人离开水还是水离开人?是又一次编译多次还是下载安装一次虚拟机?

2.2 JDK和JRE的差别

JRE全称JavaRuntime
Environment,即Java执行环境,它是JVM的详细实现。当你下载好JDK的时候,你会发现名为jre的一个文件夹。打开后是这样一个文件夹。

图2.1 jre文件夹文件夹

bin目录中是一些可运行文件,lib目录中是运行class文件所需的类库。

JDK。全名JavaDevelopment
Kit,即Java开发包。它本身自带一个jre,主要用来开发測试之用。这个jre与公共jre的差别在于有没有server选项。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9uc3RlcnZzb3V0bWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

图2.2 jdk文件文件夹

2.3 JDK环境配置中的path系统变量和classpath系统变量

曾经配置环境的时候一直没理解path变量和classpath变量的作用。蹭这个机会好好理解一遍。

2.3.1 Path变量

Path变量是用来在cmd上加入指令的

比方说如今你有一个英雄联盟的游戏,你希望在cmd上直接打开,这时候你能够在Path变量中加入英雄联盟游戏exe可运行文件所在文件夹地址

图2.4 Client.exe双击便開始游戏

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9uc3RlcnZzb3V0bWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

图2.5将Client所在文件夹地址加入到Path变量中

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9uc3RlcnZzb3V0bWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

图2.6在cmd上输入Client指令

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9uc3RlcnZzb3V0bWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

图2.7输入发现游戏启动了

从上面的步骤能够看出Path变量的作用。

配置Jdk环境时在Path系统变量中加入Jdk目录下的bin目录的地址的目的就是为了让操作系统找到指定的工具程序(以windows来讲就是找到.exe文件)。

2.3.2 Classpath变量

设置Classpath的目的是让Java运行环境找到指定的Java程序,即.class文件。

在配置Java环境的时候,这个变量设置为jdk/lib目录中的tools.jar和rt.jar文件的绝对地址。

jar文件里事实上是一堆的.class文件,用压缩文件管理器打开tools.jar和rt.jar。能够看到一堆的.class文件。

图2.8 tools.jar文件解压后文件夹

jar格式压缩文件Java执行环境是能够直接执行的。执行是寻找当中的主方法。

如果你有一个.class文件在桌面上,而你把桌面文件夹的地址加入到了Classpath变量中。那么会发生什么呢?

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9uc3RlcnZzb3V0bWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

图2.9在Classpath中加入一个地址

图2.10在cmd上使用Java指令直接执行Test.class文件

发现假设在Classpath中设置了一个文件夹地址。或者一个jar文件的地址,那么该文件夹中或者该jar文件里的class文件是能够直接执行的。

Java补漏(一)的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. JAVA基础补漏--Collections工具类排序

    Collections在对自定义对象进行排序时,自定义类需要对compareTo()函数进行重写. public class Student implements Comparable<Stud ...

  3. JAVA基础补漏--基础数据类型与引用数据类型

    ==在不同数据类型中意义不同. 在基础数据类型中,表示的是数值的比较. 在引用数据类型中,表示的是内存地址值的比较. 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit), ...

  4. JAVA基础补漏--字符串

    字符串常量池 String a="abc"; String b="abc"; char[] str = {"a","b" ...

  5. java多线程编程核心技术——第七章补漏拾遗

    本章主要知识点: 1)线程组的使用 2)如何切换线程状态 3)SimpleDateFormat类与多线程的解决方法 4)如何处理线程异常. 这本书基本来到了终点,其实在第四章来说,核心(基础)的线程知 ...

  6. JAVA基础补漏--文件读取

    public class Test2 { public static void main(String[] args) throws IOException { FileInputStream fis ...

  7. JAVA基础补漏--可变参数

    使用场景:当参数列表数据类型已确定,但参数的个数不确定,就可以用可变参数 格式: 修饰符 返回值类型 方法名(数据类型...变量名){} 原理:可变参数底层为一数组,可根据变量个数的不同,创建不同长度 ...

  8. JAVA基础补漏--SET

    HashSet: 1.无序集合. 2.底层是一个哈希表结构,查询速速很快. 哈希表==数据 + 链表/红黑树 特点:查询速度快. 存储数据到SET中: 1.计算数据的HASH值. 2.查看有没有相同H ...

  9. JAVA基础补漏--List

    Arraylist 通过对ArrayList的源码的查看,他的底层实现是对数组进行数据的操作,所以他的数据特点同数组. 查询快,因为他的内存区域为一个整块,可直接根据索引进行查询. 增删慢,因为每次增 ...

随机推荐

  1. Oracle 数据库分页查询的三种方法

    一.Oracle 数据库分页查询的三种方法 1.简介 不能对 rownum 使用 >(大于或等于 1 的数值).>=(大于 1 的数值).=(不等于 1 的数值),否则无结果.所以直接用 ...

  2. 【ASP.NET MVC】 路由机制:命名路由

    首先看一下命名路由和没有命名的差别: 命名路由: routes.MapRoute( name: "Test", // Route name url: "code/p/{a ...

  3. 论文笔记-SPP_NET中提到的金字塔

    时隔这么久终于考完试放假了,现在终于有时间开始研究spp net的相关内容了,看了几篇网上的博客,发现看完之后还是不是很懂,于是乎下载了spp net的原始论文<Spatial Pyramid ...

  4. summernote图片上传功能保存到服务器指定文件夹+php代码+java方法

    1.summernote富文本编辑器 summernote是一款基于bootstrap的富文本编辑器,是一款十分好用的文本编辑器,还附带有图片和文件上传功能. 那么在我们网站中想吧这个图片上传到服务器 ...

  5. Envious Exponents

    问题 E: Envious Exponents 时间限制: 1 Sec  内存限制: 128 MB提交: 321  解决: 53[提交] [状态] [讨论版] [命题人:] 题目描述 Alice an ...

  6. (hdu1007)Quoit Design,求最近点对

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  7. ACM/CF赛制getstart模板

    (包含整型变量快速读入.简易循环和连续容器的迭代器循环的宏定义.调试时的运行时间输出(编译选项应有“DEBUG”宏定义)等)  1 /*================================ ...

  8. [转]OpenSessionInView模式

    OpenSessionInView模式解决的问题:   * hibernate事物边界问题   * 因session关闭导致hibernate延迟加载例外的问题 事物边界:     一个事物的完成应该 ...

  9. [转] json字符串转换为JSONObject和JSONArray

    一.下载json 具体到http://www.json.org/上找java-json下载,并把其放到项目源代码中,这样就可以引用其类对象了 二.具体转化过程 //JSONObject String ...

  10. GG同步到sqlserver报错一例 Invalid date format

    在将Oracle表同步到sqlserver时,在sqlserver端应用数据时,可能会遇到这个报错. 2014-05-17 17:20:24 WARNING OGG-01154 SQL error - ...