谈谈对Java“Write once, run anywhere“的理解《轻松搞定大厂面试》

简介: 谈谈对Java“Write once, run anywhere“的理解《轻松搞定大厂面试》

简介

相信很多Java初学者都听说过Java的"一次编写,到处运行"。

这句话描述的是Java语言跨平台的特性。

这个特性,也是最开始Java打开市场最关键的部分。及时经过了

理解

Java跨平台的特性与Java虚拟机(JVM)是紧密联系的,通过JVM,Java才可以在不同的系统环境中运行。

比如说在Windows、Linux等平台都有对应的JDK,开发者只需要安装好JDK,便可以运行Java语言。

其实Java语言本质上和其他的编程语言并没有非常大的区别,严格来说,Java语言跨平台,只是因为在不同的平台上,都有可以让Java运行起来的环境。所以就有了那句话"一次编写,到处运行"。


而JVM语言并不是跨平台的,在不同的平台上,都需要有对应的JVM环境,否则Java无法运行。Java语言哪有什么到处运行,只是有JVM在为Java负重前行。


跨平台的语言其实很多,只是Java算是其中比较成熟的一种,而且名气非常大。


“一次编写,到处运行”这种效果跟编译器有关。JVM相当于提供了一个Java程序运行的平台。


Java程序中一段代码的生命周期一般是这样的:


编码 → Javac 编译字节码 → JVM 编译机器码 → 运行 → 调试


在编译阶段,Java体现了跨平台的特点。


编译过程大体是这样的:


1.Java源代码通过javac编译成.class字节码文件(前端编译器进行编译)


image.png

2.class就是可以到处运行的文件(通过JVM),然后.class文件会被JVM解释/编译成目标机器的代码(后端编译器进行编译/解释)

“到处运行”的关键和前提就是JVM。在第二次编译中JVM才是关键。

图片理解

image.png

扩展

运行于JVM上的其他语言

JVM字节码存在着一些规范,所以一些符合JVM字节码规范的文件都可以在JVM上运行的。

所以也给其他运行在JVM上的语言提供了一个平台(比如:Scala、Groovy、Kotlin…),可以扩展出一些Java没有实现的特性或者一些语法糖

Java语法糖

语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,只是为了更方便程序员使用,提高开发效率。说白了,语法糖就是对现有语法的一个封装。


Java作为一种与平台无关的高级语言,当然也含有语法糖,这些语法糖并不被虚拟机所支持,在编译成字节码阶段就自动转换成简单常用语法。一般来说Java中的语法糖主要有以下几种:

  • 泛型与类型擦除
  • 自动装箱与拆箱,变长参数、条件编译
  • 增强for循环
  • 内部类与枚举类

下篇预告

这个问题,极有可能引出下一个问题。

Java是解释执行还是编译执行?下篇为大家讲解。

文章都看完了,点个赞支持一下呗。

目录
相关文章
|
19天前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
19天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37
|
19天前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
19天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
19天前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
19天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
19天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
19天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
下一篇
无影云桌面