公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)


最近经常看到有人在问"0基础如何自学Java”、“如何转行Java”等等问题 。
现呕心沥血整理了Java从入门到精通系列教程 , 希望对大家有所帮助~~
首先我们先对Java语言做一个基本的了解

Java 语言概述
Java 编程语言是Sun Microsystems 公司的 James Gosling 在 1990 年创建的 , 于1995 年公布于世(一般说Java 诞生于 1995 年) 。 Java 是一门面向对象的编程语言 , 不仅吸收了C++语言的各种优点 , 还摒弃了 C++里难以理解的多继承、指针等概念 , 因此 Java 语言具有功能强大和简单易用两个特征 。 Java 语言作为面向对象编程语言的代表 , 极好地实现了面向对象理论 ,允许程序员以优雅的思维方式进行复杂的编程 。
目前在世界各地都有 Java 程序员的存在 , 你走到哪里也不再孤单 , 因为有你的 Java 编程小 伙 伴 在 陪 伴 着 你。我 们 一 起 来 看 看 世 界 编 程 语 言 排 行 榜 TIOBE(https://www.tiobe.com/tiobe-index/)给出的统计数据 。

公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)
文章图片

上图是 TIOBE 排行榜给出的 2018 年 5 月份的编程语言排行榜的统计数据 , 如果你一直在关注编程语言排行榜 , 那么你应该很容易发现 Java 的排名多年以来一直在前两名徘徊 , 并且多数情况下都是以排名第一的形式存在 。
Java 语言发展史 1990 年末 , Sun 公司准备为下一代智能家电(电视机 , 微波炉 , 电话)编写一个通用的控制系统 。 该团队最初考虑使用C++语言 , 很多成员包括Sun 公司的首席科学家Bill Joy , 发现C++语言在某些方面复杂 , 系统资源极其有限 , 缺少垃圾回收系统等 , 于是Bill Joy 决定开发一种新的语言:Oak 。
1992 年夏天 , Green 计划已经完成新平台的部分功能 , 包括Green 操作系统 , Oak 的程序设计语言、类库等 。 同年11 月 , Green 计划被转成“FirstPerson 有限公司” , 一个 Sun 公司的全资子公司 。 该团队致力于创建一种高度互动的设备 。
1994 年夏天 , 互联网和浏览器的出现不仅给广大互联网的用户带来了福音 , 也给 Oak 语言带来了新的生机 。 James Gosling(Java 之父)立即意识到 , 这是一个机会 , 于是对Oak 进行了小规模的改造 。
1994 年秋 , 小组中的Naughton 和Jonathan payne 完成了第一个Java 语言的网页浏览器:WebRunner 。 Sun 公司实验室主任Bert Sutherland 和技术总监Eric Schmidt 观看了该网页的演示并给予了高度的评价 。 当时Oak 这个商标已经被注册了 , 于是将Oak 改名为Java 。
1995 年初 , Sun 公司发布Java 语言 , Sun 公司直接把 Java 放到互联网上 , 免费给大家使用 , 甚至连源代码也不保密 , 也放在互联网公开 。 几个月后 , Java 成了互联网上最热门的宝贝 。 各种各样的小程序层出不穷 , Java 终于扬眉吐气 , 成为了一种广为人知的编程语言 。
1996 年底 , Flash 问世了 , 这是一种更加简单的动画设计软件:使用 Flash 几乎无须任何编程语言知识 , 就可以做出丰富多彩的动画 。 Flash 逐渐蚕食了Java 在网页上的应用 。
1997 年 2 月 18 日 , Sun 公司发布了JDK1.1 , 增加了即时编译器JIT 。
【公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)】1995 年Java 诞生到 1998 年底 , Java 语言虽然成为了互联网上广泛使用的编程语言 , 但它没有找到一个准确的定位 。
1998 年 12 月 , Sun 发布了Java 历史上最重要的JDK 版本:JDK1.2 。 并将 Java 分成了J2EE(提供了企业应用开发相关的完整解决方案)、J2SE(整个Java 技术的核心和基础)、J2ME(主要用于控制移动设备和信息家电等有限存储的设备)三个版本 。
2002 年 2 月 , Sun 发布了JDK 历史上最为成熟的版本 , JDK1.4 。
2004 年 10 月 , Sun 发布了万众期待的JDK1.5 。 JDK1.5 增加了诸如泛型、增强的 for 语句、可变数量的形参、注释、自动拆箱和装箱等 。
2005 年 , Java 诞生十周年 , J2SE/J2EE/J2ME 分别改名为:JavaSE/JavaEE/JavaME 。
2006 年 12 月 , Sun 发布了JDK1.6 。
2009 年 4 月 20 日 , Oracle 甲骨文公司宣布将以每股9.5 美元的价格收购Sun 。 Oracle 通过收购Sun 获得了两项资产:Java 和Solaris 。
2007 年 11 月 , Google 宣布推出一款基于Linux 平台的开源手机操作系统:Android 。 Android使用 Java 语言来开发应用程序 。 Android 平台的流行 , 让 Java 语言获得了在客户端程序上大展拳脚的机会 。
2011 年 7 月 28 日 , Oracle 发布了Java SE7 , 这次版本升级耗时将近5 年时间 。 引入二进制整数、支持字符串的switch 语句等 。
2014 年 3 月 18 日 , Oracle 发布了Java SE 8 。 2017 年 7 月 , Oracle 发布了JavaSE 9 。
2018 年 3 月 20 日 , Oracle 发布了正式版JavaSE 10 。 同一年 9 月 25 日发布了Java11 。
2019 年 3 月 19 日 , Oracle 发布了Java12 。
以上的描述就是Java 一路走来的发展历程 , 我们只能说:Java , 你好坚挺啊!在这个发展的过程中一代语言的兴起又衰败 , 又兴起又衰败 , 但Java 这 24 年来一直立于不败之地 。 并且渗透到每个行业 , 已然根深蒂固 。
在以上的描述中 , 我们提到了 Java 包括三大块 , 分别是JavaSE、JavaEE、JavaME , 这三者之间存在什么样的关系呢?请看下图你就明白了:

