本文章为JAVA学习笔记,参考尚硅谷教程。
文章目录
1 JAVA基础学习路线
JAVA基础学习过程
2 JAVA基础背景
2.1 JAVA背景
是SUN(Stanford University Network,斯坦福大学网络公司) 1995 年推出的门高级编程语言。 |
---|
Java之父James Gosling团队在开发项目时,发现C语言缺少垃圾回收系统,还有可移植的安全性、分布程序设计和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。 |
是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。 |
随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。 |
2.2 JAVA语言特性
Java看成是类C语言发展和衍生的产物。Java确实是从C语言和C++语言继承了许多成份,比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。 |
---|
Java是一个纯粹的面向对象的程序设计语言。Java语言是强制面向对象的,Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。 面向对象: 两个基本概念:类、对象 三大特性:封装、继承、多态 让程序更好达到 高内聚 ,低耦合 的标准。 |
Java舍弃C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。 |
JDK1.5又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱 |
Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。 |
Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。吸收C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。 |
Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的。 |
Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。 |
Java语言是体系结构中立的 / 解释型的 / 具有跨平台性的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统的解释器中运行。只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。注:Class 文件、字节码文件和类文件是一个意思 |
2.3 JAVA简史
- 1991年 Green项目,开发语言最初命名为Oak(树)
- 1994年,开发组意识到Oak非常适合于互联网
- 1996年,发布JDK1.0,约8.3万个网页应用Java技术来制作
- 1997年,发布JDK1.1,JavaOne会议召开,创当时全球同类会议规模之最
- 1998年,发布JDK1.2,同年发布企业平台J2EE
- 1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
- 2004年,发布里程碑式版本:JDK1.5,为突出此版本的重要性,更名为JDK5.0
- 2005年,,J2SE->JavaSE,J2EE->JavaEE,J2ME->JavaME
- 2009年,Oracle公司收购SUN,交易价格74亿美元2011年,发布JDK7.0
- 2014年,发布JDK8.0,是继JDK5.0以来变化最大的版本2017年,发布JDK9.0,最大限度实现模块化
- 2018年3月,发布JDK10.0,版本号也称为18.3
- 2018年9月,发布JDK11.0,版本号也称为18.9
发展阶段:
发行版本 | 发行时间 | 备注 |
---|---|---|
Java 1.0 | 1996.01.23 | Sun公司发布了Java的第一个开发工具包 |
Java 1.1 | 1997.02.19 | JavaOne会议召开,创当时全球同类会议规模之最。 |
Java 1.2 | 1998.12.08 | Java拆分成:J2SE(标准版)、J2EE(企业版)、J2ME(小型版) |
Java 1.3 | 2000.05.08 | |
Java1.4 | 2004.02.06 | |
Java 5.0 | 2004.09.30 | ①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaME |
Java 6.0 | 2006.12.11 | 2009.04.20 Oracle宣布收购SUN公司 |
2009.04.20 | Oracle公司收购SUN,交易价格74亿 美元。 | |
Java 7.0 | 2011.07.02 | |
Java 8.0 | 2014.03.18 | 此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTS) |
Java 9.0 | 2017.09.22 | ①此版本开始,每半年更新一次;②Java 9.0开始不再支持windows 32位系统 |
Java 10.0 | 2018.03.21 | |
Java 11.0 | 2018.09.25 | JDK安装包取消独立JRE安装包,是长期支持版本(LTS) |
Java 12.0 | 2019.03.19 | |
… | … | |
Java17.0 | 2021.09 | 发布Java 17.0,版本号也称为21.9,是长期支持版本。 |
… | … | |
Java19.0 | 2022.09 | 发布Java19.0,版本号也称为22.9。 |
2.4 Java 技术体系平台
Java SE(Java Standard Edition)标准版 支持面向桌面级应用(如Windows下的应用程序)的Java平台,即定位 个人计算机的应用开发 。提供了完整的Java核心API,包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。 此版本以前称为J2SE |
---|
Java EE(Java Enterprise Edition)企业版 为开发企业环境下的应用程序提供的一套解决方案,即定位 在服务器端的Web应用开发 。JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术。 版本以前称为J2EE |
Java ME(Java Micro Edition)小型版 支持Java程序运行在移动终端(手机、PDA)上的平台,即定位在 消费性电子产品的应用开发 。对Java API有所精简,并加入了针对移动终端的支持JavaME是JavaSE的内伸,精简了JavaSE 的核心类库,同时也提供自己的扩展类。增加了适合微小装置的类库:javax.microedition.io.*等。 此版本以前称为J2ME |
Java Card 支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台 |
注意:Android开发不等同于Java ME的开发
2.5 Java语言运行机制及运行过程
2.5.1 核心机制—Java虚拟机 ( JVM Runtime Data Area 虚拟机运行时数据区 )
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
区域名称 | 作用 |
---|---|
虚拟机栈 | 用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度 的各种基本数据类型、对象引用,方法执行完,自动释放。 |
堆内存 | 存储对象(包括数组对象),new来创建的,都存储在堆内存。 |
方法区 | 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。 |
本地方法栈 | 当程序中调用了native的本地方法时,本地方法执行期间的内存区域 |
程序计数器 | 程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址 |
2.5.2 核心机制—垃圾回收
- 不再使用的内存空间应回收,转为使用垃圾回收。
- 在C/C++等语言中,由程序员负责回收无用内存。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
- 注意:Java程序仍会出现内存泄漏和内存溢出问题。
2.6 环境搭建名词解释(JDK、JRE)
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JRE(Java Runtime Environment Java运行环境)
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
小结:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
JAVA 8.0 Platform
2.7 Class 文件
程序员并不需要自己去适配不同的操作系统,大家都知道我们平时编写的 java 代码在编译成 Class 文件后才能执行,而 Class 文件可以在任何操作系统上的 JVM 上执行,这样就做到了“平台无关性”
###2.8 JDK的下载
- 下载网址(Oracle公司官网):www.oracle.com
2.9 Java API 文档
官方中文下载地址:Java SE 文档 — API 和文档 | Oracle 中国
- API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
- Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的
- API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
2.10 编程风格
缩进:按一次Tab
Java中的名称命名规范:
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
- 注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- 注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。