Java 初识

Java 的发展历程

Sun 公司。

Oracle 公司。

[图片]

[图片]

普通版本,也叫过渡版本。
正式版本,也叫长期支持版本(LTS)。

Java SE,Java EE,Java ME

Java 技术体系分为三个平台:Java SE,Java EE,Java ME。

Java SE(Java Standard Edition,标准版):支持面向桌面级应用(如 Windows 系统下的应用程序)的 Java 平台,提供了完整的 Java 核心 API,此版本以前称为 J2SE。

Java EE(Java enterprise Edition,企业版):是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet,Jsp 等,主要针对于 Web 应用程序开发。此版本以前称为 J2EE。企业版相当于是在标准版基础上进行了一个扩展,可以支持更多的技术。

Java ME(Java Micro Edition,小型版):支持 Java 程序运行在移动终端(手机,PDA)上的平台,对 Java API 有所精简,并加入了针对移动终端的支持,此版本以前称为 J2ME。自从安卓出来后,Java ME 就很少有人用了。

Java 能做什么

[图片]

Java 的主要特性

[图片]

与 C 和 C++ 不同,Java 规范中没有 “依赖具体实现” 的地方。基本数据类型的大小以及有关运算的行为都是明确的。

例如,Java 中的 int 总是 32 位整数,而在 C 和 C++ 中,int 可能是 16 位整数、32 位整数,也可能是编译器开发商指定的任何其他大小。唯一的限制是,int 类型的字节数不能低于 short int,并且不能高于 long int。在 Java 中,数值类型有固定的字节数,这消除了代码移植时一个令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了有关字节顺序的困扰。字符串则采用标准的 Unicode 格式存储。作为系统组成部分的类库定义了可移植的接口。例如,有一个抽象 Window 类,并给出了面向 UNIX、Windows 和 Macintosh 环境的不同实现。

JVM 和 JDK

JVM:Java Virtual Machine,Java 虚拟机。

JRE:Java Runtime Environment,Java 运行环境。

JDK:Java Development Kit,Java 开发工具包。

JRE = JVM + 核心类库 + 运行工具

JDK = JVM + 核心类库 + 开发工具

核心类库:Java 已经写好的东西,直接拿来用即可。

开发工具:包括 javac(编译工具),java(运行工具),jdb(调试工具),jhat(内存分析工具)等。

运行工具是从开发工具中抽取出来的,比如去掉了编译工具 javac,调试工具 jdb 等,但是包括运行工具 java 等。

JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据,内存,寄存器。

JVM 是真正运行 Java 程序的地方。

不同的平台有不同的 JVM。JVM 机制屏蔽了底层运行平台的差别,实现了 “一次编译,处处运行”。

如果想要运行一个已经开发好的 Java 程序,计算机中只需安装 JRE 即可。

JDK 是提供给 Java 开发人员使用的,其中包含了 Java 的开发工具,也包括了 JRE,所以如果安装了 JDK,就不用再单独安装 JRE 了。

JDK 包含了 JRE,JRE 包含了 JVM。

因为不同的操作系统需要不同的 JVM,而 JVM 又是包含于 JDK 的,因此不同的操作系统就需要安装不同的 JDK。

跨平台的原理

Java 语言的跨平台是通过虚拟机实现的。

Java 语言不是直接运行在操作系统里面的。而是运行在虚拟机中的。

针对于不同的操作系统,安装不同的虚拟机就可以了。

在这里插入图片描述

一个编译好的 .class 文件,可以在多个操作系统中运行,只要这些平台安装了各自对应的 JVM 即可。因为有了 JVM,同一个 Java 程序就可以在不同的操作系统中执行,这样就实现了 Java 程序的跨平台性。

Java 程序执行原理

Java 是混合型语言,需要先编译,后解释执行。

在这里插入图片描述

编译器会给字节码文件自动命名,基本名和源文件名一致,扩展名为 .class

Java 程序不是直接运行在系统中的,而是运行在虚拟机中的。字节码文件在虚拟机中运行,虚拟机才是字节码文件真正运行的地方。

虚拟机总是从公共类的 main() 方法开始执行。

在 DOS 窗口运行 Java 源文件

先切换到源文件所在路径。

先将 Java 源文件 xxx.java 编译为字节码文件 xxx.class,在 DOS 窗口执行命令:

javac xxx.java

再运行字节码文件,在 DOS 窗口执行命令:

java xxx

例如:

[图片]

