首页 > 编程语言 >JavaSE1️⃣简介

JavaSE1️⃣简介

时间:2022-12-18 01:12:31浏览次数:75  
标签:JavaSE1 Java 字节 简介 编译 JVM java Hello

1、历史背景

20 世纪 90 年代初,James Gosling(SUN 公司,已被 Oracle 收购)开发。

一门面向对象的编程语言。

  1. 最初命名 Oak(橡树),目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。
  2. 互联网的崛起让 Oak 焕发生机,SUN 公司改造 Oak 并于 1995 年以 Java 名称正式发布(原因是 Oak 已经被人注册)。
  3. 随着互联网的高速发展,Java 渐成为最重要的网络编程语言。

2、特点

2.1、语言

2.1.1、特点

编译型 & 解释型

  • 编译型语言:如 C、C++。
    1. 代码直接编译成机器码执行。
    2. 不同平台(X86、ARM 等)CPU 指令集不同,因此需要为每种平台编译对应的机器码。
  • 解释型语言:如 Python、Ruby。
    1. 由解释器直接加载源码并运行。
    2. 运行效率太低。

Java:一门面向对象的编程语言,介于编译型语言和解释型语言之间。

  1. 将代码编译成字节码,类似于抽象的CPU指令。
  2. 只需要针对不同平台编写 JVM(虚拟机),JVM 负责加载字节码并执行,实现“一次编写,到处运行”的效果。
  3. Java 具有跨平台性,JVM 与平台相关。为保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列 JVM 规范。
  4. 从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。

2.1.2、对比

  • 静态语言:运行时结构不可变,如 Java、C、C++。
  • 动态语言:运行时可以改变结构,如 Object-C、C#、JS、PHP、Python。

JS

JS Java
含义 基于对象的脚本语言,提供了丰富的内部对象 面向对象,需要涉及对象
执行 浏览器解释执行 先编译为字节码,通过解释器或编译器转为机器码
变量类型 弱类型,无需声明,解释器在运行时检查数据类型 强类型,需实现声明变量类型
动态联编,对象引用在运行时检查 静态联编,对象引用在编译时进行

C

