当前位置: 首页 > news >正文

【Java 问题】基础——Java 概述

Java 概述

  • 1. 什么是 Java ?
  • 2. Java 语言有哪些特点
  • 3. JVM、JDK 和 JRE 有什么区别?
  • 4. 说说什么是跨平台性?原理是什么?
  • 5. 什么是字节码?采用字节码的好处是什么?
  • 6. 为什么说 Java 语言 "编译与解释并存"?

1. 什么是 Java ?

Java 是一门面向对象的编程语言, 不仅吸收了 C++ 语言的各种优点, 还摒弃了 C++ 里难以理解的多继承、指针等概念,因此Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的有限代表,几号地实现了面向对象理论,运行程序员以优雅的思维方式进行复杂的编程。

2. Java 语言有哪些特点

  • 面向对象 (封装、继承、多态);
  • 平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java的虚拟机机制。在引入虚拟机之后,Java语言在不同的平台 上运行不需要重新编译。
  • 支持多线程。C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线支持;
  • 编译与解释并存;

3. JVM、JDK 和 JRE 有什么区别?

JVM:Java virtual Machine,Java 虚拟机,Java 程序运行在Java 虚拟机上。针对不同系统实现的不同的JVM,因此 Java 语言可以实现跨平台。

JRE:Java 运行时环境,它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,Java命令和其他的一些基础构建。但是它不能用于创建新程序。

JDK:Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器 javac 和工具(如 javadoc 和 jdb)。它能创建和编译程序。

简单来说,JDK包含JRE,JRE包含 JVM。

在这里插入图片描述

4. 说说什么是跨平台性?原理是什么?

所谓跨平台性,是指 Java 语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理: Java程序是通过 Java 虚拟机在系统平台上运行的,只要该系统可以安装相应的 Java 虚拟机,该系统就可以运行 Java 程序

5. 什么是字节码?采用字节码的好处是什么?

所谓的字节码,就是Java程序经过编译之列产生的 .class 问加你,字节码能够被虚拟机识别,从而实现Java程序的跨平台性.

Java 程序从源代码到运行主要有三步:

  • 编译: 将我们的代码 (.java) 编译成虚拟机可以识别理解的字节码 (.class)
  • 解释: 虚拟机执行java字节码, 将字节码翻译成机器能识别的机器码
  • 执行: 对应的机器执行二进制机器码

在这里插入图片描述
只需要把 Java 程序编译成Java虚拟机能识别的Java字节码,不同的平台安装对应的Java虚拟机, 这样就可以实现Java语言的平台无关性.

6. 为什么说 Java 语言 “编译与解释并存”?

高级编程语言安装程序的执行方式分为 编译型和解释型两种

简单来说, 编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被改平台执行的机器码; 解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行.

Java 语言几句有编译型语言的特征, 也具有解释型语言的特征, 因为 Java 程序要经过先编译, 后解释两个步骤,由 Java 编写的程序需要先经过编译步骤, 生成字节码 (*.class 文件), 这种字节码必须在经过 JVM, 解释成操作系统能识别的机器吗, 由操作系统执行. 因此, 我们可以认为 Java 语言编译和解释并存.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何删除EXCELL文件中的空行?
  • leaflet加载GeoServer的WMS地图服务.md
  • C++学习笔记(34)
  • [Excel VBA]如何使用VBA按行拆分Excel工作表
  • Qwen 2.5:阿里巴巴集团的新一代大型语言模型
  • 【FFmpeg应用场景概述】
  • ZLMediaKit Windows编译以及使用
  • Java设计模式——工厂模式扩展
  • python CRC16校验
  • DSP学习00-F28379D学习准备(了解一个工程的构成)
  • Linux容器化管理——Docker常见命令总结
  • C语言编译四大阶段
  • C++速通LeetCode中等第3题-盛最多水的容器
  • 脱离枯燥的CRUD,灵活使用Mybatis,根据mybatis动态的xml片段和接口规范动态生成代理类,轻松应付简单业务场景。
  • JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
  • [数据结构]链表的实现在PHP中
  • __proto__ 和 prototype的关系
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • C学习-枚举(九)
  • JS变量作用域
  • ReactNativeweexDeviceOne对比
  • SegmentFault 2015 Top Rank
  • spark本地环境的搭建到运行第一个spark程序
  • Xmanager 远程桌面 CentOS 7
  • 创建一个Struts2项目maven 方式
  • 从0实现一个tiny react(三)生命周期
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 浅谈Golang中select的用法
  • 线上 python http server profile 实践
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #QT(一种朴素的计算器实现方法)
  • $GOPATH/go.mod exists but should not goland
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • .mysql secret在哪_MySQL如何使用索引
  • .NET C# 操作Neo4j图数据库
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET成年了,然后呢?
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [android] 切换界面的通用处理
  • [BJDCTF2020]The mystery of ip
  • [C#]实现GRPC通讯的服务端和客户端实例
  • [C#]手把手教你打造Socket的TCP通讯连接(一)