javac 命令来编译源文件(要带上后缀名),编译成计算机可执行的文件。其中 c 代表 compile。

javac.exe 是编译工具,java.exe 是运行工具。

编译得到后缀名为 .class 的文件。这是一个字节码文件。.class 文件不能直接被机器执行,需要用解释器解释执行。

用 java 命令执行 .class 文件(不带后缀名),得到结果。这是把 .class 文件装载到 JVM 中去执行。

Java 程序的组织结构

源文件的基本组成是类。类是所有 Java 程序的构建模块,Java 程序中的所有内容都必须放在类中。

Java 程序的执行入口是 main() 方法,有固定的书写格式:

public static void main(String[] args){
}

一个源文件可以有多个类,每次编译完,每一个类都会生成一个对应的基本名与类名相同的 .class 文件。

如果源文件包含一个 public 类,则该源文件必须按该类命名。

一个源文件中最多只能有一个 public 类(公共类),其它类的个数不限,也可以将 main() 方法写在非 public 类中,然后指定运行非 public 类,这样入口方法就是非 public 类的 main() 方法。

一个类只能有一个 main() 方法,一个源文件可以有多个类,每一个类都可以有一个 main() 方法,因此一个源文件可以有多个 main() 方法。

public 类叫做公共类,main() 方法叫做主方法。

程序示例:

// public static void main(String[] args) 表示一个主方法,主方法是程序的入口
public class Hello{
        // 编写一个主方法,即 main() 方法
        public static void main(String[] args){
                System.out.println("Hello World");
                System.out.println("Xiao Cheng is studying Java.");
        }
}

class Dog{
        public static void main(String[] args){
                System.out.println("Dog");
        }
}

class Tiger{
        public static void main(String[] args){
                System.out.println("Tiger");
        }
}

此处的源文件名取为 Hello.java,编译之前文件夹的内容:

[图片]

编译之后文件夹的内容:

[图片]

以不同的类作为主类来运行程序:

[图片]

类中可以有一个或多个方法,方法必须在类的内部声明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DOS 操作系统

DOS 介绍 DOS:disk operating system,磁盘操作系统。 中国DOS联盟下载 MS-DOS 7.10完整安装版(含图形安装程序) DOS 环境下的操作 输入部分内容后按下 Tab 可以快速自动补全。 按住 Ctrl 键可以用鼠标滚轮改变字号大小。 DO…

转速传感器介绍

一、概述 RPM(Revolutions Per Minute)转速传感器是一种用于测量旋转机械设备转速的传感器。它可以检测旋转部件上的特定位置标记(如齿轮、凸起或磁铁),并根据这些标记的通过频率来计算转速。发电额定频率是50hz和60z…

力扣303. 区域和检索 - 数组不可变

Problem: 303. 区域和检索 - 数组不可变 文章目录 题目描述思路复杂度Code 题目描述 思路 创建前缀和数组preSum,其中preSum[i]处元素值为nums[0] - nums[i - 1]处元素值得和,当调用sumRange函数时直接返回preSum[right 1] - preSum[left] 复杂度 函数…

Redisson分布式锁原理解析

前言 首先Redis执行命令是单线程的,所以可以利用Redis实现分布式锁,而对于Redis单线程的问题,是其线程模型的问题,本篇重点是对目前流行的工具Redisson怎么去实现的分布式锁进行深入理解;开始之前,我们可以…

【西瓜书】3.线性模型

目录 1.基本概述 2.线性模型——线性回归 2.1.离散变量 2.2.最小二乘法 3.线性模型——多元线性回归 4.广义线性模型——对数线性回归 5.广义线性模型——对数几率回归 5.1.定义 5.2.参数估计——极大似然法 6.线性模型——线性判别分析LDA 7.多分类学习 8.类别不平衡问题 大纲…

DDK电动紧固装置SAN3-40控制器维修

DDK伺服拧紧轴控制器是工业自动化设备中的重要组成部分,其稳定运行对于生产线的顺畅至关重要。然而,由于长时间使用或其他原因,可能会出现DDK拧紧扳手控制器故障。【寻求专业维修服务商】 子锐机器拥有多种品牌机械设备维修经验,有…

【Python机器学习】将PCA用于cancer数据集并可视化

PCA最常见的应用之一就是将高维数据集可视化。一般对于有两个以上特征的数据,很难绘制散点图,。对于Iris(鸢尾花)数据集,我们可以创建散点矩阵图,通过展示特征所有可能的两两组合来展示数据的局部图像。 不…

