1.杨明翰的Java教学系列之认识Java篇

文章目录

  • 前言
  • 什么是Java?
    • Java之父
    • 编程语言排行榜
    • `Java的应用场景`
      • `服务端&后端程序`
      • Android
      • 大数据
      • 网站
      • 嵌入式领域
      • 桌面应用
      • 游戏
    • Java在中国
  • Java部分特点
    • 简单
    • 面向对象
    • 高性能的
    • 分布性
    • 稳健性&健壮性
    • 安全性
    • 多线程
    • 跨平台
    • 动态性
  • Java工作机制
  • 什么是JDK、JRE、JVM?
    • JVM(Java Virtual Machine)
    • JDK(Java Development Kit)
    • JRE(Java Runtime Environment)
  • Java的编年史
    • 1991
    • 1992
    • 1994
    • 1995
    • `1996`
    • 1997
    • `1998-1999`
    • 2000
    • 2002
    • `2004`
    • 2005-2006
    • `2009`
    • `2011`
    • `2014`
  • Java开发环境搭建
    • 1. 下载安装JDK
    • 2.设置环境变量
  • 第一个HelloWorld(windows平台)
  • Java编程工具
  • 总结
    • 作业


前言

今天我们主要来介绍一下Java,包括什么是Java、Java的特点、应用场景、
历史、JDK&JRE&JVM的恩怨情仇,以及第一个Java程序,
让大家对Java有个宏观的认识,为后面的面向对象编程打基础。


什么是Java?

由Sun公司于1995年5月推出的Java程序设计语言和Java平台的总称。
Java是一种可以撰写跨平台(平台指不同的操作系统)应用软件的面向对象的编程语言,
Java伴随着互联网的迅猛发展而发展,逐渐成为全球最流行的编程语言之一 。

Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,
因此Java语言具有功能强大和简单易用两个特征。

Java不仅仅是一门编程语言,而是一个非常庞大的技术体系&生态系统,
包括编程语言、虚拟机、应用程序架构、开发环境、应用服务器、应用程序环境、
运行时平台、框架技术、构建工具和虚拟化工具、数据库、IDE、JRE/JDK版本、部署环境等等。

甚至在Java虚拟机的技术体系上又衍生了一些新的语言:
Groovy,Clojure,Scala,JRuby,FANTOM,Jython等。

Java技术体系已经吸引1000万左右的软件开发者,这是全球最大的软件开发团体。
使用Java的设备多达几十亿台,其中包括11亿多台个人计算机、
30亿部移动电话以及其他手持设备,数量众多的智能卡,
以及大量的机顶盒、导航系统和其他设备(数据来自Java的广告)

Java之父

詹姆斯·高斯林(James Gosling,1955年5月19日出生于加拿大),
软件专家,Java编程语言的共同创始人之一,一般公认他为“Java之父”。

在他12岁的时候,他已能设计电子游戏机,帮忙邻居修理收割机。
大学时期在天文系担任程式开发工读生。

1977年获得了加拿大卡尔加里大学计算机科学学士学位。

1983年获得了美国卡内基梅隆大学计算机科学博士学位,
毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视,后来转至Sun公司。

1990年,与Patrick Naughton和Mike Sheridan等人合作“绿色计划”,
后来发展一套语言叫做“Oak”,后改名为Java。

2009年四月,Sun被甲骨文公司并购,高斯林于2010年四月时宣布从甲骨文公司离职。

2011年3月29日,高斯林在个人博客上宣布将加入Google。

2011年8月30日,仅仅加入Google数月之后的高斯林就在个人博客上宣布离开Google,
加盟一家从事海洋机器人研究的创业公司Liquid Robotics,担任首席软件架构师,
负责传感器软件开发和自主导航设计,数据中心海量数据处理。

在2011年5月建立的Scala公司Typesafe Inc,高斯林被聘请为公司顾问。

2017年5月,加入亚马逊AWS云服务。

编程语言排行榜

1.杨明翰的Java教学系列之认识Java篇_第1张图片
C语言家族都是老当益壮,占领着编程语言的Top5,
72年的C,83年的C++,95年的Java,2000年的C#。

Java的应用场景

服务端&后端程序

互联网应用的服务端程序(包括分布式系统),都在大面积使用Java,
很多第三方交易系统、银行、金融机构、大型网站、互联网平台都选择用Java开发。

大多数情况下,Java被用在服务器端开发,但多数没有任何前端,
它们通常是从一个服务器接收数据,处理后发向另一个处理系统。

Android

许多的Android应用都是Java程序员开发者开发,
虽然Android运用了不同的JVM以及不同的封装方式,
但是代码还是用Java语言所编写。