公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)
文章图片
JavaSE、JavaEE、JavaME 三者关系
如上图所示 , JavaEE 和JavaME 都包含JavaSE 。 实际上 , 这三大块就是 Java 的三大版本 ,JavaSE 是Java 的标准版 , 是学习JavaEE 和JavaME 的基础 , JavaEE 是企业版 , JavaME 是微型版 。
Java SE(Java Platform , Standard Edition) 。 Java SE 以前称为 J2SE 。 它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序 。 Java SE 包含了支持Java Web 服务开发的类 , 并为Java Platform , Enterprise Edition(Java EE)提供基础 。
Java EE(Java Platform , Enterprise Edition) 。 这个版本以前称为 J2EE 。 企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序 。 Java EE 是在Java SE 的基础上构建的 , 它提供 Web 服务、组件模型、管理和通信 API , 可以用来实现企业级的面向服务体系结构(service-oriented architecture , SOA)和 Web 2.0 应用程序 。
Java ME(Java Platform , Micro Edition) 。 这个版本以前称为 J2ME 。 Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且 灵活的环境 。 Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持 。 基于Java ME 规范的应用程序只需编写一次 ,就可以用于许多设备 , 而且可以利用每个设备的本机功能 。
综上所述 , 我们用几句话简单概括一下它们之间的区别 。 Java 标准版 , 主要做一般的Java 应用 , 比如应用软件/ QQ 之类的通信软件等等 。 Java 企业版 , 主要做企业应用 , 比如公司网站 , 企业解决方案等 。 Java 微型版 , 主要面向嵌入式等设备应用的开发 , 比如手机游戏等 。
Java 语言特性sun 公司对Java 的描述:"Java is a simple , object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multihreaded, and dynamic language" 。 翻译起来就是: “Java 是一门简单的 , 面向对象 , 分布式 , 解释性 , 健壮的 , 安全的 , 结构中立的 , 便捷的 , 高性能的 , 多线程的 , 动态的语言” 。 那么 , 在学习 Java 编程语言之前 , 让我们一起来看一看它有哪些特性吧?
① 简单性:Java 语言底层采用C++语言实现 , 相对于C++来说 , Java 是简单的 , 在Java 语言中程序员不需要再操作复杂的指针(指针的操作是很复杂的) , 继承方面也是只支持单继承(C++语言是一种半面向对象的编程语言 , 支持多继承 , 多继承会导致关系很复杂) , 在很多方面进行了简化 。
② 面向对象:Java 中提供了封装、继承、多态等面向对象的机制 。
③ 健壮性:在 C++程序当中的无用数据/垃圾数据需要编程人员手动释放 , 当忘记释放内存的时候 , 会导致内存使用率降低 , 影响程序的执行;在Java 语言当中这种问题得到了解决 ,因为Java 语言引入了自动垃圾回收机制(GC 机制) , Java 程序启动了一个单独的垃圾回收线程 , 时刻监测内存使用情况 , 在特定时机会回收/释放垃圾数据 , 这样会让内存时刻处于最好 的状态 。
④ 多线程:Java 语言支持多个线程同时并发执行 , 同时也提供了多线程环境下的安全机
制 。
⑤ 可移植性/跨平台:可移植性/跨平台表示Java 语言只需要编写/编译一次 , 即可处处运行 。 Java 代码既可以运行在windows 的环境下 , 又可以运行在 Linux 的环境下 , 而不需要修改Java 源程序 , 那么它是怎么做到的呢?功劳全在于“Java 虚拟机(Java Virtual Machine , 简称JVM)”这种机制 , 实际上 Java 程序运行的时候并不是直接运行在操作系统上面的 , 而是在操作系统上先安装了一个 JVM , 把 Java 程序放到了 JVM 当中运行 , JVM 屏蔽了各操作系统之间的差异 , 这样就完成了跨平台 。 但是 , JVM 的出现虽然搞定了跨平台 , 同时也带来了一些问题 , 比如要想运行Java 程序就必须先安装JVM , 没有JVM , Java 程序是运行不了的 , 就像你要在网页上看视频 , 结果浏览器却提示你需要安装Flash 插件 , 这一点你是不是感觉非常不爽呀!那么Java 程序、Java 虚拟机、操作系统之间是怎样的关系呢?请看下图:

