从零开始学Java之Java到底是个啥?

news2024/11/17 15:32:16

全文大约 5000】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!文章带有丰富案例及配图、视频,只为让你更好的理解和运用文中的技术概念,给你带来具有足够启迪的教程......

------------------------------前戏已做完,精彩即开始----------------------------

既然各位小伙伴现在已经决定要学习Java了,那首先得对Java有基本的了解吧,所以接下来壹哥先用一篇文章,来给大家介绍一下Java到底是个啥。

友情提示:

大家要记住,无论我们学习任何技术,都要知道这个技术是什么、干嘛的、怎么用、为什么这么用,以及使用时出现了问题该怎么解决!

一. Java简介

1. 起源

既然各位打算以后要靠Java来养家糊口了,那对Java的了解是不是应该更多一些呢?比如Java这个技术是怎么产生的?接下来壹哥给大家讲个小故事,让咱们一起来看看Java的起源吧。

20世纪90年代,经济高速发展,大家有钱了就想追求更高的生活品质。当时发明了很多稀奇古怪的电子产品,比如有钱人必备的“大哥大”、BB机、电视机顶盒、烤箱等。我们知道,硬件产品必须要有软件系统进行支撑才能运行,就好比人必须有灵魂才能称之为人。所以当时为了配合硬件的发展,研发出了著名的单片机系统,这就大幅提升了电子产品的智能化程度。

当时有一个叫做“Sun”(不是Son哦)的公司,眼光很敏锐。为了抢占广大的消费电子产品市场,在1991年成立了一个名为“Green”的项目组,由詹姆斯·高斯林(高司令)、帕特里克等几个工程师一起负责研发新技术,专攻家电产品里的嵌入式应用开发。一开始Green项目组打算用C++进行嵌入式开发,但由于C++写出来的程序特别复杂和庞大,不适合在嵌入式的环境中运行。而且不同厂家生产的电子产品,其底层所使用的硬件系统也各有不同,C++写出来的东西无法实现“一次编码,处处运行”的跨平台需求。

所以为了解决以上这些问题,Green项目组根据嵌入式的特点,对C++进行了改造,去除了C++中不太实用及影响安全的部分,并针对实时性要求,开发出一种称为Oak(橡树)的面向对象语言。但此时Oak除了比C++更简单之外,其实也没有太大的区别,所以当时的硬件厂商对Oak没有太大的热情。而Oak也就因为缺乏硬件的支持无法进入市场,从而被搁置了下来。

到了1994年6、7月间,Green团队决定改变接下来的发展目标。因为Oak本身是一种精简的语言,程序非常小,很适合在网络上传输,所以他们决定把Oak用在万维网上。到了1995年,Sun公司正式决定启用Oak,并推出了可以随同网页在网络上传输的Applet技术。

结果就在此时,Sun公司发现Oak这个商标被别的公司给提前抢注了。所以没办法,只能将Oak重新改名!大家都知道,取名字是一个很令人抓狂的事,大家一时都找不到合适的名字来重新命名。在“百思不得其解”之际,当时正在喝82年爪哇岛咖啡的詹姆斯·高斯林灵机一动,干脆就把Oak改名叫“Java”得了。于是,从此Oak更名为Java,所以高斯林也就成了公认的“Java他爹”!幸亏高斯林当时不是在蹲坑,要不然,em.......

到了1996年1月,Sun公司发布了Java的第一个开发工具包 (JDK 1.0) ,这也是Java发展历程中的重要里程碑,标志着Java真正成为了一种独立的开发工具。

以上就是Java语言的起源由来,现在你对它的历史知道了吗?

2. 概念(掌握)

通过上面的介绍,相信各位已经对Java有所了解了,但实际上Java到底是个什么鬼,有些朋友可能还是没有搞清楚。别急,壹哥再给大家把Java的核心概念提炼一下。

  • Java是曾经大名鼎鼎的Sun公司,在1995年5月正式推出的一种面向对象的程序设计语言
  • Java一开始是Sun公司的产品,但后来Sun被Oracle(甲骨文)给收购了,所以现在Java属于Oracle公司
  • Java语言是由James Gosling(詹姆斯·高斯林,“高司令” )和同事们共同研发的,通常我们认为高斯林是“Java之父”。
  • Java是一种介于编译型和解释型之间的编程语言,但更偏向于解释型。 编译型语言写出的代码会根据CPU类型的不同,编译成不同的机器码执行,工作原理类似于“翻译书籍”,如C、C++等;解释型语言可以由解释器直接加载源码运行,工作原理类似于“同声传译”,但运行效率较低,如JavaScript、Python、Ruby等。
  • 为了使得定位更清晰,Sun公司将Java分成了三个技术体系:
    • JavaSE(J2SE) :Java 2 Platform Standard Edition,Java平台标准版,包含标准的JVM和标准库;
    • JavaEE(J2EE) :Java 2 Platform,Enterprise Edition,Java平台企业版,在JavaSE的基础上增加了大量的API和库,用于企业级项目开发;
    • JavaME(J2ME) :Java 2 Platform Micro Edition,Java平台微型版,主要针对移动平台开发。
  • 2005年6月,JavaOne大会召开,发布Java SE 6版本,并正式将Java版本名称中的数字“2”取消。从此J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为 Java ME。 所以如果有谁再跟你说什么“J2SE、J2EE、J2ME”,你就送他一个黑人问号脸,“你到底是有多out才会说出这么老古董的话”?