大数据

Hadoop以及其他大数据处理技术很多都是用Java,
例如Apache的基于Java的HBase和Accumulo以及ElasticSearchas。

网站

Java在电子商务领域以及网站开发领域占据了一定的席位,
开发人员可以运用许多不同的框架来创建web项目,
例如医疗救护、保险、教育、国防以及其他的不同部门网站都是以Java为基础来开发的。

嵌入式领域

Java在嵌入式领域发展空间很大,在这个平台上,
只需130KB就能够使用Java技术(在智能卡或者传感器上),
未来可能在物联网领域爆发。

桌面应用

例如:Jmeter,Netbeans,Freemind,Eclipse等。

游戏

火遍全球的《我的世界》以及一堆Java小游戏。

Java在中国

大量生态体系已经建成并且Java还开源,因此Java技术体系在短时间内不会被淘汰掉,
阿里巴巴、京东、美团&大众点评、饿了吗、58&赶集、优酷&土豆、搜狗、
搜狐、网易、唯品会、当当网、人人网等等企业都在使用Java技术栈。


Java部分特点

简单

相对于C++来说简单&精简&优化,如果你觉得Java很难,那么C++更难,
Java里提供了丰富的类库以及一堆优化C++的机制,方便开发者使用。

面向对象

区别于面向过程的编程,在后续的课程中会讲到,开发思想上的转变,从面向过程到面向对象。
状态&行为与属性&方法,类,接口,继承,抽象,实例化,对象等概念别着急,后续的课程会讲解。

高性能的

与那些解释型的高级脚本语言相比,Java的确是高性能的。
事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。

分布性

Java支持互联网应用的开发(即网络编程),Java提供了用于网络编程的类库,包括URL、
URLConnection、Socket、ServerSocket等,Socket类支持可靠的流(stream)网络连接。

Java还支持各种层次的网络连接,
所以用户可以产生分布式的客户机和服务器,
Java的RMI机制也是开发分布式应用的重要手段。

稳健性&健壮性

Java是一个强类型语言,它在编译和运行时要进行大量的类型检查,
类型检查帮助检查出许多开发早期出现的错误。
早发现早治疗,而不是等到部署上线后才发现程序运行不了,
以及Java的异常处理机制&垃圾回收机制等等。

安全性

Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。
除了Java语言具有的许多安全特性以外,
Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),
如分配不同的名字空间以防替代本地的同名类、字节代码检查,
并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

多线程

线程有时也称小进程,是一个大进程里分出来的小的独立运行的基本单位。
Java提供的多线程功能使得在一个程序里可同时执行多个小任务,
即同时进行不同的操作或处理不同的事件。
多线程带来的更大的好处是具有更好的网上交互性能和实时控制性能,
尤其是实现多媒体功能。

跨平台

作为一种网络语言,
Java编译器将Java源程序编译成一种与体系结构无关的中间文件格式(字节码)。
只要有Java运行系统的机器都能执行这种中间代码。

从而使同一版本的应用程序可以运行在不同的平台上,
正像那句口号:“一次编译,各种运行~”。

动态性

Java语言的设计目标之一是适应于动态变化的环境,
Java程序需要的类能够动态地被载入到运行环境,
也可以通过网络来载入所需要的类,这也有利于软件的升级。

另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。


Java工作机制

java程序需要先编译(使用Java编译器生成一种与平台无关的字节码.class文件),
后解释(JVM运行java字节码)两步骤。

Java源文件(人能看懂)->javac编译->字节码文件(人看不懂但JVM能看懂)
->jvm解析执行->特定平台的机器码(JVM看不懂但操作系统能看懂)。

Java之所以能跨平台,就是因为Java实现了不同平台的虚拟机,
不同平台的虚拟机都可以解析与平台无关的字节码。

对于不同的操作系统则有不同的JVM与之对应,
例如Linux的JVM与Windows的JVM在实现细节上是有差异的。
要想在不同的操作系统上运行Java程序,就需要在不同操作系统上安装对应的JVM。
1.杨明翰的Java教学系列之认识Java篇_第2张图片


什么是JDK、JRE、JVM?

三者的范围:JDK>JRE>JVM(JDK是老大,JDK包含了JRE,JRE包含了JVM,JVM最小)

名词解释
类:在本节课中可以理解成写Java代码的文件,后缀名为*.java。

类库:可以方便记成内裤(谐音),由一堆Java类打包在一起组成的库,封装一些类方便使用。

