Java语言理解

  • 1.平台无关性
  • 2 自动进行内存分配与垃圾回收
  • 3 面向对象的思想(抽象、封装、继承、多态)
  • 4 众多类库
  • 5 异常处理机制
  • 6 语言特性(泛型、反射、lambda表达式)
  • 7 编译与解释并存

1.平台无关性

传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行。。。


java程序则编译为字节码。字节码本身不能运行,因为它不是原生代码。字节码只能够在Java虚拟机(JVM)上运行。JVM是一个原生应用程序,它负责解释字节码,不同的操作系统对应不用的jvm。通过使用JVM可用在众多的平台上运行程序。


简单来说:java源文件(.java)通过编译器生成字节码文件(.class),字节码文件(.class)通过JVM(Java虚拟机)中的解释器再翻译成特定机器上的机器码,然后在特定的机器上运行。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。

2 自动进行内存分配与垃圾回收

3 面向对象的思想(抽象、封装、继承、多态)

4 众多类库

5 异常处理机制

6 语言特性(泛型、反射、lambda表达式)

7 编译与解释并存

字节码->机器码这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT 编译器,而JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。

对Java语言的理解相关推荐

  1. 【Java基础】从Java语言层面理解BIO,NIO,AIO(二)

    文章目录 零.从网络层面理解BIO,NIO,AIO 一.相关概念 1.什么是socket? 2.IP地址(IP Address) 3.端口(Port) 4.协议(Protocol) 4.1.协议简介 ...

  2. Go语言 和 Java语言对比理解系列四:门闩(WaitGroup/CountDownLatch)

    文章目录 Java中的门闩最基础的实现方式就是CountDownLatch,可以参考之前的文章<使用三个线程,按顺序打印X,Y,Z,连续打印10次>: 而Go中可以通过sync.WaitG ...

  3. java二级程序题两个角度_两个角度图_【SCME大一】使用JAVA语言深入理解程序逻辑答案_学小易找答案...

    [填空题]<蝶恋花 ·伫倚危楼风细细 >的作者( ). [简答题]简要概述问卷调查的整体设计? [填空题]父母在,( ),游必有方. [填空题]白居易与刘禹锡并称"( )&quo ...

  4. 使用Java语言深入理解程序逻辑——循环结构进阶

    1.for循环            (1)语法:     for(参数初始化 ;条件判断 ; 更新循环变量:){                            (循环体:)     } (2 ...

  5. 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言

    一.前言 在这里我想通过用Python和Java语言的类比来对Python中的self参数和__init__(self)方法做一个深入的解释.这样可以加深对self参数和__init__(self)方 ...

  6. Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...

      Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...

  7. java面向对象的理解_java胜于C语言,却又静态面向对象,简单?

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静态面向对象编程语言的代 ...

  8. 深入理解JVM:Java语言与JVM关系

    在那个电闪雷鸣,群鸟环绕的夜晚,一个不为人知的语言Oak诞生了,此时正值1991年4月份,气温舒适,百花齐放.然而Oak的诞生并没有得到人们的关注,直到1995年5月23号,Oak决定正是更名为Jav ...

  9. java看不起c语言,为什么我感觉Java比C语言难呢?总觉得逻辑上没有C语言好理解。比如各种继承介面。包之间的关系。...

    为什么我感觉Java比C语言难呢?总觉得逻辑上没有C语言好理解.比如各种继承介面.包之间的关系.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

最新文章

  1. Linux编译lclntsh,Linux下编译C/C++时,出现/usr/bin/ld: cannot find -l*** 错误的处理
  2. 搭建Python+Django开发环境
  3. Myeclipse修改设置Default VM Arguments
  4. 获取批量导入数据后,所产生所有自增ID的值
  5. Node.js格式化输出json文件
  6. 动态载入.ascx用户控件
  7. ztek usb转串口 linux,Z-tek驱动下载_Z-tek usb转串口驱动官方下载 - 系统之家
  8. 计算机编程和机器人编程有什么不同,编程和机器人编程的区别
  9. 自编译 极路由2 大麦DW22D/DW203D/DW204D openwrt路由器固件分享
  10. SQL server 数据库 实验一
  11. android百度地图poi路线规划,百度地图开发之poi检索,线路规划(示例代码)
  12. 尤雨溪:先学算法,再学源码!
  13. 什么是“蓝牙距离感应装置”
  14. CF连杀喊话_WeGame修改
  15. 安卓 手柄 linux,Linux joystick 游戏手柄编程 (获取输入数据)
  16. 【Python小工具】若干图片合并生成动态图(.gif)
  17. SQL 中的注释语句
  18. requirejs的缺点
  19. Jupyter notebook 绘图时,如何生成高清图片?
  20. 深入理解Android之Gradle

热门文章

  1. 总结2018,立2019 flag
  2. docker-compose –- 单机多容器神器
  3. 帝国cms刷新内容页提示_ecms_news_data_' doesn't exist不存在问题
  4. K8S!之Pod概念与网络通讯方式详解!
  5. 软件黑盒测试理论(全)
  6. 如何制定企业数字化转型的顶层设计?
  7. android tv 焦点居中自定义listview控件的实现
  8. 细数oracle的异常
  9. Artstudio Pro Mac(绘图与图片编辑软件)
  10. 基于垂杨CAD的智能变电站智能设计开发方案