3. 技术体系

虽然壹哥在上面的小节中已经给大家说过,Sun把Java分成了JavaSE、JavaEE、JavaME共3个平台体系,但我还是想把这个知识点再跟大家强调一下,因为有太多的小白曾经问过我:”壹哥,我到底是要学JavaSE,还是JavaEE?JavaSE和JavaEE到底是什么关系?.......“所以在我们正式开始学习Java之前,壹哥还是希望能够把各位心中的这些疑惑都给你解决掉。

为了搞清楚JavaSE、JavaEE、JavaME之间的关系,壹哥给大家绘制了下面这张图片:

从上图中你应该可以看出来,JavaEE的“范围是最大的“,这表示什么意思呢?这其实主要是说,JavaEE这个分类里包含的API(应用程序接口,我们可以暂时理解为Java提供的各种”工具“)最多,而JavaSE则完全包含在JavaEE里面,JavaME中有一小部分的API和JavaSE是重合的。

由此我们可以得出一个结论,作为初学者,我们需要先学习JavaSE里提供的各种常用API,等把JavaSE学完了就有”资格“去学习JavaEE或JavaME了!也就是说,JavaSE是Java的必备入门基础,初学者肯定要先学习JavaSE。这就好比你要学习中医技术,有针灸、推拿、中药等几个方向可以供你选择。但无论你要选择哪个方向,你都得先学习《中医基础理论》这门课,学完了这个才能有资格去学习其他具体的某个方向。现在你知道JavaSE与JavaEE的关系了吗?

但有的小伙伴还会好奇,要不要学习JavaME呢?壹哥告诉你,这个就算了!JavaME本来是Sun用于开发手机等设备的技术平台,但后来Android、iOS的异军突起,现在几乎就没人使用JavaME了,所以大家知道有这么一个东西就可以了。

我们学习完JavaSE之后,还不具备企业级开发的能力,接下来要学习JavaEE里的各种API。所以我们学习Java的正确路线,就是先学JavaSE,再学JavaEE,而壹哥的《从零开始学Java》系列文章,主要就是讲解JavaSE哦!

其实对于初学者来说,你大可不必过于纠结这些没什么实用价值的概念。等学到后面,你自然而然就会明白它们之间的具体区别,我们只需对其有个大致的了解,把精力放在最核心的问题上即可。

4. Java特性

对于Java,我们还需要了解一下Java的一些优势和特性,有时候面试官会贱兮兮的问你:你对Java了解多少?你为什么学习Java而不是其他语言?Java有哪些优势......针对这样的问题,咱们就简单回答一下Java的核心特性即可。

  • 使用简单: Java的语法与C和C++很接近,可以方便大量C系程序员快速转向Java。但又丢弃了C++中那些特别复杂难用的特性,如操作符重载、多继承、自动强制类型转换等。另外Java不支持指针,而是支持引用,并提供了自动分配和GC垃圾回收机制,程序员不必关心内存管理。
  • 面向对象: Java提供了类、接口和单继承等面向对象的特性,并支持类与接口之间的实现机制,全面支持动态绑定。可以说,Java语言是第一个非常纯粹的面向对象的程序设计语言。
  • 健壮安全: Java具有强类型机制、异常处理、GC垃圾自动收集、安全检查机制、丢弃指针等特性,保证了Java程序的健壮性。并且Java提供了安全机制来防止恶意代码的攻击,可以通过ClassLoader加载器进行字节代码检查,通过SecurityManager安全管理机制设置安全哨兵,保证了Java程序的安全性。
  • 跨平台/可移植性: Java基于JVM虚拟机机制,.java文件会被JVM编译成适合不同平台的.class字节码文件,实现了”一次编写,处处运行“的跨平台特性。正因为这个特性,也使得Java代码可以轻松实现不同平台间的移植。
  • 开源/免费:在2006年的JavaOne大会上,Sun公司宣布要将Java开源,之后陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码(即OpenJDK)。除了极少量的产权代码外,OpenJDK几乎包括了Sun JDK的全部代码,两者的代码基本上完全一样。目前JDK 8及以前的版本都是完全免费的,JDK 9之后Oracle宣布会对企业进行收费,但是企业可以免费使用Open JDK。
  • 高性能: Java是介于编译型与解释型之间的语言,但更偏向于解释型,执行性能比C语言更高效。而且现在Java的编译器不断更新,性能已经与C++类似了。
  • 支持网络和多线程: Java支持 Internet网络开发,提供了用于网络编程的类库,比如URL、URLConnection、Socket、ServerSocket、RMI(远程方法激活)等,并且支持多线程和并发同步机制。

