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

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 关键字)来避免资源竞争。

动态性

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

相关文章:

  • 【Vue2入门技能树】:Vue2项目从入门到放弃所遇到的问题汇总
  • 【Docker学习】深入研究命令docker exec
  • SVM兵王问题
  • 摄像头应用测试
  • 牛逼!50.3K Star!一个自动将屏幕截图转换为代码的开源工具
  • 【fastapi+mongodb】使用motor操作mongodb
  • 给页面元素添加水印
  • Tomcat调优参数
  • Linux系统如何通过编译方式安装python3.11.3
  • Java——接口
  • Vue 2与Vue 3的区别
  • java图书电子商务网站的设计与实现源码(springboot+vue+mysql)
  • vue3父组件使用ref获取子组件的属性和方法
  • java 拦截器-用户无操作超时退出利用Redis
  • 【智能算法应用】模拟退火算法求解多车型车辆路径问题HFVRP
  • 2017年终总结、随想
  • Angular 4.x 动态创建组件
  • C++类的相互关联
  • flutter的key在widget list的作用以及必要性
  • Less 日常用法
  • npx命令介绍
  • overflow: hidden IE7无效
  • php中curl和soap方式请求服务超时问题
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • REST架构的思考
  • Sequelize 中文文档 v4 - Getting started - 入门
  • unity如何实现一个固定宽度的orthagraphic相机
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 将回调地狱按在地上摩擦的Promise
  • 力扣(LeetCode)21
  • 聊聊flink的TableFactory
  • 收藏好这篇,别再只说“数据劫持”了
  • 提醒我喝水chrome插件开发指南
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (+4)2.2UML建模图
  • (02)Hive SQL编译成MapReduce任务的过程
  • (09)Hive——CTE 公共表达式
  • (26)4.7 字符函数和字符串函数
  • (35)远程识别(又称无人机识别)(二)
  • (k8s)kubernetes 部署Promehteus学习之路
  • (pojstep1.3.1)1017(构造法模拟)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (三)模仿学习-Action数据的模仿
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)h264中avc和flv数据的解析
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net web项目 调用webService