Java基础&核心类库:包括JVM需要运行时的类库以及Java基础类库,例如:rt.jar,
rt.jar包含了非常多的类,是Java基础类库(Java API),有60MB大,
为JRE自带的,包括许多有名的常用类,包括:String、Collection、List、Integer等。

JRE是个运行环境,JDK是个开发环境,因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。
而JDK里面已经包含了JRE,因此只要安装了JDK,就可以开发Java程序,也可以正常运行Java程序。
但由于JDK包含了许多与运行无关的内容,例如编译器、调试器等,占用的空间较大,
因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可(例如在服务器中运行Java程序)。

正常开发流程:程序员使用JDK(调用JRE里的Java API)开发了Java程序后,
通过JDK中的编译程序(javac)将Java源文件(.java文件)编译成Java字节码(.class文件),
在JRE上运行这些Java字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

来看一下三者关系的总图:
1.杨明翰的Java教学系列之认识Java篇_第3张图片

JVM(Java Virtual Machine)

Java虚拟机,主要负责运行Java编译器编译后的字节码文件(*.class文件),它存在于内存中,与内存打交道。
JVM运行在操作系统之上,与硬件没有直接交互,JVM是实现跨平台的核心。
JVM是一种抽象&虚拟出来的计算机,和实际的计算机一样,
它具有指令集并使用不同的存储区域,它负责执行指令,还要管理数据,内存和寄存器,指令集,寄存器,
类文件的格式,栈,垃圾回收堆,存储区等。
JVM在执行字节码时,把字节码解释成具体平台上的机器码执行。
JVM自己无法执行,必须要联合JRE中的Java基础&核心类库才能使用。

(JVM的实现原理与机制是Java中高级开发人员的必经之路,也是各大名企的面试必考题目之一!)

1.杨明翰的Java教学系列之认识Java篇_第4张图片

JDK(Java Development Kit)

Java开发工具包,是一个编写Java应用程序的开发环境(程序员专用)。
JDK是整个Java的核心,包括了JRE(Java运行环境)与一些Java开发工具(例如:jconsole、javac、java、javadoc、native2ascii、jar等)。
主流的JDK是Sun公司发布的JDK,除了Sun公司之外,还有很多公司和组织都开发了自己的JDK,
例如:IBM公司开发的JDK,BEA公司的JDK,还有GNU组织开发的JDK。

jdk1.8目录包含:
1.bin:一堆exe文件,可执行的开发工具,最主要的是javac, 例如:jconsole、javac、java、javadoc、native2ascii。
2.jre:java运行环境,包括JVM+Java基础&核心类库 。
3.lib:包含dt.jar+tools.jar的常用类库,开发依赖包。
4.db:jdk从1.6之后内置了Derby数据库,它是是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。用Java实现的,所以可以在任何平台上运行;另外一个特点是体积小,免安装,只需要几个小jar包就可以运行了。
5.include:java和JVM交互用的头文件。

JDK=JRE+Java开发工具(编译器、调试器等)


衍生一下tools.jar&dt.jar&rt.jar的关系与区别:
dt.jar与tools.jar都在JDK的lib包中,而rt.jar则在JRE的lib包中。

tools.jar:执行javac编译时使用的工具类库,
javac XXX.Java实际上就是运行java -Classpath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java,
javac就是对上面命令的封装。

dt.jar:swing的类库,桌面编程时使用。

rt.jar:rt是runtime的缩写,表示“运行时”,是java程序在运行时必不可少的重要文件,是Java基础类库,
里面包含了java程序员常用的包,如java.lang,java.util,java.io,java.net等等。

JRE(Java Runtime Environment)

Java运行环境,支持Java程序运行的标准环境,
包括了JVM(Java虚拟机)的标准实现以及Java基础&核心类库。

jre1.8目录包含:
1.bin:有java.exe但没有javac.exe,无法编译Java程序,
但可以运行Java程序,可以把这个bin目录理解成JVM。
2.lib:Java基础&核心类库,如rt.jar,也包含JVM运行时需要的类库。

JRE=JVM+Java基础&核心类库。


Java的编年史

1991

Green项目启动,开发Oak语言
20世纪90年代,硬件领域出现了单片式计算机系统,
这种价格低廉的系统可以大幅度提升消费类电子产品的智能化程度。
(例如:电视机顶盒&冰箱&收音机&烤箱&移动电话等)。
Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,
帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起研究开发新技术,
专攻计算机在家电产品上的嵌入式应用。首先考虑采用C++来开发,但由于C++的各种缺点,
就对C++进行了改造,开发了一种称为Oak的面向对象语言。

1992