二. Java发展史

对一个即将开始学习Java的小白来说,我们还是有必要适当地了解一下Java的发展史的,看看这些年Java都经历了哪些历史变革吧。

  • 1995年5月23日,Java诞生;
  • 1996年1月,JDK 1.0诞生;
  • 1997年4月2日,Java One会议召开,参与者超过万人,打破当时全球同类会议规模纪录;
  • 1997年9月,Java Developer Connection社区成员超十万人;
  • 1998年2月,JDK 1.1被下载超过 2,000,000次;
  • 1998年12月8日,JAVA2企业平台J2EE发布;
  • 1999年6月,SUN发布Java的三个版本:JavaSE、JavaEE、JavaME;
  • 2000年5月8日,JDK 1.3发布;
  • 2000年5月29日,JDK 1.4发布;
  • 2001年6月5日,NOKIA宣布到2003年将会出售超 1亿部支持Java的手机;
  • 2002年2月26日,J2SE 1.4发布,Java计算能力有了大幅提升;
  • 2004年9月30日,J2SE 1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为 Java SE 5.0;
  • 2005年6月,Java One大会召开,Sun公司发布Java SE 6。此时Java各种版本已经全部更名,取消了其中的数字 "2":J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为 Java ME;
  • 2006年12月,Sun公司发布JRE 6.0;
  • 2009 年04月20日,甲骨文以74亿美元收购Sun,取得了Java版权;
  • 2011年7月28日,Oracle发布Java 7.0 正式版;
  • 2014年3月18日,Oracle发布Java SE 8.0(目前最主流版本);
  • 2017年9月21日,Oracle发布Java SE 9.0;
  • 2018年3月21日,Oracle发布Java SE 10.0;
  • 2018年9月25日,Oracle发布Java SE 11;
  • 2019年3月20日,Oracle发布Java SE 12;
  • 2019年9月,Oracle发布Java SE 13;
  • 2020年3月,Oracle发布Java SE 14;
  • 2020年9月,Oracle发布Java SE 14;
  • 2021年3月,Oracle发布Java SE 16;
  • 2021年9月, Oracle发布Java SE 17
  • 2022年3月,Oracle发布Java SE 18;
  • 2022年9月,Oracle发布Java SE 19;
  • ......Java继续在大步前进......

当然,对于以上历史,大家了解即可,不用去记这些东西。

三. Java版本(重点)

在上面的章节介绍中,壹哥给大家提到了Java的很多版本,并且这些不同的版本所具有的功能也不尽相同。所以就有小白来问了,我们学习Java时到底该选择哪个版本呢?是越新越好吗?壹哥认为很有必要就这个问题给大家解释一下。

在Java的发展过程中,有很多不同的表述方式,有时候会给初学者造成一些误解。但请你记住,所谓的Java版本,其实就是指JDK的版本,两者是一回事!

1. JDK版本

Oracle把JDK分成了两种维护情况,即短期支持版本和长期支持版本, 我们先来看看 Oracle官方发布的JDK路线图:

对于短期支持版本(non-LTS)而言,Oracle只会提供6个月的支持维护;而对于长期支持版本(LTS),则提供8年的支持维护。 所以根据这一规划,Oracle每隔6个月,就会发布一个大版本,每个季度则发布一个中间特性版本 另外Oracle还承诺,新的JDK发布周期会严格遵循时间点,将于每年的3月份和9月份发布,中间不会跳票。

