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

第一章 JAVA入门

文章目录

  • 1.2 Java 的特点
  • 1.2.1 简单
  • 1.2.2 面向对象
  • 1.2.3 与平台无关
  • ① 平台与机器指令
  • ② C/C++程序依赖平台
  • ③ Java 虚拟机与字节码
  • 1.2.4 多线程
  • 1.2.5 动态
  • 1.30安装 JDK
  • 1.3.1 平台简介
  • 0 Java SE
  • ②Java EE
  • 1.4 Java 程序的开发步骤
  • ②保存源文件
  • 1.5.2 编译
  • 1.8 Java之父-James Gosling
  • 1.9 小结

1.2 Java 的特点

Java是目前使用最为广泛的网络编程语言之一,它具有语法简单、面向对象、稳定、与平台无关、多线程、动态等特点,与平台无关是Java最初风靡世界的最重要的原因。

1.2.1 简单

如果读者学习过C++语言,会感觉Java很眼熟,因为Java中许多基本语句的语法和C++语言是一样的,像常用的循环语句、控制语句等几乎和C++相同。需要注意的是,Java和C++是完全不同的语言,Java和C++各有各的优势,将会长期并存下去,Java语言和C++语言已经成为软件开发者应当掌握的基础语言。如果从语言的简单性方面看,Java要比C++简单,C++中许多容易混淆的概念或者被Java弃之不用了,或者以一种更清楚、更容易理解的方式实现,例如Java中不再有指针的概念。

1.2.2 面向对象

基于对象的编程更符合人的思维模式,使人们更容易解决复杂的问题。Java是面向对象的编程语言,本书将在第4~7章详细、准确地介绍类与对象、子类与继承、接口与实现以及内部类与异常类等重要概念。

1.2.3 与平台无关

Java语言的出现源自对独立于平台的语言的需要,希望用这种语言能编写出可嵌入各种家用电器等设备的芯片上且易于维护的程序。但是,人们发现当时的编程语言(例如C、C++)有一个共同的缺点,那就是只能对特定的中央处理器(Central Processing Unit,CPU)芯片进行编译。这样,一旦电器设备更换了芯片就不能保证程序的正常运行,就可能需要修改程序并针对新的芯片重新进行编译。

Java语言和其他语言相比,最大的优势就是编写的软件能在执行码上兼容,在所有的计算机上运行。Java之所以能做到这一点,是因为Java可以在计算机的操作系统之上再提供一个Java运行环境(Java Runtime Environment JRE).该运行环境由Java虚拟机(JavaVirtual Machine,JVM)、类库以及一些核心文件组成,也就是说,只要平台提供了Java 运行环境,用Java 编写的软件就能在其上运行

① 平台与机器指令

无论用哪种编程语言编写的应用程序,都需要经过操作系统和处理器来完成程序的运行,因此这里所指的平台由操作系统(Operating System,OS)和中央处理器(CPU)所构成。与平台无关是指软件的运行不因操作系统、中央处理器的变化而无法运行或出现运行错误。

每个平台都会形成自己独特的机器指令。所谓平台的机器指令,就是可以被该平台直接识别、执行的一种由0.1组成的序列代码。相同的CPU和不同的操作系统所形成的平台的机器指令可能是不同的。例如,某种平台可能用8位序列代码00001111表示加法指令,用10000001表示减法指令;而另一种平台可能用8位序列代码10101010表示加法指令,用10010011表示减法指令。

② C/C++程序依赖平台

现在分析一下为何用C/C++语言编写的程序可能因为操作系统的变化、中央处理器升级导致程序出现错误或无法运行。

C/C++针对当前C/C++源程序所在的特定平台对其源文件进行编译、连接,生成机器指令,即根据当前平台的机器指令生成可执行文件,那么可以在任何与当前平台相同的平台上运行这个可执行文件。但是,不能保证C/C++源程序所产生的可执行文件在所有的平台上都能正确地被运行,其原因是不同平台可能具有不同的机器指令(如图 1.2 所示)。因此,如果更换平台,可能需要修改源程序,并针对新的平台重新编译源程序。

在这里插入图片描述

③ Java 虚拟机与字节码

Java语言和其他语言相比,最大的优势就是它与平台的无关性。这是因为Java可以在平台之上再提供一个Java 运行环境,该Java 运行环境由Java虚拟机、类库以及一些核心文件组成。Java虚拟机的核心是所谓的字节码指令,即可以被Java虚拟机直接识别、执行的一种由0.1组成的序列代码,字节码并不是机器指令,因为它不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同平台提供的Java虚拟机的字节码指令都是相同的,例如所有的虚拟机都将11110000识别、执行为加法操作。

和C/C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”,例如Java源文件中的+被编译成字节码指令 11110000。字节码是可以被Java虚拟机识别、执行的代码,即Java虚拟机负责解释、运行字节码,其运行原理是Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码,如图1.3所示。
在这里插入图片描述

在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用。字节码由Java虚拟机负责解释、运行,即Java虚拟机负责将字节码翻译成本地计算机的机器码,并将机器码交给本地的操作系统运行