公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)
文章图片
Java 程序、JVM、OS 之间的关系
通过上图我们可以看到不同的操作系统中安装的 JVM 肯定也是不同的 , windows 操作系统则必须安装 windows 版本的 JVM , Linux 操作系统则必须安装 Linux 版本的 JVM 。 这是因为 JVM 是和操作系统直接打交道的 , windows 和 Linux 操作系统本身的执行原理不同 , 所以JVM 肯定也必须是定制的 , 不能通用 。 但是 Java 程序放到 windows 的 JVM 上和放到 Linux 的JVM 上最终执行效果是完全相同的 。 这是因为:虽然 JVM 版本不同 , 但是所有版本的 JVM 的实现都是遵守sun 制定的 JVM 规范的 , 这样就可以达到编写一次到处运行的效果 , 有没有感觉很神奇呀!
当然 , Java 语言除了以上的特性之外还有很多其它的特性 , 我在这里就不再一一赘述了 ,大家对以上的特性来说重点知道Java 的跨平台性以及垃圾回收机制即可 , 其它的作为了解 。
JDK、JRE、JVM 三者关系在学习 Java 之前 , 我们需要对一些专业术语有一定的了解 , 在 Java 中常见的专业术语包括:JDK、JRE、JVM 等 , 它们分别是什么 , 它们之间的关系又是怎样的呢 , 请看下图:

公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)
文章图片
JDK、JRE、JVM 三者关系
从上图中我们可以看到 , JDK、JRE、JVM 之间存在这样的包含关系:JDK 包含JRE , JRE 又包含JVM 。 换句话说 , 只要安装了JDK , JRE 和JVM 则自动就安装了 。 那么它们分别代表什么呢:
① JDK:JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK) 。 它是每一个 Java 软件开发人员必须安装的 。 JDK 安装之后 , 它会自带一个 JRE , 因为软件开发人员编写完代码之后总是要运行的 。 注意:如果只是在这台机器上运行 Java 程序 , 则不需要安装 JDK , 只需要安装 JRE 即可(JRE 是有独立安装包的 , 这个大家可以从 Oracle 官网上找一下) 。
② JRE:JRE(Java Runtime Environment , Java 运行环境) , 运行 JAVA 程序所必须的环境的集合 , 包含JVM 标准实现及Java 核心类库 。
③ JVM:JVM 是Java Virtual Machine(Java 虚拟机)的缩写 , JVM 是一种用于计算设备的规范 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。 JVM 是实现Java 语言跨平台的法宝 。
在这里我需要重点强调一下 , 不同的操作系统需要安装不同版本的 JDK , 有专门的 windows版JDK , Linux 版JDK , Mac 版JDK 等 , 当然不同版本的 JDK 安装之后会对应不同版本的JRE 和JVM 。
初步了解 Java 的加载与执行 在编写第一个 Java 程序之前 , 我们应当对 Java 的加载与执行提前有一个简单的了解 , 请看下图:

