最近看书被几个有意思的问题吸引:

你写java程序吗? 它的运行机制你懂多少?

你用eclipse开发吗?它的运行机制你懂多少?

你用tomcat 部署吗? 它的运行机制你懂多少?

你想过这些软件也是人开发出来的吗?依赖这么深入,哪天它不干了,你还干不干?

然后,让我就接着看了看,然后,让我们一起来看看java语言原理。【哈哈】

编译型语言   VS   解释型语言

编译型语言:

一提到编译型语言,“高效率、高级语言”等各高词汇跃然纸上,But  why?

编译型语言是通过专门的编译器,将高级语言【一次性翻译成】可被平台(如OS操作系统)执行的机器码,编译一次,脱离开发环境可独立运行,故效率高;但对编译器严重依赖,而不同操作系统所使用的编译器是各不相同的,所以造成了编译型语言可移植性差的特点。如同打包发布好的vs程序,不管放在windows哪个磁盘下,均可脱离vs执行;但把这个编译好的exe放到unix下,便是不可能正常set  up 的。这也就解释了它效率高,但跨平台可移植性差的特点。

解释型语言:

同样的,解释型语言也有专门的解释器,将原程序解释成特定的平台可执行文件,不同的是,解释型语言不会进行整体的编译,而是把编译和解释混合在一起执行。但解释性语言跨平台性好,只需通过不同的解释器,将其解释成某平台可识别的指令即可。这是编译的过程无法做到的。

类型

原理

优点

缺点

编译型

通过专门的编译器,将高级语言一次性翻译成可被平台执行的机器码

编译一次,脱离开发环境可独立运行,故效率高

对编译器严重依赖,可移植性差

解释性

专门的解释器,将原程序解释成特定的平台指令

跨平台性好,只需通过不同的解释器,将其解释成某平台可识别的指令即可

编译和解释混合在一起执行,导致效率低

JAVA ,你是哪一种?

在理清java原理之前,你不得不Know:

名称

描述

作用

特点

JVM

JAVA 虚拟机

用于提供java解释环境,形成可执行文件

不同平台JVM各有不同,但均提供相同接口

JRE

java运行环境

JDK

核心开发包

提供java编译器、运行相关环境、工具和类库

java原理:

使用java进行编程,首先源程序会通过编译,将java编译成class字节码,【默认路径为该JRE运行环境路径下】,在通过解释形成可执行文件,所以java既是解释型语言,又是编译型语言。

但它的精妙之处远不止于此。

首先通过编译器编译,将源程序编译形成class文件,由于不同平台JVM提供相同接口,故即便是不同平台下将java编译成class文件,但通过相同接口的JVM进行解释,均可将该环境下的字节码解释形成该平台下的可执行的java文件,同时,由于不同操作系统的JVM提供的均相同接口,不同平台的编译器则只需要面对该JVM接口进行编译,这些都决定了java语言具有良好的跨平台性、移植性。

Java环境变量的配置:

为什么需要进行配置环境变量,笔者不再赘述。通过理解上述原理,我们换个角度来分析java环境变量的配置。

【Path】

在JDK的安装路径下,我们很容易发现bin文件下的javac、java命令——分别用于执行【编译】和【解释】的操作。配置path环境变量便可实现直接找到这两个命令并运行。

【ClassPath】

而classpath变量,通过后来的学习得知,在jdk1.5以上版本便可以不用配置。首先要知道java源程序通过编译生成的class文件,默认会存储到JRE文件下,也就是java运行环境路径下,在1.5之前的jdk还没智能到可以自动找到编译好的类,进行下一步解释操作,故需要手动配置classpath,指明class文件路径,在执行java命令形成可执行文件。

【JavaHome】

另一个javahome再单独运行java程序时是不需要进行配置的,因为编译、解释均已通过javac 和java命令完成。但在tomcat、jboss部署时需要配置该环境变量。

回顾以前的疑惑,不管是编程上,还是工具使用上,大部分都是因为不同的原理,为什么tomcat启动报错?那是因为咱没懂它只知知其然而已。

