1.编译型语言和解释型语言的区别

Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤。

有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的 .exe)(有一个成品,以后也可以使用),比如C语言、C++、Golang、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言,使用的转换工具称为编译器。

有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell、MATLAB 等,这种编程语言称为解释型语言,使用的转换工具称为解释器。

类型 原理 优点 缺点
编译型语言 通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。 编译一次后,脱离了编译器也可以运行,并且运行效率高。 可移植性差,不够灵活。
解释型语言 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 一边执行一边转换,效率很低。

分析

回过头来看Java,我们知道,Java代码执行前需要先编译成class文件,再交由JVM执行。因此从这一过程来看,Java可以称之为编译型语言。

然而,class文件的内容属于一种中间语言,计算机无法直接识别,仍然需要由JVM解释成机器语言执行,因此这个角度来说,可以称之为解释型语言。

2.通过JVM实现跨平台

Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM (Java Virtual Machine)。JVM是可运行Java字节码文件的虚拟计算机。所有平台上的JVM向编译器提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。

当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体平台,只面向JVM。不同平台上的JVM都是不同的,但它们都提供了相同的接口。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。显然,相同的字节码程序需要在不同的平台上运行,这几乎是“不可能的”,只有通过中间的转换器才可以实现,JVM 就是这个转换器。

JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。

  • Oracle公司制定的Java虛拟机规范在技术上规定了JVM的统-标准,具体定义了JVM的如下细
    节:
    ➢指令集
    ➢寄存器
    ➢类文件的格式
    ➢栈
    ➢垃圾回收堆
    ➢存储区
    Oracle公司制定这些规范的目的是为了提供统一的标准, 最终实现Java程序的平台无关性

3.javac编译程序为什么不需要指定目标文件的文件名

javac编译程序

java 解释运行程序

4.java源文件的命名规则

5.JDK9新增的jshell工具

JDK 9工具的一大改进就是提供了jshell 工具,它是一个REPL (Read-Eval-Print Loop)工具,该工具是一个交互式的命令行界面,可用于执行Java 语言的变量声明、语句和表达式,而且可以立即看到执行结果。因此,我们可以使用该工具来快速学习Java或测试Java的新API。
        对于一个立志学习编程(不仅是Java)的学习者而言,一定要记住:看再好的书也不能让自己真正掌握编程(即使如《疯狂Java讲义》也不能)!书只能负责指导,但最终一定需要读者自己动手。即使是一个有经验的开发者,遇到新功能时也会需要通过代码测试。
        在没有jshell时,开发者想要测试某个新功能或新API,通常要先打开IDE工具(可能要花1分钟),然后新建一个测试项目,再新建一个类,最后才可以开始写代码来测试新功能或新API。这真要命啊!而jshell 的出现解决了这个痛点。
        开发者直接在jshell界面中输入要测试的功能或代码,jshell 会立刻反馈执行结果,非常方便。启动jshell非常简单,只要在命令行窗口输入jshell 命令,即可进入jshell交互模式。

6.Java 9 的G1垃圾回收器

内存泄漏

传统的C/C++等编程语言,需要程序员负责回收已经分配的内存。显式进行垃圾回收是一件比较困难的事情,因为程序员并不总是知道内存应该何时被释放。如果一些分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏

显式进行垃圾回缺点

  • 程序忘记及时回收无用内存,从而导致内存泄漏,降低系统性能。
  • 程序错误地回收程序核心类库的内存,从而导致系统崩溃。

垃圾回收

Java语言不需要程序员直接控制内存回收,Java程序的内存分配和回收都是由JRE在后台自动进行的。JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收(GarbageCollection,GC)

Java的堆内存是一个运行时数据区,用以保存类的实例(对象),Java虚拟机的堆内存中存储着正在运行的应用程序所建立的所有对象,这些对象不需要程序通过代码来显式地释放。一般来说,堆内存的回收由垃圾回收器来负责,所有的JVM实现都有一个由垃圾回收器管理的堆内存。垃圾回收是一种动态存储管理技术,它自动释放不再被程序引用的对象,按照特定的垃圾回收算法来实现内存资源的自动回收功能。

散称知识点:

  • Java标准版开发包 JDK(Java SE Development Kit)包含 Java运行时环境 JRE(Java Runtime Environment)包含JVM。
  • 学生提问:为什么选择用户变量?用户变量与系统变量有什么区别?