公司|Java入门必看-Java零基础宝典(带你轻松跳过入门的坑)
文章图片
Java 的加载与执行
通过上图 , 我们可以看到Java 程序从开发到最终运行是这样进行的:
第一步(写代码):在任意位置创建一个.java 结尾的文件 , 程序员在该文件中编写符合Java
语法的源代码 , 这个文件被称为Java 源文件 。
第二步(编译):使用“javac”命令对 java 源文件进行编译 , 如果Java 源文件符合Java 语法规则 , 则编译生成 1 个或者多个以“.class”结尾的文件 。 “.class”结尾的文件我们称之为字节码文件 , 注意字节码文件不是普通文本文件 , 使用记事本等文本编辑器是无法打开的 ,但该文件内容也不是二进制 , 如果是二进制形式的话 , 操作系统是可以直接执行的 , 这个文件 的内容我们称之为字节码 。 注意:这里有一个“类名”的概念 , 假设生成的文件是A.class ,则表示类名为A , B.class 则表示类名为B 。
第三步(运行):使用“java”命令运行已编译的 Java 程序 , 假设编译之后的字节码文件是A.class , 则在dos 命令窗口中执行java A 命令 , 这个时候Java 虚拟机(JVM)就启动了 ,Java 虚拟机通过“类装载器ClassLoader”从硬盘中找到A.class 文件并装载 , 字节码文件被装载到Java 虚拟机之后 , Java 虚拟机解释器对字节码进行解释 , 最终解释为二进制码 , 然后操作系统通过执行二进制指令来和硬件平台完成交互 。
以上则是Java 程序加载与执行的过程 , 接下来我给大家总结 7 条规则 , 大家可以理解并记忆一下:
① Java 程序从开发到运行包括编译和运行两个阶段 , 这两个阶段可以在不同的操作系统中完成 , 例如在windows 环境下进行编译 , 在Linux 环境下运行 , 这是因为有JVM 机制的存在 , 做到了一次编译到处运行(跨平台/可移植) 。
② 编译阶段需要使用javac.exe(安装JDK 之后该命令就存在了)命令 , 运行阶段需要使用java.exe(安装 JRE 之后该命令就存在了)命令 。
③ 一个Java 源文件可能会编译生成多个class 文件 。
④ Java 源文件中的源代码如果不符合Java 的语法机制则编译时编译器会提示错误信息 ,并且无法生成class 文件 。 反之则生成class 文件 , 而class 文件才是最终要执行的程序 , 此时将Java 源文件删除是不会影响Java 程序运行的(当然 , 我们也不必删除java 源文件 , 因为在运行class 文件之后 , 如果没有达到预期的运行效果 , 这个时候还需要将Java 源代码修改 , 重新编译 , 以达到最终的运行效果) 。
⑤ 若生成的字节码文件名为A.class , 那么我们称A 为一个类的名字(这个先记住就行 ,后面的内容会讲) 。
⑥ 当编译阶段完成之后 , 我们可以使用JRE 中的java.exe 命令运行程序 , 例如执行命令“java A” , 该命令执行后会启动类加载器 , 类加载器去硬盘上搜索 A.class 文件 , 找到该字节码文件之后 , 将其加载到JVM 当中 , JVM 中的解释器会将A.class 字节码文件解释为操作系统可以执行的二进制码 , 然后操作系统通过执行二进制码和硬件平台交互 。
⑦ 运行Java 程序的前提是当前操作系统上已经安装了对应版本的JVM(JVM 不是单独安装的 , 安装JRE 即可 , 不同的操作系统需要安装不同版本的JRE , 不同版本的JRE 对应不同版本的JVM) 。
在了解了Java 程序的加载与执行之后 , 下篇文章我们开始动手实现第一个Java 程序!
配套Java零基础视频教程 , 搭配学习效果更佳哦~~~
https://www.bilibili.com/video/BV1Rx411876f

    推荐阅读