JAVA程序运行原理——知其然,而知其所以然相关推荐

  1. HelloWord以及Java程序运行原理

    目录 第一个Java程序,HelloWorld Java程序是如何运行的 第一个Java程序,HelloWorld 创建文件 HelloWorld.java(文件名需与类名一致) public cla ...

  2. JAVA程序运行原理分析

  3. java原理教程,java基础之运行原理(一),java基础运行原理

    java基础之运行原理(一),java基础运行原理 java的核心配置:JDK JDK主要包括三个部分 1.Jre:java的运行环境 2.Java的工具:java的编译器(java.c.exe). ...

  4. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)

    java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...

  5. No.2第一章 启航 | Flink 知其然,知其所以然

    |文末 点击[在看]留言 反馈 | Flink知其然部分共有三个章节,其中 第一章 启航 部分会 从Flink的应用场景切入,让大家清楚的判断自己的业务场景是否适合使用Flink,同时介绍Flink的 ...

  6. 【转】可解释推荐系统:知其然,知其所以然

    原文标题:"可解释推荐系统:知其然,知其所以然" 原文地址:可解释推荐系统:知其然,知其所以然 又是需要学习的地方 近几年,人工智能的可解释性问题受到了来自政府.工业界和学术界的广 ...

  7. No.3 课程综述 | Flink 知其然,知其所以然

    |文末 点击[在看]留言 反馈 | 本节会向大家介绍本课的内容是如何安排的,每个部分要达成的目标和每个具体章节的内容细节摘要!让大家在进行课程学习之前对课程有一个整体了解. 课程综述 <Apac ...

  8. No.1 序 | Flink 知其然,知其所以然

    课程综述 <Apache Flink 知其然,知其所以然>课程,在内容上会先对Flink整体架构和所适用的场景做一个基础介绍,让你对Flink有一个整体的认识!然后对核心概念进行详细介绍, ...

  9. AI赋能传统行业:知其然并知其所以然 - 专访平安科技美国研究院院长韩玫

    ????点击上方蓝字星标"Robinly",获取更多重磅AI访谈 Robin.ly 是立足硅谷的视频内容平台,服务全球工程师和研究人员,通过与知名人工智能科学家.创业者.投资人和领 ...

  10. java 程序运行过程 简介

    这里的Java程序运行过程,是指我们编译好代码之后,在命令行开始执行java xxx命令,到java程序开始执行起来的这一过程,我们称其为运行时. 第一步,操作系统解析我们输入的java xxx命令, ...

最新文章

  1. xp/win7,添加开机启动项
  2. ubuntu系统无法ssh登录--安装openssh
  3. JAVA知识总结目录
  4. one thread one loop
  5. Jupyter中打印所有结果的解决办法
  6. Android ListView的基本应用
  7. 关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍
  8. Android 怎么退出整个应用程序?[转]
  9. java基于ssm的个人博客系统_一个基于 Spring Boot 的开源免费博客系统
  10. 机器学习(周志华)——决策树问题
  11. 创建loop15设备挂载镜像文件(.img)
  12. Win Form不能响应键盘事件
  13. Julia:关于push 与 Array 和Dict 数据结构
  14. 网课查题接口 搜题公众号对接题库教程 (附赠题库接口)
  15. CVE-2021-1675 Windows Print Spooler权限提升漏洞复现
  16. python中的ide是什么意思_用于Python的IDE是什么?
  17. 从12306.cn谈大网站架构与性能优化
  18. 电脑屏幕亮度,细说电脑屏幕亮度怎么调
  19. java读取execle
  20. HDU-5238 Calculator(线段树+中国剩余定理)

热门文章

  1. 计算机固态硬盘作用,固态硬盘是什么及作用
  2. swift 图片压缩
  3. SS LSTM全文翻译
  4. 浅谈非数学类全国大学生数学竞赛
  5. 1688API item_search_img - 按图搜索1688商品(拍立淘)
  6. PaddleDetection算法分析(7)
  7. 蜗牛星际安装U-NAS
  8. python选择题题库百度文库_Python题库
  9. java mvc接收json_详解springmvc 接收json对象的两种方式
  10. DELL G3 3690耳机插入不显示,没声音