Java——认识Java

一、介绍

1、起源

Java 是由 Sun Microsystems 于 1995 年推出的一种面向对象的编程语言和计算平台。由詹姆斯·高斯林(James Gosling,后来被称为Java之父)和他的同事们共同研发。后来,Sun 公司被 Oracle(甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。

Java最开始叫 Oak(橡树)语言,由Sun公司(后来被Oracle收购)成立的技术小组开发,由于 oak 在当时已被注册,所以改名为 Java。这个名字的由来也是一个很有趣的小故事,说是有一天团队的几个主要成员在一起喝咖啡,正品尝一种来自爪哇岛(Java)的咖啡。这个名字的灵感就来源于这个来自爪哇岛的咖啡。Java的图标也是一杯咖啡,同样也是因为这个。

Sun公司在1995 年正式发布了JDK1.0。詹姆斯·高斯林(James Gosling)在1994年参加硅谷大会,展示了Java的功能,震惊世界。

2、简要介绍

Java分为三个体系:

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
  • JavaEE(J2EE) (Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME(J2ME) (Java 2 Platform Micro Edition,java平台微型版)。

后来里的J2SE、J2EE和J2ME中的2被去掉,变成了现在的JavaSE、JavaEE和JavaME。

二、特点

简单性:

  • 语法类似于 C 和 C++,便于学习和上手。
  • 丢弃了 C++ 中复杂且不常用的特性(如操作符重载、多继承等)。
  • 不使用指针,而使用引用,简化内存管理。以及提供了自动分配和回收内存空间。

面向对象(OOP Object-Oriented):

  • 提供类、接口和继承等支持,只支持类之间的单继承,但支持接口的多继承。
  • 全面支持动态绑定,使得程序更加灵活和可扩展。

分布式:

  • 支持网络应用开发,提供了丰富的网络编程接口,如 URL、Socket 等。
  • 具备 RMI(Remote Method Invocation)机制,支持分布式应用开发。

健壮性:

  • 强类型机制、异常处理和自动垃圾回收等特性保证了程序的健壮性。
  • 安全检查机制进一步增强了代码的可靠性。

安全性

  • 提供了多层次的安全机制,防止恶意代码的攻击。
  • 通过 ClassLoader 和 SecurityManager 实现动态的安全防护。

体系结构中立或跨平台性:

  • Java 程序(后缀为 .java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 .class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。也就是我们常说的“一次编译,到处运行”。
  • 那这种特性是怎么实现的呢,实际上就是依靠Java虚拟机(JVM,Java Virtual Machine)。它的主要功能是运行 Java 字节码。JVM 提供了一个抽象计算机模型,使得 Java 程序能够在各种不同的硬件和操作系统上运行,从而实现了“一次编译,到处运行”的跨平台特性。每个平台(如 Windows、Linux、macOS 等)都有不同的 JVM 实现。每个平台的 JVM 实现都是根据特定平台的需求进行优化的,但它们都能够运行相同的 Java 字节码。所以一个.class文件可以在不同平台下运行。

可移植性

  • Java 严格规定了基本数据类型的长度,确保代码在不同平台上具有一致的表现。
  • Java 编译器和运行环境具有很强的可移植性。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。

解释型

  • Java是解释型语言。
  • Java这个解释型语言编译后得到的字节码,不能直接在机器上运行,需要通过解释器来运行。而对于编译型语言,编译后得到的是机器码,可以直接在机器上运行。

高性能

  • 虽然是解释型语言,但通过 JIT(Just-In-Time)编译器技术,Java 的运行速度接近于原生编译语言如 C++。

多线程

  • Java 内置多线程支持,可以方便地编写并发程序。
  • 提供了线程同步机制(如 synchronized 关键字)来避免资源竞争。

动态性

  • 类可以在运行时动态加载和链接,适应动态变化的环境。
  • 支持运行时的类型检查和反射机制。

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

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

相关文章

vue3 vite动态根据字符串加载组件

1 原理 import.meta.glob() 其实不仅能接收一个字符串,还可以接收一个字符串数组,就是匹配多个位置 let RouterModules import.meta.glob(["/src/view/*/*.vue", "/src/view/*.vue"]);这样我们就拿到了相对路劲的组件对象&#xf…

leedcode【142】. 环形链表 II——Java解法

Problem: 142. 环形链表 II 思路解题方法复杂度Code性能 思路 1.用快慢指针找到相遇的点(快指针一次走一步,慢指针一次走两步) 2.一个指针从head开始,一个指针从相遇点开始,一次一步,相遇处即为环入口 解题…

【模版方法设计模式】

文章目录 模板方法设计模式模板方法的设计原则模板方法设计模式组成部分代码实现抽象类实现具体实现类执行 模板方法设计模式 模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一…

网络应用层之(1)DHCPv6协议

网络应用层之(1)DHCPv6协议 Author: Once Day Date: 2024年5月26日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-C…

设计模式八股文

什么是设计模式? 设计模式是软件开发过程中经常遇到的问题的通用解决方案。类似于前人总结的经验,遇到相似问题的时候有个参考。 设计模式七大基本原则? 单一职责:一个类应该只作一件事情。将功能分为小的独立的单元。开放封闭…

文心一言 VS 讯飞星火 VS chatgpt (267)-- 算法导论20.2 2题

二、写出 PROTO-vEB-DELETE 的伪代码。通过扫描簇内的相关位,来更新相应的 summary 位。并且你实现的伪代码的最坏情况运行时间是多少?如果要写代码,请用go语言。 文心一言: 首先,让我们回顾一下vEB(Van …

matplotlib latex表格

使用python3环境 import matplotlib.gridspec as gridspec import matplotlib.pyplot as pltimport numpy as np import matplotlib as mpl #mpl.use(pgf)def figsize(scale, nplots 1):fig_width_pt 390.0 # Get this from LaTeX using \the\text…

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言,因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后,你可以从事以下几方面的工作: 1. Web 开发 Python 有很多流行的 Web 框架,如: Django:一个…

无畏并发: Rust Mutex的基本使用

并发是很多编程语言避不开的一块主要内容,主打一个无畏并发的Rust自然也面临这样的挑战。Rust中的Mutex提供了强大的同步原语,确保共享数据的线程安全,这篇文章中,我们会探讨Mutex的使用,从基础的用法到一些高阶内容。…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

自动驾驶路径决策算法——动态规划

文章内容来自b站up主忠厚老实的老王,视频链接如下: 自动驾驶决策规划算法第二章第二节(中) 参考线算法_哔哩哔哩_bilibili 其中host是自车位置,以host在参考线的投影为坐标原点,建立frenet坐标,此时host的坐标是(0,L0…

ABAQUS应用07-实现拉伸和压缩刚度不同的弹簧建模

文章目录 0、背景描述1、步骤 0、背景描述 到目前为止,本文的内容我还没有具体实践过,但是个人认为后期是会用到的。比如说,对于风电机组地基转动刚度的设置,土体就是一种拉压刚度并不相同的材料。所以现在先记录下来&#xff0c…

bclinux基于欧拉(BigCloud Enterprise Linux For Euler)下安装mysql5.7

第一步:下载mysql5.7的rpm安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 第二步:上传mysql安装包到Centos7的下 第三步:检查是否已经安装了mysql或者mariadb(centos7默认安装),如已…

Java—内部类

Java—内部类 一、内部类二、应用特点三、分类3.1、普通内部类:直接将一个类的定义放在另外一个类的类体中3.2、静态内部类3.3、局部内部类 一、内部类 一个类的定义出现在另外一个类,那么这个出现的类就叫内部类(Inner)。 内部类所在的类叫做外部类(Ou…

[JAVASE] 类和对象(六) -- 接口(续篇)

目录 一. Comparable接口 与 compareTo方法 1.1 Comparable接口 1.2 compareTo方法的重写 1.2.1 根据年龄进行比较 1.2.2 根据姓名进行比较 1.4 compareTo 方法 的使用 1.3 compareTo方法的缺点(重点) 二. Comparator接口 与 compare方法 2.1 Comparator接口 2.2 compare 方法…

upload-labs 21关解析

目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…

ssms用户登陆失败,服务器处于单用户模式。目前只有一位管理员能够连接。解决方案

文章目录 问题解决方案单用户模式什么是单用户模式?为什么使用单用户模式?实现步骤 问题 连接smss的时候发现无法连接,显示 服务器处于单用户模式。目前只有一位管理员能够连接 解决方案 打开SQL Server配置管理器 右键属性 在启动参数的最…

picamera配opencv做发现移动物体后录像50秒

本来是想配合上一篇写的测距传感器数据打开摄像头录制个50秒实时画面,后来这个测距传感器(因为我是歪用,用来识别范围内的移动物体)给的数据,false alarming还是太高了。于是想到使用本人之前深恶痛绝的opencv来试一试…

getters的使用

getters的使用 如果state中的数据需要经过处理再使用,就可以利用getters函数

OFDM通信中的部分内容

纠错编码:在无线通信过程中由于传输过程存在噪声等各种非理想因素,在接收端接收到的信息往往相对于发射信息存在误码,通过纠错编码方式可以对少数非连续的误码进行判断和纠正。举个简单的例子,发射端可能发射的信息为00,01,10,11,…