Java语言概述
Java基础是学习JavaEE、大数据、Android开发的基石。
# Java基础知识图解
- 任何语言都会有关键字、数据类型、运算符、流程控制
# 软件开发介绍
# 软件开发
软件,即一些列按照特定舒徐组织的计算机数据和指令的集合。有系统软件和应用软件之分。
- 系统软件:操作系统
例如:windows,mac,Linux,Android,IOS等等...
- 应用软件:应用程序
平时用的软件,word,ppt,excel等等....
# 人机交互方式
- 图形化界面(Graphical User Interface GUI)
这种方式简单直观,使用者易于接受,容易上手操作。
- 命令行方式(Command Line Interface CLI)
需要一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记住一些指令。
# 操作系统发展史
施乐-苹果-微软
Pascal之父Nicklaus Wirth: "Algorithms+Data Structures=Programs"
算法 + 数据结构 = 应用程序
算法其实是业务逻辑。
数据结构解决的是数据存储的问题。
不同的数据结构,会产生不同的效率,就算是算法再好,如果数据结构选的不合适,虽然结果能达到,但是效率很差。所以这是值得深入研究的问题。
# 常用的DOS命令
# 切换盘符
d:
# 列出当前目录下的文件以及文件夹
dir
# 创建目录 make directory
md <name>
# 删除目录 目录不是空不能删除
rd <name>
# 进入指定目录
cd
# 退回到上一级目录
cd..
# 退回到根目录
cd /
# 创建文件
echo name:Tom,age=12>1.doc
# 删除文件 delete
del <name>
del *.txt
del <directory> # 删除目录下的文件
# 退出dos命令行
exit
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 常用快捷键
← →:移动光标
↑ ↓:调阅历史操作命令
Delete和Backspace:删除字符
# 计算机编程语言介绍
# 什么是计算语言?
如果人要与计算机交流,那么就要学习计算机语言。
九三级语言有很多种。如:C,C++,Java,PHP,Kotlin,Python,Scala,Rust等等。
# 计算机语言的发展
- 第一代语言:机器语言
指令以二进制代码形式存在。
- 第二代语言:汇编语言
使用助记符表示一条机器指令。
- 第三代语言:高级语言。
C、Pascal、Fortan面向过程的语言
C++面向过程/面向对象语言
面向对象的语言
Java跨平台的纯面向对象的语言
.NET跨语言的平台
Python、Scala……
# Java语言概述
- 是SUN(Standfor University network,斯坦福大学网络公司)1995年推出的一门高级编程语言。
- 是一种面向Internet得编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。Applet使用现在的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。
- 随着Java技术在web方面的不断成熟,已经称为Web应用程序的首选开发语言。
后台开发语言:Java、PHP、Python、Go、Node.js
Java适合综合大型网站
PHP、Python适合中小项目。
- 安卓系统的架构
# 为什么用Java?
- 从Java语言的市场需求来看。
TIOBE (opens new window)是一个流行编程语言排行,每个月更新,排名权重,基于世界范围内,工程数量,课程数量和第三方供应商数量。搜索引擎也以此为标准。
从目前中国市场就业岗位和薪资待遇来说,Java发展得最好。
# Java版本历史
- 1991年Green项目,开发语言最初命名Oak(橡树)
- 1994年,开发组意识到Oak非常适合于互联网
- 1995年5月23日,Java语言诞生
- 1996年1月,第一个JDK (opens new window)-JDK1.0 (opens new window)诞生
- 1996年4月,10个最主要的操作系统 (opens new window)供应商申明将在其产品中嵌入JAVA技术
- 1996年9月,JDK1.0发布,约8.3万个网页应用了JAVA技术来制作
- 1997年2月18日,JDK1.1 (opens new window)发布
- 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
- 1997年9月,JavaDeveloperConnection (opens new window)社区成员超过十万
- 1998年2月,JDK1.1 (opens new window)被下载超过2,000,000次
- 1998年12月8日,JAVA2 (opens new window)企业平台J2EE发布
- 1999年6月,SUN公司发布Java的三个版本:标准版(J2SE (opens new window))、企业版(J2EE (opens new window))和微型版(J2ME (opens new window))
- 2000年5月8日,JDK1.3 (opens new window)发布
- 2000年5月29日,JDK1.4 (opens new window)发布
- 2001年6月5日,NOKIA (opens new window)宣布,到2003年将出售1亿部支持Java的手机
- 2001年9月24日,J2EE1.3 (opens new window)发布
- 2002年2月26日,J2SE1.4 (opens new window)发布,自此Java的计算能力有了大幅提升
- 2004年9月30日18:00PM,J2SE1.5 (opens new window)发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5 (opens new window)更名为Java SE 5.0(JDK5.0)
- 2005年6月,JavaOne大会 (opens new window)召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
- 2006年12月,SUN公司发布JRE6.0
- 2009年12月,SUN公司发布Java EE 6,Oracle收工SUN,交易价格74亿美元
- 2010年11月,由于Oracle公司对于Java社区的不友善,因此Apache扬言将退出JCP[14] (opens new window)
- 2011年7月28日,Oracle公司发布Java SE 7
- 2014年3月18日,Oracle公司发表Java SE 8,是继JDK 5.0以来变化最大的版本
- 2017年9月21日,Oracle公司发表Java SE 9
- 2018年3月21日,Oracle公司发表Java SE 10,版本号也开始按年和日期称呼,称为18.3
- 2018年9月25日,Java SE 11发布,版本号也称为18.9
现在JDK基本上每6个月更新一次。
通常公司都是用最稳定的版本,现在基本上都是JDK 8.0
# Java技术体系平台
- Java SE (Java Standard edition) 标准版
支持面向桌面级应用(如Windows下的应用程序)的JavaPing太,提供了完整的Java核心API,此版本以前称为J2SE
- Java EE (Java Enterprise Edition) 企业版
是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如Servlet、Jsp等,主要针对于Web应用程序卡覅。版本以前称为J2EE
- Java ME (Java Micro Edition) 小型版
支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME
- Java Card
支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台
# Java在各领域的应用
- 企业级应用
主要指复杂的大企业的软件系统、各种类型的网站。Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广发应用。应用领域包括金融、电信、交通、电子商务等。
Java Web开发:后台开发
- Android平台应用
Android应用程序可以用Java语言编写。Android开发水平的高低很大程度取决于Java语言核心能力是否扎实。
- 大数据平台开发
各类框架有Hadoop,Spark,Storm,flink等,就这类技术生态圈来讲,还有各种中间件如flume,kafka,sqoop等等,这些框架以及工具大多数是用Java编写而成,但提供诸如java,Scala,Python,R等各种语言API供编程。
- 移动领域应用
主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机,PDA,机顶盒,汽车通信设备等。
# Java语言的诞生
Java之父James Gosling团队在开发”Green“项目时,发现C却笑垃圾回收系统,还有可移植的安全性、分布程序设计和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。
Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java堪称是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全现同。但同时,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再应用的对象所占据的内存空间。JDK1.5又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱。
# Java语言主要特性
- java语言是易学的。
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。
- Java语言是强制面向对象的。
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字implenments)。
- Java语言是分布式的。
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用接口(java net),它提供了用语网络应用编程的类库,包括URL、URLConnetciton、Socket、ServerSocket等。java的RMI(远程方法激活)机制也是开发啊分布式应用的重要手段。
- Java语言是健壮的。
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
当你未接触java语言时,是不了解这些特性,当你懂得了Java语言,回头再来看这些特性,你就明白了。
# Java语言运行机制及运行过程
# Java语言的特点
- 面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态
- 健壮性
吸收了C/C++语言的有点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
其实仍然可能会出现内存溢出、内存泄漏,但是已经很健壮了。
跨平台性
通过Java语言编写的应用程序在不同的系统平台上都可以运行。”Write once,Run Anywhere“
原理:只要需要运行java应用的操作系统上,想安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
# 跨平台性
因为有了JVM,同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了Java程序的跨平台性。
Java程序实际是跑在JVM上,而JVM可以安装在不同的系统上。
不同操作系统的JVM是不一样的。
# Java的两种核心机制
- Java虚拟机(Java Virtal Machine)
- 垃圾收集机制(Garbage Collection)
# 核心机制——Java虚拟机
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可以在此平台云运行
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
写的Java去执行形式是字节码的形式,跑在JVM上,JVM依赖操作系统,操作系统需要硬件CPU进行计算。
# 核心机制——垃圾回收
- 不再使用的内存空间应回收——垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存。
Java语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放哪些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
- Java程序还会出现内存泄漏和内存溢出问题吗?YES!
程序员写程序的时候,GC有时候不能自识别导致,具体拓展等后面会详细说。
# Java的环境搭建
我们了解java有许多版本,但目前企业中最常用的是8。而且高版本也是向下兼容。
旧的功能,想删除掉,但是不敢,因为不是每个公司都要重新编写程序的能力,如果新版本删除了旧功能,旧项目跑不起来了……
什么是JDK,JRE
# JDK
- JDK,全称为Java Development Kit,Java开发工具包
JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就不用单独安装JRE了。
# JRE
- JRE,全称为Java Runtime Environment,Java运行环境
包括Java虚拟机和java程序所需的核心类库等,如果想要运行一个开发号的Java程序,计算机中只需要安装JRE即可。
简单而言,使用JDK的开发工具完成的Java程序,交给JRE去运行。
# JDK、JRE、JVM关系
- JDK = JRE + 开发工具集(例如Javac编译工具等)
- JRE = JVM + Java SE标准类库
如图,上面是官方的关系图。
# 下载安装
官方网站:
www.oracle.com
java.sun.com
Windows下用Chocolatey管理包工具 | Saul's blog (opens new window)
这里我建议win10使用Chocolatey安装JDK8
不同的操作系统安装JDK方式不同。
如果是手动安装
安装路径不要中文,不要有空格 安装文件夹保留版本号
64位系统装64位,32位系统装32位程序
# 环境变量
如果是用chocolatey 安装,不需要配置环境变量,因为自动配置了
如果你没有配置环境变量,你必须在java目录下,才可以执行以下指令
java.exe
javac.exe
java -version
2
3
如果都没有报错,代表安装成功。
但是如果想要在任何位置都能执行java程序,必须配置环境变量。
下面我以win10系统为例
- 我的电脑>>属性>>高级系统设置>>高级>>环境变量
可以在用户变量或者系统变量配置,区别是一个是只有当前win10用户能使用,另一个是所有用户都能使用。
# 编辑PATH,后面追加一个
%JAVA_HOME%\BIN;
# 新建一个JAVA_HOME环境变量
JAVA_HOME:C:\Program Files\Java\jdk1.8.0_211
2
3
4
配置成功后,重新打开cmd控制台,再试试
java.exe
javac.exe
java -version
2
3
就可以了。实现了在任何位置执行java程序。
当系统中存在多个JDK版本,只要看环境变量指向哪个版本,就使用哪个版本。
# 开发体验-HelloWorld
- 步骤
- 将Java代码编写到拓展名为.java的文件中
- 通过javac命令对该java文件进行编译
- 通过java命令对生成的class文件进行运行
# 编写代码
创建一个java源文件,比如是新建一个demo.java文件
class HelloWorld{
public static void main(String[] args){
System.out.println("你好!世界!");
}
}
2
3
4
5
# 编译文件
# cd切换到java文件下的目录
javac demo.java
2
- 会发现同一个目录生成一个HelloWorld.class文件,字节码的文件是根据源文件的类名生成。
- 每次修改源代码,都需要重新编译一次。
win10系统不区分大小写,所以通过win10系统运行编译器的时候,不区分大小写也能找到文件。不信?试试新建大小写不同的文件夹,会提示重复。
# 运行class文件
java HelloWorld
这时候就成功运行了。
运行class文件的时候是区分大小写的
如果能运行java -v,java.exe程序,但是就是运行不了class文件,检查是不是配置了classpath,删除掉这个环境变量
# 注释(Comment)
- 用于注解说明解释程序的文字就是注释。
注释提高了代码的阅读性,是调试程序的重要方法。
注释是一个程序员必须具有的良好编程习惯,将自己的思想通过注释先整理出来,再用代码去体现.
注释了的内容不参与编译,换句话说,编译以后生成的.class结尾的字节码文件中不包含注释信息
Java中的注释类型:
- 单行注释
- 多行注释
- 文档注释
# 单行注释
class HelloWorld{
// main方法是程序的入口
// main方法的格式是固定的
public static void main(String[] args){
// 这是单行注释 如下的语句表示可以输出到控制台
System.out.println("你好!世界!");
}
}
2
3
4
5
6
7
8
# 多行注释
/*
多行注释
main方法是程序的入口
main方法的格式是固定的
*/
class HelloWorld{
public static void main(String[] args){
System.out.println("你好!世界!");
}
}
2
3
4
5
6
7
8
9
10
多行注释不可以嵌套使用
# 文档注释
文档注释是Java特有的。注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档
- 格式
/**
* @author 指定Java程序的作者
* @version 指定源文件的版本
*/
2
3
4
- 操作方式
# folder是指文件夹名字
javadoc -d <folder> -author -version
2
打开index.html
# Java API的文档
- API(Application Programming Interface,应用程序编程接口)是Java提供的基本编程接口。
习惯上:将语言提供的类库,都称为api。
- Java语言提供了大量的基础类,因此Oracle也为这些基础类提供了相应的API文档,用语高速开发者如何使用这些类,以及这些类里包含的方法。
所谓API文档,就是针对于提供的类库如何使用,给的一个说明书。类似于《新华字典》
- 下载地址 (opens new window),Additional Resources-Java SE 8 Documentation 下载。
# 良好的编程风格
- 正确的注释和注释风格
使用文档注释来注释整个类或整个方法。
如果注释方法中的某一个步骤,使用单行或多行注释。
- 正确的缩进和空白
使用一次tab操作,实现缩进。
运算符两边习惯性加一个空格。比如: 2 + 4 * 5.
- 块的风格
Java API源代码选择了行尾风格
行尾风格
class HelloWorld{
public static void main(String[] args){
System.out.println("你好!世界!");
}
}
2
3
4
5
次行风格
class HelloWorld
{
public static void main(String[] args){
System.out.println("你好!世界!");
}
}
2
3
4
5
6
后期IDEA基本上都会帮你实现这些
# 常用的java开发工具
Intergrated Development Environment
# 文本编辑工具
- 记事本
- UltraEdit
- EditPlus
- TextPad
- NotePad
# Java集成开发环境(IDE)
- JBuilder
- NetBeans
- Eclipse
- MyEclipse
- IntelliJ IDEA
IntelliJ IDEA简称IDEA,目前Java开发效率最快的IDE工具,强烈推荐使用!
# 总结
Java程序编写-编译-运行的过程
- 编写:将编写的java代码保存在以“.java”结尾的源文件中
- 编译:使用javac.exe命令编译java源文件,会生成字节码文件。格式:
javac 源文件名.java
- 运行:使用java.exe命令解释运行字节码文件。格式:
java 类名
提示
在java源文件中可以生命多个class。但是,只能最多有一个类声明为public。 而且要求声明为public的类的类名必须与源文件现同。
程序的入口是main()方法,格式是固定的。
- args,arguments:参数
- args可以用其他变量命名
- 中括号可以写在args[]或者变量名[]
- 但是推荐不作任何改变
输出语句
// 先输出数据,然后换行
System.out.println();
// 只输出数据
System.out.print();
2
3
4
提示
每一行执行语句都以“;”结束。
编译的过程
编译以后,会生成一个或多个字节码文件。字节码文件名与java源文件中的类名相同。