1.2.4 多线程

Java 的特点之一就是内置了对多线程的支持。多线程允许同时完成多个任务。实际上多线程使人产生多个任务在同时执行的错觉,因为目前计算机的处理器在同一时刻只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器的运行速度非常快,远远超过了人接收信息的速度,所以给人的感觉好像多个任务在同时执行。C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

1.2.5 动态

在学习了第4章之后,读者就会知道Java程序的基本组成单元就是类,有些类是用户自己编写的,有些是从类库中引入的,而类又是在运行时动态装载的,这就使得Java可以在分布式环境中动态地维护程序及类库。C/C++在编译时就将函数库或类库中被使用的函数、类同时生成机器码,那么每当其类库升级之后,如果C/C++程序想具有新类库提供的功能,程序就必须重新修改、编译。

1.30安装 JDK

Java要实现“编写一次,到处运行(write once,run anywhere)”的目标,就必须提供相应的Java运行环境,即运行Java程序的平台。

1.3.1 平台简介

0 Java SE

Java SE(曾称为J2SE)称为Java标准版或Java标准平台。Java SE提供了标准的JavaDevelopment Kit(JDK)。利用该平台可以开发Java 桌面应用程序和低端的服务器应用程序。当前较新的JDK版本为JDK 14。

②Java EE

Java EE(曾称为J2EE)称为Java企业版或Java企业平台。使用Java EE可以构建企业级的服务应用,Java EE平台包含了Java SE平台,并增加了附加类库,以便支持目录管理、交易管理和企业级消息处理等功能。

1.4 Java 程序的开发步骤

在这里插入图片描述

①编写源文件

使用一个文本编辑器,例如记事本(可以在Windows附件中找到记事本notepad)来编写源文件。注意,不可使用非文本编辑器,例如Word编辑器。另外,要将编写好的源文件保存起来,源文件的扩展名必须是.java。

②编译源文件

使用Java 编译器(javac.exe)编译源文件,得到字节码文件。

③运行程序

使用Java SE平台中的Java解释器(java.exe)来解释、执行字节码文件。

②保存源文件

如果源文件中有多个类,那么最多有一个类是 public类;如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是,java;如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名是.java就可以了。

1.5.2 编译

在保存了Hello,java 源文件之后,就可以使用Java 编译器(javac.exe)对其进行编译。

使用JDK环境开发Java程序需打开MS-DOS命令行窗口(在Windows系统中称命令提示符),可以单击计算机左下角的“开始”,在“Windows系统”下找到“命令提示符”选项,单击该选项打开MS-DOS命令行窗口;或右击计算机左下角的“开始”,找到“运行”选项,单击该选项,在弹出的对话框中输入“cmd”,打开MS-DOS命令行窗口。用户需要掌握几个简单的DOS操作命令:从逻辑分区C转到逻辑分区D,需在命令行中依次输入D和冒号并回车确认;进入某个子目录(文件夹)的命令是“cd目录名”;退出某个子目录的命令是“cd…”,例如从目录 example 退到目录 boy 的操作是“C:\boy>example> cd…”。

1.8 Java之父-James Gosling

1990年Sun公司成立了由James Gosling领导的开发小组,开始致力于开发一种可移植的、跨平台的语言,该语言能生成正确运行于各种操作系统及各种CPU芯片上的代码。他们的精心研究和努力促成了Java语言的诞生。1995 年5 月 Sun公司推出的Java DevelopmentKit 1. 0a2版本标志着Java的诞生。美国的著名杂志PC Magazine将Java语言评为1995年十大优秀科技产品之一。Java的快速发展得益于Internet和Web的出现,Internet上的各种不同计算机可能使用完全不同的操作系统和CPU芯片,但仍希望运行相同的程序,Java的出现标志着分布式系统的真正到来。

1.9 小结

(1)Java语言是面向对象编程语言,编写的软件与平台无关。Java语言涉及网络、多线程等重要的基础知识,特别适合于Internet应用的开发。很多新的技术领域都涉及了Java语言,学习和掌握Java已成为人们的共识。

(2) Java源文件由若干个书写形式互相独立的类组成。开发一个Java程序需经过3个步骤,即编写源文件、编译源文件生成字节码和加载运行字节码。

(3)编写代码务必遵守行业的习惯及风格。

相关文章:

第一章 JAVA入门

文章目录 1.2 Java 的特点1.2.1 简单1.2.2 面向对象1.2.3 与平台无关① 平台与机器指令② C/C程序依赖平台③ Java 虚拟机与字节码1.2.4 多线程1.2.5 动态1.30安装 JDK1.3.1 平台简介0 Java SE②Java EE1.4 Java 程序的开发步骤②保存源文件1.5.2 编译1.8 Java之父-James Gosli…...

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树,是一种特殊的树,特点是树的度小于等于2(树的度是整个树的结点的度的最大值),由于该特性,构建二叉树的结点只有三个成员,结点的值和指向结点左、右子树的指针。 typedef int DateType; t…...

Apollo配置中心及Python连接