代码随想录算法训练营day31|455.分发饼干、376.摆动序列、53.最大子序和

分发饼干 455. 分发饼干 - 力扣(LeetCode) 贪心算法,让每个饼干给到能够满足的孩子,所以需要对饼干尺寸和孩子的满足值先进行排序,然后针对每一个饼干的尺寸,挑选恰好能够满足的孩子(这里表述…

Vue08-数据代理

一、Object.defineProperty() Object.defineProperty() 是 JavaScript 中的一个方法,用于直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。 这个方法允许你精确地控制一个对象的属性,包括它的值、是…

Open AI又出王炸GPT-4,目测一大波人的饭碗要碎了...

前言 在科技的惊涛骇浪中,每一次技术的飞跃都预示着新时代的曙光。近日,Open AI公司再次震撼业界,推出了其最新力作——GPT-4,这款被誉为“王炸”的语言模型,以其前所未有的智能水平和创造力,不仅在技术圈…

使用 tc (Traffic Control)控制网络延时

设置网络延时 1500ms 800ms tc qdisc add dev eth0 root netem delay 1500ms 800msping 测试 ping www.baidu.com取消设置网络延时 sudo tc qdisc del dev eth0 root

秒杀优化+秒杀安全

1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法,在bean初始化之后将库存信息加载到Redis /*** 系统初始化,将秒杀商品库存加载到redis中** throws Excepti…

Java使用GDAL来解析KMZ及KML实战

目录 前言 一、在GQIS中浏览数据 1、关于空间参考 2、属性表格 二、GDAL的相关驱动及解析实战 1、GDAL中的KMZ驱动 2、GDAL实际解析 三、数据解析成果 1、KML解析结果 2、KMZ文件入库 四、总结 前言 在前面的博客中讲过纯Java实现Google地图的KMZ和KML文件的解析&…

学习周报:文献阅读+Fluent案例+Fluent相关算法学习

目录 摘要 Abstract 文献阅读:求解正逆运动波问题的物理信息神经网络 文献摘要 讨论|结论 理论基础 KWM(运动波动方程) Hard constraint (硬约束方式) 具有重新分布的搭配点的PINN 具有停止梯度的分数阶方程 …

艾体宝方案 | ntopng监测异常流量并通知到企业微信

你是否曾因网络异常而感到困扰?在数字化时代,网络流量异常可能给企业带来巨大损失。但别担心,我们为您准备了一份详尽的解决方案!想知道如何利用ntopng及时发现异常流量,并通过企业微信等渠道通知你的团队吗&#xff1…

[网鼎杯 2020 青龙组]jocker

运行程序,发现是要我们自己输入 那么肯定是拿到enc慢慢还原 32位,无壳 进来就红一下报错 这里可以看见长度为24 动调一下看看 这里进行了大量的异或 这里是对地址开始的硬编码进行异或,从而达到smc的效果 所以你也可以发现在进行这一步操作之前 encry函数全是报错 你点开…

【Vue】组件的存放目录问题

注意: .vue文件 本质无区别 组件分类 .vue文件分为2类,都是 .vue文件(本质无区别) 页面组件 (配置路由规则时使用的组件)复用组件(多个组件中都使用到的组件) 存放目录 分类开来的…

apifox 生成签名

目录 前言准备编写签名脚本签名说明捋清思路编码获取签名所需的参数生成签名将签名放到合适的位置完整代码 在apifox中配置脚本新增公共脚本引用公共脚本添加环境变量 参考 前言 略 准备 查看apifox提供的最佳实践文章:接口签名如何处理 编写签名脚本 签名说明…

四款优秀的电脑屏幕监控软件|监控电脑屏幕的必备软件

在选择监控电脑屏幕的软件时,我们需要考虑多个因素,包括软件的功能性、易用性、兼容性、安全性以及价格等。以下是几款在市场上广受好评的监控电脑屏幕的软件,它们各自具有独特的特点和优势。 1.安企神软件 安企神软件是一款专业的电脑屏幕监…

【学习笔记】Windows GDI绘图(十三)动画播放ImageAnimator(可调速)

文章目录 前言定义方法CanAnimate 是否可动画显示Animate 动画显示多帧图像UpdateFramesStopAnimate终止动画Image.GetFrameCount 获取动画总帧数Image.GetPropertyItem(0x5100) 获取帧延迟 自定义GIF播放(可调速) 前言 在前一篇文章中用到ImageAnimator获取了GIF动画的一些属…