第一章前言

在学长的建议下,为了弥补之前学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. yum 安装

    可以有两种方式:1.sudo yum install 然后输入root密码2.su root,输入密码然后yum install

  2. java中的object... args参数

    关于java方法中Object... args参数的含义 在阅读google发布的volley源码时,突然看到一个方法中存在这样的写法,如 :v(String format, Object... ar ...

  3. HDU 4865 Peter's Hobby

    $dp$. 这题的本质和求一个有向无环图的最长路径长度的路径是一样的. $dp[i][j]$表示到第$i$天,湿度为$a[i]$,是第$j$种天气的最大概率.记录一下最大概率是$i-1$天哪一种天气推 ...

  4. Shiro源码分析之Subject和SecurityManager

    Subject 毫无疑问,Subject是Shiro最重要的一个概念. “Subject”只是一个安全术语,意味着应用程序用户的特定于安全性的“视图”.Shiro Subject实例代表单个应用程序用 ...

  5. SCU 4444 Travel (补图最短路)

    Travel The country frog lives in has \(n\) towns which are conveniently numbered by \(1, 2, \dots, n ...

  6. 简单了解gzip、bzip2、xz

    压缩工具gzip.bzip2.xz分别对应压缩格式.gz..bz2..xz.不过tar命令已经可以满足大部分使用,所以这些格式只简单了解一下.gzip压缩速度最快,xz压缩率最高,bz2适中.一般这三 ...

  7. 【Jersey】图片上传及显示

    一.前期准备 图片上传需要用到的一些依赖: <dependency> <groupId>org.jvnet.mimepull</groupId> <artif ...

  8. 【爬虫】python 多线程知识

    第一段代码: __author__ = 'Administrator' import threading import time index = 0 class MyThread(threading. ...

  9. 【BZOJ 3175】 3175: [Tjoi2013]攻击装置(二分图匹配)

    3175: [Tjoi2013]攻击装置 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2) ...

  10. Hive的严格模式

    在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群. 用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成u ...