Java基础常识

news2024/11/18 21:47:39

目录

JDK和JRE和JVM分别是什么?有什么关系?

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

Java 程序从源代码到运行的过程

为什么 Java语言"编译与解释并存"

Java 和 C++、Go 语言的区别,各自的优缺点?


JDK和JRE和JVM分别是什么?有什么关系?

首先JVM是Java虚拟机,专门用来运行字节码文件,JVM是实现Java跨平台的关键所在,JVM屏蔽了各种不同的操作系统之间的差异,使得同样的Java程序可以在不同的操作系统上运行出相同的结果.

JRE 是 Java运行时环境包含Java已经编译好必备的软件环境,包含了JVM,JRE只能运行程序,不能创建Java程序.

JDK 是Java开发者工具包,包含了JRE,JVM,调试分析等工具,用来创建和编译Java程序,如果想使用Java进行开发,那么就需要安装JDK.

三者的关系就是 : JRE包含JVM, JDK包含了 JRE,JVM

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

JVM能够理解并且能够运行的代码就是字节码. 字节码只面向虚拟机,不针对特定的一种机器.

字节码解决了传统解释性语言效率低的问题,同时也保留了传统解释性语言的可移植性,使得Java可移植性强实现跨平台,其次,不同的操作系统对应着不同的JVM,但是字节码是通用的,可以使得Java程序无需重新编译,就可以在不同操作系统上/平台上运行. 也就是所谓的 "一次编译,到处运行".

main方法可以被其他方法调用么 ? 

Java 程序从源代码到运行的过程

 我们写的Java程序也就是.java文件会先使用Javac进行编译生成.class文件也就是字节码文件,然后会通过解释器逐行进行解释,但是当我们的方法/代码块多次执行这时这段代码会被认为是热点代码,于是就会交给Java即时编译器JIT来进行运行,经过JIT编译后会将字节码文件保存起来,当下一次使用的时候可以直接使用,这样的速度就会提升很多, JIT编译器属于运行时编译,经过解释器 & JIT即时编译器 进行解释/编译 最终会生成机器可以理解的机器码,然后交给机器来运行.

为什么 Java语言"编译与解释并存"

首先解释一下 什么是 "编译型语言"  和 "解释型语言"

"编译型语言" : 编译型语言是一次性的将源代码翻译成 机器所能理解的机器码,执行速度非常的快,但是开发效率比较低, 比如 C, C++, Rust

"解释型语言" : 解释型语言是每执行代码,一句一句的将源代码翻译成机器所能理解的机器码,执行速度满, 但开发效率比较高, 比如 JS, python.

为什么Java语言是 "解释与编译并存的" ?  

Java语言是会先将源代码经过Javac进行编译成.class文件,也就是字节码,然后在通过 解释器&JIT来解释/编译生成平台所能理解的机器码,所以Java语言是解释与编译并存的.

Java 和 C++、Go 语言的区别,各自的优缺点?

  • Java
    • 优点
      • Java语言使用起来简单,语法简便
      • Java可以实现跨平台,一次编译,到处运行
      • Java可移植性高,强大的生态
      • 面向对象程序,具有 继承,封装,多态的特征
      • Java无需手动释放内存,自动内存管理,减少了内存泄漏的风险
    • 缺点
      • 由于JVM的存在,运行速度比较慢
      • 对于实时性比较高的场景,不如C++,Go这样的编程语言.
  • C/C++
    • 优点
      • 速度快,适合编写需要高性能的应用程序
      • 应用广泛,特别是在游戏开发、操作系统和嵌入式系统开发方面
      • 灵活性高,可以直接访问硬件和内存
    • 缺点
      • 学习难度较高,需要掌握指针、内存管理等底层知识
      • 容易出现内存泄漏和指针错误等问题
      • 编写代码过程中需要更多的手动管理,相比Java更容易出错
  • Go
    • 优点
      • 高并发,天生支持协程,能够轻松编写高效的并发程序
      • 简单易学,语法简洁,上手容易
      • 静态类型语言,可以避免一些潜在的运行时错误
      • 快速编译,可以快速构建和部署应用程序
    • 缺点
      • 缺乏丰富的类库,与Java和C++相比有些不足
      • 在一些性能要求极高的场景中可能不如C++表现
      • 语言本身还比较年轻,相关生态和工具还需要进一步完善

参考 : Java基础常见面试题总结(上) | JavaGuide(Java面试+学习指南)

编程导航面试题部分 : 编程导航 - 做您编程路上的导航员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink相关介绍

简介 Flink的定位是:Apache Flink是一个框架和分布式处理引擎,如图所示,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境运行,以内存执行速度和任意规模来执行计算。 Flink 框架处理流程应用场景 1、电…

程序员应该如何学习算法?

算法不是纯粹拼智商的,初学者不要上来直接撸《算法导论》!这是血泪 建议一:首先你得会一门程序设计语言 建议二:基础知识,数据结构,推荐大家看一下《大话数据结构》这本书,这本书看过感觉&…