现在正常情况下,每隔6个月就会有一个短期维护版本(non-LTS)发布出来,比如JDK 9、10、12、13、14、15、16;然后每隔3年,就会发布一款得到8年长期支持维护的JDK版本,比如JDK 8、11、17。 所以小伙伴们,其实你没必要下载使用JDK9/10/12等non-LTS版本,应该使用JDK 8、11、17这样的LTS版本。但目前绝大多数主流企业使用的版本是JKD 8,但不会使用最新的版本,而且Oracle宣布从JDK 9.0之后开始针对企业收费,所以最新版的JDK使用情况待议。

2. 版本选择

既然JDK版本有这么多,作为小白,你到底该选择哪个版本的JDK呢?是直接学习JDK 18还是19?或者等几个月学习JDK 21?壹哥告诉你,如果你是一个新手小白,其实没必要追求学习最新的JDK!

首先每一个JDK版本推出时,都存在着很多未知的bug,所以企业在开发时,都会选择最稳定的版本!现在主流的企业级应用都在使用JDK 8.0正式版,并且JDK 8.0及之前版本都是免费的,而JDK 9.0以后则开始收费(针对企业收费,非个人)。所以公司考虑到稳定性和费用等问题,都在使用JDK 8.0,这才是主流!

另外对初学者来说,JDK的新特性其实对小白来说意义并不大。这些新特性一般是针对性能有较大提升,但你作为一个小白,连最基本的用法都不会呢,现在去追求这些新特性没必要。等你把JavaSE学完之后,以后自己再针对性地提升即可。请先把精力放在最核心的地方,要不然基础还没搞扎实,却一心贪多求快,很容易出现”空中楼阁“的状况。

另外有些培训机构,宣称会重点讲解JDK 12、JDK 10、JDK 9等版本的内容,不过是哗众取宠。这些版本官方都停止维护和下载了,你讲这些有啥用。

所以,为了贴合最主流的企业要求,壹哥的本套教程案例都是基于JDK 8来进行讲解的!如果你的JDK版本比我的版本高,当然是可以直接兼容运行我的案例的,不用担心!

四. 配套视频

至此,壹哥通过本文给大家简单地介绍了一下Java的历史。其实对于今天的内容,大家简单看看,把重点内容稍微记一下就好,不用在这些地方花费太多精力。

开场白已结束,在下一篇文章中,壹哥会带各位先熟悉Java的运行机制和JVM虚拟机工作原理,然后搭建出学习Java时的必备环境---《JDK安装及环境变量配置》,敬请各位期待哦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础数据结构链表

链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除&…

论文速递:带重力约束的点云配准(Gravity-constrained point cloud registration)

标题:Gravity-constrained point cloud registration 作者:Vladim ́ır Kubelka, Maxime Vaidis and Franc ̧ois Pomerleau,加拿大拉瓦尔大学 来源:IROS 2022 摘要 视觉和激光SLAM算法从IMU中获益良多。高频率的IMU数据弥补了…

嵌入式:ARM的流水线技术

三级流水线ARM的组织 ARM的3级流水线介绍 到ARM7为止的ARM处理器使用的简单3级流水线分别为 取指级 :读取指令。译码级 :对指令进行译码。占有“译码逻辑”,不占有“数据路径”。执行级 :指令占有“数据路径”,寄存…

拼搏别样的未来,中国社科院与美国杜兰大学金融管理硕士项目助力你的人生旅程

你憧憬中的未来是什么样子呢?我们的人生路程充满了众多可能性,只要努力就会收获自己的别样人生。我们的人生不是单一的色彩,它是五彩斑斓、精彩纷呈的。在每一个阶段的我们所拥有当时的状态并不能代表永远,随着我们的拼搏与奋斗&a…

2022全年度空调十大热门品牌销量榜单

今年空调的销售得到明显改善,尤其是今年夏天全国多地最高气温同比明显提升,且高温的强度和持续时间还具有一定的极端性。随着气温的骤升,空调市场也迅速升温,各终端销售量出现明显增长。 根据鲸参谋数据统计,今年京东平…

“美亚杯”第五届中国电子数据取证大赛答案解析(个人赛)

A C D 分区5为系统分区 A 1073741824*458.29492085140520.96 E A A E D B 无答案 C 搜索各选项,C项搜不到 B C E 使用火绒剑查看进程调用的动态链接库 C 仿真得 B 内存大小为3G,在系统盘根目录过滤大小在2-8G之间的文件 D Win10时间线信息存放的数…

代码随想录算法训练营第六天| 哈希表理论基础 ,242.有效的字母异位词 , 349. 两个数组的交集 ,202. 快乐数,1. 两数之和

代码随想录算法训练营第六天| 哈希表理论基础 ,242.有效的字母异位词 , 349. 两个数组的交集 ,202. 快乐数,1. 两数之和 哈希表理论基础 建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰…