答:用户变量和系统变量并没有太大的差别,只是用户变量只对当前用户有效,而系统变量对所有用户有效。为了减少自己所做的修改对其他人的影响,故设置用户变量避免影响其他人。对于当前用户而言,设置用户变量和系统变量的效果大致相同,只是系统变量的路径排在用户变量的路径之前。这可能出现一种情况:如果Path 系统变量的路径里包含了java 命令,而PATH用户变量的路径里也包含了java命令,则优先执行Path系统变量路径里包含的iava命令。

疯狂Java讲义(一)相关推荐

  1. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  2. java下载pdf6_疯狂java讲义第6版 电子版(pdf格式)

    疯狂java讲义第6版pdf是李刚打造的经典java编程图书的最新版,为了帮助更多的读者能真正掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,作者根据多年来的Java授课经验,精 ...

  3. 《疯狂Java讲义精粹》读书笔记2 ------ 多态

    -----------------<疯狂Java讲义精粹>2读书笔记--------------- Java引用变量有两个类型: · 编译时类型(由声明该变量时使用的类型决定) · 运行时 ...

  4. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...

    [java]代码库import javax.swing.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax ...

  5. 《疯狂Java讲义》学习笔记 第六章 面向对象(下)

    <疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...

  6. 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...

  7. [疯狂Java讲义精粹] 第十三章|类加载机制与反射

    java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...

  8. 疯狂Java讲义:P200接口

    接口 Output package lee; public interface Output {//接口里定义的成员变量只能是常量int MAX_CACHE_LINE=50;//接口里定义的只能是pu ...

  9. 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏

    编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...

  10. 《疯狂Java讲义》读书笔记5

    目录 Java的集合类 Inerator 接口 Set 集合 HashSet 类 LinkedHashSet 类 TreeSet 类 EnumSet 类 List 集合 ArrayList 和 Vec ...

最新文章

  1. Oracle Golden Gate 系列十七 -- GG 一对多 real-time data distribution 说明 与 示例
  2. php获取http头信息,php如何获取http头信息
  3. php跳转隐藏url参数,.htaccess从URL中删除index.php并隐藏参数键
  4. 倾斜模型精细化处理_推荐一款好用的倾斜摄影精细化单体建模软件——OSketch...
  5. android 北斗定位代码_大牛三步教你解决,BAT资深APP性能优化系列-卡顿定位问题,收藏哦
  6. 网络编程-之粘包现象
  7. asp.net中验证码的实现
  8. Android音频开发(七)音频编解码之MediaCodec编解码AAC下
  9. 前端开发 AMD 和 CMD 的规范区别
  10. web developer tips (56):手动更新JScript的智能感知
  11. 分析sql字段_全面解析一条SQL语句执行得很慢的原因有哪些
  12. 从小白到架构师原来是这样修炼出来的
  13. 谷歌浏览器误删怎么办
  14. 几个可以免费下载视频素材的网站[国外],希望大家喜欢[可以的话给个关注哟]
  15. TYUT太原理工大学2022需求工程考试选择题背诵版
  16. 【修炼五】用户需求系统需求
  17. 矩阵分析之 实矩阵分解(4)满秩分解,QR分解
  18. 凯盛融英在港招股书“失效”:遭证监会严格发问,需补充披露
  19. sd敢达g世纪android,SD敢达G世纪 世界/超越世界 安卓模拟器金手指代码亲测有用...
  20. Stata绘图相关问题

热门文章

  1. 【大学物理·光学】圆孔的夫琅禾费衍射光学仪器的分辨本领
  2. 计算机系酒店管理毕业论文,计算机专业酒店管理系统毕业论文讲述.doc
  3. delphi 发送html邮件,Delphi下html编辑器,像foxmail或者Outlook的邮件编辑器一样 能够保存为单一文件如 mht,eml (200分)...
  4. Multisim 14.0重新安装,解决无法打开的问题,multisim,安装
  5. USSD设置呼叫转移功能
  6. 交通行业如何做好数字化转型?| 推荐收藏
  7. 用计算机按45乘5CE再按,2015年4月全国自学考试计算机应用基础真题
  8. 天黑时间跟经度还是纬度有关_时差由纬度还是经度决定
  9. 访谈,智能座舱开发中的人机交互与人机工程布置
  10. 《机械工程测试技术基础》教学大纲