华为OD机试用Python实现 -【连续字母长度 or 求第 K 长的字符串长度】 | 2023.Q1 A卷

华为OD机试题 本篇题目:连续字母长度 or 求第 K 长的字符串长度题目输入描述输出描述示例一输入输出说明示例二输入输出说明示例三输入输出说明Code代码编写逻辑最近更新的博客 华为od 2023 | 什么是华为od,od

zookeeper使用场景实战

ZK java客户端 zk官方客户端没有和服务端分离,同一个jar文件,我们直接引入zk的maven即可。注意版本匹配兼容 Curator curator java语言编程的zk客户端框架,curator项目是现在zk客户端中使用最多。 将我们平时使用的zk服务开发进行了封装&a…

【Linux】进程状态(阻塞、挂起、僵尸进程)

文章目录1 阻塞与挂起1.1 阻塞1.2 挂起2 进程状态前言: 当我们在Windows下双击运行一个程序,或是在Linux下通过 ./ 加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当…

科技和女性的今天,《赛博格宣言》半个世纪前就预言了

近几年,我们团队在实地探访各行各业数字化时,格外关注女性工作者的存在,一个强烈感受是:和女性主义理论中说的一样,因为有了数字化技术,工作对于体力、精力等要求不再苛刻,岗位上的女员工就多了…

设计模式~门面(外观)模式(Facade)-08

目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式&am…

类和对象万字详解

目录 一、面向对象与面向过程的区别 面向过程: 面向对象: 二、类的引入 class与struct爱恨情仇 class的语法 类的定义: 类的限定访问符 类的实例化 类对象模型 this指针的应用 三、封装 四、类的六个默认成员函数 构造函数 再谈…

基于NMOSFET的电平转换电路设计

一、概述: 在单片机系统中,5V、3.3V是芯片常用的电平。而在传输协议中(如IIC、SPI等协议),存在芯片与芯片的高电平和低电平定义的范围不一样,所以需要存在一个电平转换电路,来使芯片与芯片之间顺利的传输。 二、前置…

JDK动态代理(tedu)(内含源代码)

JDK动态代理(tedu)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546187 目录JDK动态代理(tedu)(内含源代码)源代码下载链接…

vue2学习笔记

文章目录1. 初识Vue2. 模板语法3. 数据绑定4. el与data的两种写法5. Vue中的MVVM6. 数据代理Object.defineProperty方法何为数据代理Vue中的数据代理7. 事件处理事件的基本使用事件修饰符键盘事件8. 计算属性姓名案例_插值语法实现姓名案例_methods实现姓名案例_计算属性实现姓…

dp-过河卒

题目描述 如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。 例如上图

【HashMap】| 深度剥析Java SE 源码合集Ⅱ | 你会吗?

目录一. 🦁 HashMap介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 成员变量2.1.2 存储元素的节点类型2.1.2.1 链表Node类2.1.2.2 树节点类2.1.2.3 继承关系2.2 方法实现2.2.1 HashMap的数组初始化2.2.2 计算hash值2.2.3 添加元…

HTML URL

HTML 统一资源定位器 (Uniform Resource Locators) URL 是一个网页地址。 URL 可以由字母组成,如 "w3cschool.cn",或互联网协议(IP)地址: 120.79.88.157。大多数人进入网站使用网站域名来访问,因…

主流的“对象转换工具”使用示例大全以及性能的对比

目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct(推荐) ModelMapper OriK…

使用Vue实现数据可视化大屏功能(二)

引入数据大屏相关组件 用Datav插件做大屏可视化的组件,官网地址 http://datav.jiaminghi.com/ ,整个组件库都是基于Vue React版本实现,主要用于构建大屏数据可视化页面,具有很多种类的组件可以使用。其安装方式如下。 npm instal…

WebRTC中的NAT穿透

NAT简介 我们知道,WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下,实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。 我们先简单了解下NAT。NAT在真实网络中是常见的,它的出现一是为了解决ipv4地址不够…

2.1操作系统-进程管理:进程的同步与互斥、信号量与PV操作、PV操作与互斥模型、PV操作与同步模型

2.1操作系统-进程管理:进程的同步与互斥、信号量与PV操作、PV操作与互斥模型、PV操作与同步模型进程的同步与互斥PV操作PV操作与互斥模型PV操作与同步模型进程的同步与互斥 进程是动态的,有一些动态变迁的过程,进程在计算机中是可以同时存在…

JavaEE简单示例——Spring框架的简单介绍

简单介绍: 在我们之前创建的Java项目中,会发现我们的各种类,接口文件和配置文件都放在了一起,虽然我们也做了一些包管理去管理我们的这些文件,但是对于我们来说,这些操作还是太繁琐了,尤其是当…

Spark-RDD创建、并行分区

集合(内存)中创建 RDD 外部存储(文件)创建 RDD 并行与分区 分区的设定 集合(内存)中创建 RDD 从集合中创建 RDD,Spark 主要提供了两个方法:parallelize 和 makeRDD,从…