本文将会介绍如何启动Apollo,在Apollo中配置参数,以及如何使用Python连接Apollo. Apollo介绍 在文章Python之读取配置文件和文章Python之配置文件处理中,笔者分别介绍了如何使用Python来处理ini, yaml, conf等配置文件。这种配置方式比较方便…...

LuatOS-SOC接口文档(air780E)--audio - 多媒体音频

常量 常量 类型 解释 audio.PCM number PCM格式,即原始ADC数据 audio.MORE_DATA number audio.on回调函数传入参数的值,表示底层播放完一段数据,可以传入更多数据 audio.DONE number audio.on回调函数传入参数的值,表示…...

Golang gorm manytomany 多对多 更新、删除、替换

Delete 移除 只删除中间表的数据 删除原有的 var a Article1db.Preload("Tag1s").Take(&a, 1)fmt.Printf("%v", a) {1 k8s [{1 cloud []} {2 linux []}]}mysql> select * from article1; ------------ | id | title | ------------ | 1 | k8s …...

FPGA-结合协议时序实现UART收发器(四):串口驱动模块uart_drive、例化uart_rx、uart_tx

FPGA-结合协议时序实现UART收发器(四):串口驱动模块uart_drive、例化uart_rx、uart_tx 串口驱动模块uart_drive、例化uart_rx、uart_tx,功能实现 文章目录 FPGA-结合协议时序实现UART收发器(四)&#xff1…...

Transformers-Bert家族系列算法汇总

🤗 Transformers 提供 API 和工具,可轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本、碳足迹,并节省从头开始训练模型所需的时间和资源。这些模型支持不同形式的常见任务,例如: 📝 自…...

Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3

文章目录 信息收集主机发现端口扫描dirsearch扫描gobuster扫描 漏洞利用缓冲区溢出edb-debugger工具msf-pattern工具 docker容器内提权tcpdump流量分析容器外- sudo漏洞提权 靶机文档:HarryPotter: Fawkes 下载地址:Download (Mirror) 难易程度&#xff…...

【服务器】ASUS ESC4000-E11 安装系统

ASUS ESC4000-E11说明书 没找到 ASUS ESC4000-E11的说明书,下面是ESC4000A-E11的说明书: https://manualzz.com/doc/65032674/asus-esc4000a-e11-servers-and-workstation-user-manual 下载地址: https://www.manualslib.com/manual/231379…...

创建java文件 自动添加作者、时间等信息 – IDEA 技巧

2023 09 亲测 文章目录 效果修改位置配置信息 效果 每次创建文件的时候,自动加上作者、时间等信息 修改位置 打开:File —> Settings —> Editor —> File and Code Templates —> includes —> FileHeader 配置信息 /*** author : Java…...

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

Java学习之--类和对象

💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…...

Unity技术手册-UGUI零基础详细教程-Canvas详解

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...

破天荒呀!小杜微信有名额了

写在前面 小杜粉,众所周知前面加小杜微信为好友的基本都是由名额限制的。一般都是付费进入社群且进行备注,小杜才会长期保留微信好友。主要由于,添加的人数太多了,微信账号人数名额有限。因此,小杜过一段时间&#xf…...

领域驱动设计:领域模型与代码模型的一致性

文章目录 领域对象的整理从领域模型到微服务的设计领域层的领域对象应用层的领域对象 领域对象与微服务代码对象的映射典型的领域模型非典型领域模型 DDD 强调先构建领域模型然后设计微服务,以保证领域模型和微服务的一体性,因此我们不能脱离领域模型来谈…...

TypeScript命名空间和模块

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 命名空间(Namespace) 命名空间(Namespace)使用场景 第三方库 兼容…...

C++学习笔记--函数重载(1)

文章目录 序言一、洞悉函数重载决议1.1、重载决议的基本流程1.2、Name Lookup1.2.1、Qualified Name Lookup1.2.1.1、Class Member Lookup1.2.1.2、Namespace Member Lookup 1.2.2、Unqualified Name Lookup1.2.2.1、Usual Unqualified Lookup1.2.2.2、Argument Dependant Look…...

交叉编译poco-1.9.2

目录 一、文件下载二、编译三、可能遇到的问题和解决方法3.1 error "Unknown Hardware Architecture."3.2 error Target architecture was not detected as supported by Double-Conversion一、文件下载 下载地址:poco-1.9.2 二、编译 解压目录后打开build/config/…...

C++中如何处理超长的数字(long long类型的整数都无法存储的)

C中如何处理超长的数字(long long类型的整数都无法存储的) 在 C中,如果数字超出了 long long 类型的范围,可以考虑使用字符串或第三方库(如 Boost.Multiprecision)来表示和处理超长数字。要使用第三方库需…...

RabbitMQ MQTT集群方案官方说明

RabbitMQ MQTT 官方网说明 官方地址: https://www.rabbitmq.com/mqtt.html 从3.8开始,该MQTT插件要求存在一定数量的群集节点。这意味着三分之二,五分之三,依此类推。 该插件也可以在单个节点上使用,但不支持两个节点的集群。 如…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...