Oak语言开发完成但被搁置
开发者向硬件厂商演示Green系统以及Oak语言,以说服他们使用Oak语言生产硬件芯片,
但是硬件生产商并未对此产生极大的热情。
因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,
所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。

1994

开发者讨论Oak是否可以应用在互联网中
团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。
他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,
而这一远景正是他们在有线电视网中看到的。

1995

Sun公司改名Oak为Java,并发布Java 1.0,java诞生
互联网的蓬勃发展给了Oak机会,Sun公司想起了被搁置已久的Oak,
由于Oak是按照按照嵌入式系统硬件平台体系结构进行编写的,
所以非常小,特色适用于网络上的传输系统。
Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet。
Java语言第一次提出了“Write Once,Run Anywhere”的口号。

1996

Sun公司发布JDK1.0(里程碑)
第一个正式版本的开发工具包&运行环境,标志着Java成为一种独立的开发工具。
JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。
代表技术:Java虚拟机、Applet 、AWT等;

1997

Sun公司发布JDK1.1
代表技术:JAR文件格式、JDBC、JavaBeans、RMI。
Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)等。

1998-1999

Sun公司发布JDK1.2(里程碑)以及HotSpot虚拟机
Sun公司把Java技术体系拆成3个方向:
J2SE(Java 2 Standard Edition,Java 2平台的标准版):
应用于桌面环境与底层应用程序,Java核心类,J2EE的基础;

J2EE(Java 2Enterprise Edition,Java 2平台的企业版):
应用于基于Java的应用服务器,包含J2SE中的类,提供EJB等类;

J2ME(Java2 Micro Edition,Java2平台的微型版):
应用于移动、无线及有限资源的环境,包含J2SE中的一部分类 ;

添加了strictfp关键字与现在Java编码之中极为常用的一系列Collections集合类,
代表性技术:EJB、Java Plug-in、Java IDL、Swing等。

Java虚拟机第一次内置了JIT(Just In Time)编译器,
(JDK 1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM和Exact VM,
其中Exact VM只在Solaris平台出现过;后面两个虚拟机都是内置JIT编译器的,
而之前版本所带的Classic VM只能以外挂的形式使用JIT编译器)

HotSpot虚拟机后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机。
Java 2平台的发布标志着Java的应用开始普及;

2000

Sun公司发布J2SE1.3
改进主要表现在一些类库上(如数学运算和新的Timer API等),
JNDI服务从JDK 1.3开始被作为一项平台级服务提供(以前JNDI仅仅是一项扩展),
使用CORBA IIOP来实现RMI的通信协议,等等。
对Java 2D做了很多改进,提供了大量新的Java 2D API,并且新添加了JavaSound类库;

2002

Sun公司发布J2SE1.4
此后Java的计算能力有了大幅提升,是Java走向成熟的一个版本,与J2SE1.3相比,
其多了近62%的类和接口;
代表技术:正则表达式、异常链、NIO、日志、断言、XML支持、socket支持和XSLT转换器等;

2004

Sun公司发布J2SE1.5(里程碑),J2SE1.5更名为Java SE 5
包含了从1996年发布1.0版本以来的最重大的更新,进行了大量的改进,
代表性技术: 注解、泛型、自动装箱、foreach循环、枚举、格式化I/O、可变长参数,
在虚拟机和API层面上,改进了Java的内存模型(Java Memory Model,JMM)、
提供了java.util.concurrent并发包等;

2005-2006

Sun公司发布Java SE 6(JDK1.6)以及宣布Java开源&免费
Java的版本更名:J2EE->Java EE,J2SE->Java SE,J2ME->Java ME。
代表性技术:提供动态语言支持(通过内置Mozilla Java Rhino引擎实现)、
提供编译API和微型HTTP服务器API等。
同时,这个版本对Java虚拟机内部做了大量改进,
包括锁与同步、垃圾收集、类加载等方面的算法都有相当多的改动;
从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改;

2009

Oracle公司以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有。
由于此前Oracle公司已经收购了另外一家大型的中间件企业BEA公司,
在完成对Sun公司的收购之后。

Oracle公司分别从BEA和Sun中取得了目前三大商业虚拟机的其中两个
:JRockit和HotSpot。

Oracle公司宣布在未来1~2年的时间内,将把这两个优秀的虚拟机互相取长补短,
最终合二为一。

可以预见在不久的将来,Java虚拟机技术将会产生相当巨大的变化。

2011

Oracle公司发布Java SE 7(JDK1.7)

2014

Oracle公司发布Java SE 8(JDK1.8)

2017:Oracle公司发布Java SE 9(JDK1.9)


Java开发环境搭建