PAT 乙级 1078字符串压缩与解压 python

题目 思路: 生成两个函数:压缩与解压 在压缩中利用flag保留前一个字符串 再利用count统计重复出现字母的个数 如果目前遍历到的字母和flag相同,则count1 反之,说明重复结束 在解压中,如果遇到数字,表示需…

一文带你了解 K8s 是如何部署应用的

通过部署一个 Nginx 服务/实例来简单介绍 K8s 部署一个应用的流程。 1、创建 deployment 资源 kubectl create deployment nginx --imagenginx kubectl expose deployment nginx --port80 --typeNodePort2、查看 deployment 资源 kubectl get deployment3、查看节点上的 pod…

安全需求分析

汽车制造业 MES系统 DNC系统 生产 安全域1 管理层 工控安全隔离装置 交换机 安全配置核查系统 HMI 历史数据库 运行监控系统 实时数据库 打印机 过程 安全域2 监控层 工控漏洞扫描系统 安全交换机 工控安全审计系统 工控入侵检测系统 工程师站 A 操作员站 A 实时数据库A 操作员…

【菜鸡读论文】Margin-Mix: Semi-Supervised Learning for Face Expression Recognition

【菜鸡读论文】Margin-Mix: Semi-Supervised Learning for Face Expression Recognition 感觉最近的每天都在见证历史,上海现在也开始全面放开了,很多高校都已经开始遣返了。小伙伴们都回到家了吗? 上周周末太懒了,就没有更新论…

一文教你在SpringBoot中使用Thymeleaf

一文教你在SpringBoot中使用Thymeleaf1.快速使用Thymeleaf2.Thymeleaf快速入门案例3.Thymeleaf基本语法each遍历其他语法1.快速使用Thymeleaf 首先导入Maven依赖&#xff1a; <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thym…

怎么在图片加文字边框?这些方法值得你收藏

当我们在拍完照片以后&#xff0c;一般都会为它进行后期的编辑修图&#xff0c;因此在图片上面添加一些文字信息和边框是必不可少的&#xff0c;这样不仅能使图片变得更加精致&#xff0c;还可以增加它的信息量。那你们知道怎么给图片加上边框和文字吗&#xff1f;别着急&#…

uniapp实战仿写网易云音乐(一)—底部工具栏以及首页轮播图swiper的实现

文章目录前言首页导航栏公共样式的配置首页轮播图最后前言 从本篇文章开始记录uniapp实战仿写网易云音乐项目的过程&#xff0c;主要会写一下关键步骤和难点&#xff0c;本专栏会保持持续更新&#xff0c;并在最后送上源码&#xff0c;感兴趣的可以订阅本专栏。本篇主要实现的…

【C++11多线程】获取异步任务的结果:future、shared_future

文章目录1.std::future1.1 get()1.2 valid()1.3 share()1.4 wait_for()1.4.1 std::future_status::timeout1.4.2 std::future_status::ready1.4.3 std::future_status::deferred2.std::shared_future3.参考资料1.std::future std::future 是个类模板&#xff0c;其源码如下所示…

[附源码]Python计算机毕业设计大学生志愿者管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

【论文阅读】社交网络识别影响力最大节点方法综述-05

Vital nodes identification in complex networks识别单个重要节点的方法基于结构信息一、结构中心性&#xff08;Structural centralities&#xff09;1.度中心性&#xff08;基于邻域的中心性&#xff09;2.四阶邻居信息&#xff08;基于邻域的中心性&#xff09;3.ClusterRa…

html个人博客网站模板(源码)

文章目录1.设计来源1.1 首界面1.2 我的文章界面1.2 发表文章界面1.3 文章详细界面2.效果和源码2.1 目录结构2.2 源代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/128287493 html个人博客网站模板 html个人博…

多线程编程【POSIX信号量】

POSIX信号量&#x1f4d6;1. 信号量的定义&#x1f4d6;2. 二值信号量&#x1f4d6;3. 用信号量作为条件变量&#x1f4d6;4. 基于环形队列的生产者消费者模型我们知道&#xff0c;需要锁和条件变量来解决各种相关的&#xff0c;有趣的并发问题&#xff0c; Dijkstra及其同事发…

Redis限制一键登录次数

二、解决思路 因为项目实现一键登录采用的是 自有服务器调用 所以限制一键登录分为两步走&#xff0c;因为每个手机号有唯一的openid所以拿openid做redis的key值 &#xff08;1&#xff09;、调用云函数之前 调用云函数之前&#xff0c;前端会发起请求给后台&#xff0c;拿到这…