C Java
面向 面向过程
(C++、C# 支持面向对象)
面向对象
执行 (编译式语言)
编译、链接后生成机器码
(解释性语言)
编译成字节码文件,由解释器解释执行,热点代码由 JIT 编译成机器码
跨平台
指针、运算符重载
多重继承 ❌,只支持多重实现
内存管理 可直接操作内存,需要对内存进行显式管理 无法直接操作内存,GC 机制自动内存管理
数据类型所占字节数 在不同平台不固定 固定

Python

Python Java
效率 方便调用 C 语言函数 或 C++ 库 虚拟机比 Python 强大
偏向 数据分析 商业开发
语言 弱类型(动态) 强类型(静态)
执行 直接运行 先编译为字节码,通过解释器或编译器转为机器码
变量 不需要声明 需要声明

2.2、版本

2.2.1、不同版本

  1. Java EE(Enterprise):SE 的基础上添加 API 和库,方便开发 web 应用、数据库、消息服务等。
  2. Java SE(Standard):包含标准的 JVM 和标准库
  3. Java ME(Micro):针对嵌入式设备的微版本。
  • SE 的标准库无法在 ME 上使用,JVM 也是“瘦身版”。
  • 没有真正流行,不建议学习。

2.2.2、版本号

发布时间线

1995 发布 1.0,目前最新版本 19。

时间 版本
1995 1.0
1998 1.2
2000 1.3
2002 1.4
2004 1.5 / 5.0
2005 1.6 / 6.0
2011 1.7 / 7.0
2014 1.8 / 8.0
2017/9 1.9 / 9.0
2018/3 10
2018/9 11
2019/3 12
2019/9 13
2020/3 14
2020/9 15
2021/3 16
2021/9 17
2022/3 18
2022/9 19

版本新功能

  • 5
    • 泛型
    • 枚举,switch 枚举
    • 自动装拆箱
    • foreach 循环
    • 可变参数
    • 静态导入(无需指定类名,直接调用静态结构,前提是导包)
    • 内省
  • 6:GUI
  • 7
    • switch-字符串
    • 泛型集合:泛型实例化类型自动推断。
    • 集合增强:直接用中括号、大括号进行初始化。
    • multi-catch:单个 catch 捕获多个异常类型,用 | 隔开
    • twr:在 try 括号内,指定要使用和自动释放的资源
  • 8
    • 接口默认方法:使用 default 关键字,实现方法
    • lambda 表达式

2.3、名词解释

JRE & JDK

  • JRE(Java Runtime Environment):JVM + Runtime Library
  • JDK(Java Development Kit):JRE + Compiler, debugger, etc

JSR & JCP

  • JSR(Java Specification Request):为保证 Java 语言规范性而提出。在 Java 平台上开发功能之前,需要创建 JSR 以定义接口规范。
  • JCP 组织(Java Community Process):负责审核 JSR 的组织。

RI & TCK

一个 JSR 规范发布时,需要同时发布一个 RI 和 TCK 以供参考。

  • RI(Reference Implementation)
  • TCK(Technology Compatibility Kit)

示例:有人提议开发某个功能 A,需要贴出能跑的代码(RI);为了保证不同人所开发的 A 的接口、功能完全相同,需要提供相关的测试套件(TCK)。

通常,RI 只是“能跑”的正确代码,不追求性能。因此,RI 仅作为参考,不会作为最终使用的产品。

3、安装

3.1、安装步骤

以 Windows 为例

  1. Oracle 官网:找到需要的版本,下载安装。

  2. 配置环境变量

    变量 备注
    JAVA_HOME JDK 安装路径 新增变量,提供给其它程序使用
    Path %JAVA_HOME%\bin 新增值,在任意路径都可以运行 Java
  3. 验证:打开命令提示符窗口(CMD),确认输出正确的 Java 版本。

    java -version
    

3.2、目录介绍

3.2.1、目录

  • bin 目录:二进制执行文件(.exe
    • javac:Java 编译器。将 Java 源文件(.java)编译为字节码文件(.class)。
    • java:启动 JVM 进程。用于执行字节码文件(.class)。
    • jar:打包工具。将一组字节码文件(.class)打包成一个 .jar 文件,便于发布。
    • javadoc:文档生成工具。从源码中自动提取注释并生成文档。
    • jdb:Java 调试器。用于开发阶段的运行调试。
    • ...
  • db 目录:小型数据库 JavaDB。
  • include 目录:存放开放 JDK 使用的 C 语言的头文件。
  • jre 目录:JRE 根目录,包含 bin 目录(含 JVM)、lib 目录(基础类库),但不包含开发工具。
  • lib 目录:Java 类库或库文件。

3.2.2、文件

  • src.zip:JDK 核心类源码
  • javafx-src.zip:JavaFX 源码

4、Java 编程

4.1、Hello World

  1. 编写代码:新建文本文档 Hello.java,输入以下代码。

    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
    
  2. 编译:进入 Hello.java 所在目录的命令行提示符(CMD),输入以下命令。

    # 成功执行后,当前目录会生成 Hello.class
    javac Hello.java
    
  3. 运行:输入以下命令,运行 Hello.class 文件。

    (Java 11+ 可直接运行单个 Java 文件,即 java Hello.java

    # 不需要输入后缀
    java Hello
    

4.2、IDE

集成开发环境(Integrated Development Environment)

好处:将项目开发涉及的操作集成到一个环境中,简化人工操作,提高开发效率。

  1. 开发:提示和自动补全,快速插入模板代码块。
  2. 编译运行:支持自动编译和运行。
  3. 调试:支持断点调试。
  4. ...

Java 常用 IDE

  1. IntelliJ IEDA(

    标签:JavaSE1,Java,字节,简介,编译,JVM,java,Hello
    From: https://www.cnblogs.com/secretmrj/p/15713589.html

相关文章

  • css样式补充,项目前置认知,精灵图,背景图片大小,阴影,过渡,SEO简介
    1、css样式补充,项目前置认知,字体图标学习目标:u能够在网页中使用精灵图u能够使用背景大小属性,设置背景图片的大小u能够认识CSS书写顺序,提高代码专业性和浏览器渲......
  • Redux 简介
    ReduxStore创建Redux是一个状态管理框架,可以与包括React在内的许多不同的Web技术一起使用。在Redux中,有一个状态对象负责应用程序的整个状态,这意味着如果有一个包含......
  • Redux 简介
    ReduxStore创建Redux是一个状态管理框架,可以与包括React在内的许多不同的Web技术一起使用。在Redux中,有一个状态对象负责应用程序的整个状态,这意味着如果有一......
  • 第二十章《Java Swing》第1节:Swing简介
    Java语言最早开发图形界面的应用程序被称为“AWT”,AWT是“AbstractWindowToolkit”的简称,“AbstractWindowToolkit”意为“抽象窗体工具包”。AWT组件并不是纯Java实现......
  • Python技能树丨Python简介
    ......
  • Grad-CAM简介-网络 热力图分析
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • hasattr()、getattr()、setattr()函数简介
    hasattr(object,name)判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法;有则返回True,没有则返回False;需要注意的是name参数是string类型,所以......
  • LINQ 查询简介 (C#)
    查询是一种从数据源检索数据的表达式。查询通常用专门的查询语言来表示。随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的SQL和用于XML的......
  • Django 简介
    Django简介Django是Python语言的Web框架,开源且免费,可以用于满足快速开发网站的需求。Django接管了Web开发过程中的方方面面,所以开发者可以专注于编写应用程序,而不需......
  • Nginx学习总结(1):Nginx简介
    (最近,部门组织了好几个技术兴趣小组,对当前的热门技术进行研究。我加入了Nginx学习小组,与几个同事一道围绕Nginx来进行研究和学习。从今天起,我会陆陆续续发一系列有关Nginx的......