由于mac平台过于简单,因此在此只介绍windows平台。

1. 下载安装JDK

输入网址:
https://www.oracle.com/java/technologies/javase-downloads.html

选择心仪的JDK进行下载,一般我们选择Java SE 8u241,
因为Java8是目前全球范围内使用者最多的版本。

1.杨明翰的Java教学系列之认识Java篇_第5张图片之后根据不同的平台与位数(32位、64位)来选择不同的安装包,下载完成后,请安装。

1.杨明翰的Java教学系列之认识Java篇_第6张图片
需要把JDK安装目录记下来,例如我的是jdk1.8.0_1212.

2.设置环境变量

我的电脑->右键属性->高级系统设置->高级->环境变量

新建系统变量JAVA_HOME(指定JDK的安装目录,Tomcat等软件启动需要这个变量):
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_121

1.杨明翰的Java教学系列之认识Java篇_第7张图片

编辑系统变量Path(指定命令搜索路径,CMD命令行中寻找javac等命令):

新增Path变量:%JAVA_HOME%\bin
1.杨明翰的Java教学系列之认识Java篇_第8张图片
注意:在JDK1.7以及JDK1.7以后不用配置CLASSPATH,
并且如果不启动类似于tomcat这种工具则不用配置JAVA_HOME,
如果用CMD命令行输入java&javac等命令则不用配置path。

注意:如果是win10系统则可以如图配置,在win10以下的平台,
需要在原PATH变量的最后写上分号";",然后再接上
%JAVA_HOME%\bin
例如:xxxxxxxx;%JAVA_HOME%\bin


第一个HelloWorld(windows平台)

在第一个java程序中,我们只需知道class是类(一种抽象概念)的意思,
“class HelloWorld“中的HelloWorld是类名即可,
其他概念(包括什么是类)会在后面的课程中讲述,这只是一个demo,
正常开发中不会使用这种方式,因为低效。

1.在D盘新建一个记书本

2.输入代码

public class HelloWorld{
  public static void main(String[] args){
    //第一个程序哟
    System.out.println("hello world");
  }
}

3.保存&将文件名命名为HelloWorld.java

4.运行CMD命令

d:
javac HelloWorld.java
java HelloWorld

5.在命令行状态下输入
1.杨明翰的Java教学系列之认识Java篇_第9张图片
javac后面跟着的是Java文件的文件名,例如 HelloWorld.java。
该命令用于将 java 源文件编译为 class 字节码文件。
运行javac命令后,如果成功编译没有错误的话,会出现一个 HelloWorld.class 的文件。
java后面跟着的是java文件中的类名,如: java HelloWorld。
注意:java命令后面不要加.class。

注意事项:
~大小写敏感:Java是大小写敏感的语言,这就意味着标识符Hello与hello是不同的。

~类:暂时理解成编写Java程序的文件,所有的Java代码都放在类中即可,类的关键字为class。

~类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,
例如MyFirstJavaClass,这也叫大驼峰式命名 ,例如:class HelloWorld的HelloWorld就是类名。

~源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),
文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

~主方法入口:程序执行需要一个入口,这个入口就是主方法,方法可以理解成编写代码的地方,
大部分的代码都要编写在方法里。新手阶段的Java程序都是由public static void main(String []args)方法开始执行,
所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,也叫小驼峰。

~半角:编程时请使用半角,Java只认半角,例如:";",而不是全角,例如:";"。

~注释:代码中出现//则代表是注释,就是程序的说明信息,不影响程序正常运行。

~输出:在新手阶段想把某些内容输出出来,那么需要使用System.out.println("");,
双引号内部填写要输出的内容。


Java编程工具

  • Eclipse
    Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

  • NetBeans
    开放源码的Java集成开发环境,适用于各种客户机和Web应用。

  • IntelliJ IDEA
    在代码自动提示、代码分析等方面的具有很好的功能。

  • MyEclipse
    由Genuitec公司开发的一款商业化软件,是应用比较广泛的Java应用程序集成开发环境。

  • EditPlus
    如果正确配置Java的编译器“Javac”以及解释器“Java”后,可直接使用EditPlus编译执行Java程序 。


总结

今天我们学习什么是Java,带大家入门,并讲解了Java的历史与特点,
还有Java的工作机制以及JDK&JRE&JVM的关系,
并让大家安装Java开发环境,并写出第一个程序。

作业

1.安装JDK并写出自己的第一个Java程序,输出:“Hello”+自己的名字。
2.理解&掌握Java的工作机制。
3.理解&掌握JDK、JRE、JVM的关系与作用。

你可能感兴趣的:(#,Java教学系列)