Java基础全程脉络图
java是学习javaEE后台,大数据,Android开发的基石
- 在移动应用领域:java是Android端的主要开发语言,占据主要地位
- 在企业级应用领域:用来开发企业级的应用程序,大型网站
- 在大数据分析,人工智能领域:流行的大数据框架都是使用java编写的,如Hadoop、Flink都是用Java编写的。Spark使用Scala编写,但可以用Java开发应用。
- 游戏领域,桌面应用和嵌入式领域:很多大象游戏的后台,桌面应用也是java开发
全程学习路线图
计算机硬件和软件
硬件:物理层面:CPU 内存 存储设备 输入设备 输出设备 通信设备
软件:精神层面:系统软件 应用软件
1. CPU 内存与硬盘
CPU(Central Processing Unit,中央处理器),电脑通过CPU实现运算和控制
硬盘(Hard Disk Drive)
计算机中最重要的存储设备,容量大,断电数据不丢失
正常分类:机械硬盘(HDD)固态硬盘(SSD)以及混合硬盘(SSHD)
固态硬盘在开机速度和程序加载速度远高于机械硬盘,但是贵,无法完全取代机械硬盘
内存(Memory)
负责硬盘上的数据与CPU之间的数据进行交换处理
具体:保存从硬盘上读取的数据,提供给CPU使用,保存CPU执行的临时结果,以便CPU下次使用或保存到硬盘
断电后数据丢失
三者关系图
2. 什么是软件
一系列按照特定顺序组织的计算机数据和指令的集合,有系统软件和应用软件区分
Pascal 之父Nicklaus Wirth:“Programs = Data Structures + Algorithms”
系统软件
应用软件
3. 人机交互方式
图形化界面(Graphical User Interface, GUI):简单直观,易于操作,容易上手
命令行方式(Command Line Interface, CLI):需要在控制台输入指定的指令,让计算机完成一些操作,需要记忆
4. 常用的DOS命令
DOS(Disk Operating System, 磁盘操作系统)在Microsoft公司在windows之前推出的一个操作系统,但单用户,单任务(只能执行一个任务)的操作系统,现在被Windows取代
操作 | 说明 |
盘符名称: | 盘符切换E回车 表示切换到E盘 |
dir | 列出当前目录下的文件夹及文件 |
cd 目录 | 进入指定单级目录 |
cd 目录1\目录2\… | 进入指定多级目录 cd atguigu\javaee |
cd .. | 回退到上级目录 |
cd \ | 回退到盘符目录 |
md 文件目录名 | 创建指定的文件目录 |
rd 文件目录名 | 删除指定的文件目录(如果文件目录中有数据,删除失败) |
cls | 清屏 |
exit | 退出命令提示符窗口 |
← → | 移动光标 |
↑ ↓ | 调阅历史操作命令 |
delete backspace | 删除字符 |
计算机汇编语言
1. 计算机语言是什么
语言:任何人之间用于沟通的一种方式
计算机汇编语言:人与计算机沟通的港式,人们使用编程语言对计算机下达命令,让计算机完成人们需要的功能
计算机语言有很多种,C C++ Java Go JavaScript Python Scala等
语言= 语法+逻辑
2. 计算机语言简史
第一代:机器语言
1946年2月14日,世界第一台计算机ENAC诞生,使用的是最原始的穿孔卡片,这种卡片上使用的是二进制代码表示的语言,这种语言程为机器语言
本质上是计算机唯一能识别的语言,人类很难理解
第二代:汇编语言
使用英文缩写的助记符来表示基本的操作,这些助记符构成了汇编语言的基础,比如'LOAD' 'MOVE'等,使人更加容易使用功能,因此汇编语言也称为符号语言
优点:能编写高效率的程序
缺点:汇编语言是面向机器的,不同计算机机型特点不同,因此会有不同的汇编语言,彼此之间不能通用,程序不易移植,较难调试
比起机器语言,汇编语言大大进步,是机器语言向更澳际的语言进化的桥梁,目前仍然用于工业电子变成领域,软件的加密解密,计算机病毒分析等
第三代:高级语言
高级语言发展于20世界50年代中叶到70年代,是一种接近于人们使用习惯的程序设计语言,允许程序员使用接近日常英语的指令来编写程序,程序中的符号和算式也于日常使用的数学式子差不多,更容易人们掌握
高级语言独立于机器,有一定的通用性,计算机不能直接识别和执行高级语言编写的程序,需要使用编译器或解释器转换为机器语言才能被识别和执行
此外,高级语言按照程序设计方法的不同,分为:面向过程的语言和面向对象的语言
Java:跨平台纯面向对象的语言
C/Pascal /Fortran:面向过程的语言
C++:面向过程,面向对象
目前以及可预见的未来,计算机语言仍处于第三代高级语言的阶段,无论什么语言,最后都要向机器语言靠近,因为CPU只识别0和1
计算机语言排行
C语言:万物之源 | 诞生于1972年,由AT&T公司旗下的贝尔实验室创建完成,用于构建Unix操作系统 偏向计算机底层操作(操作系统,网络,硬件驱动等) | 几乎所有现代语言都脱胎于C | 相当陡的学习曲线,不支持面向对象编程 |
C++:难学的语言 | 诞生于1983年,作为C语言的增强方案没升级版本 C++是C语言的超集,C语言的大部分知识也适用于C++ windows或MacOS UI office全家桶,主流的浏览器Oracle MySQL著名的游戏引擎 | 很多公司都使用C++作为开发核心架构,如Google 腾讯百度 阿里云等,面相对象性 | 体系极为庞大,世界目前来说最复杂,最难的编程语言 |
C#:背靠大树的语言 | 诞生于2000年,一款强大而灵活的编程语言,背靠围绕的大树,多年来说windows平台的一门主流编程语言 windows桌面应用开发 Windows Azure 游戏开发 | ||
PHP:最好的语言? | 诞生于1994年,一看服务器端脚本语言 和C的语法类似,有很多的模板和框架,简单移动,主要主要用于web端,快速建站网络开发 | 学习门槛低,其代码运行速度低于大部分变成语言 | |
Python:最好学的语言 | 诞生于1991年,一种面向对象的语言,胶水语言,哪里都可以使用 | 运行效率不高 | 开发效率很高 |
JavaScript语言:前端为王 | 诞生于1995年,网景公司开发完成 | 是目前所有主流浏览器上唯一支持的脚本语言,在前端开发阿忠占有不可替代的地位 | |
Java:需求旺盛 | 创建于1995年,面向对象,基于类的编程语言是目前运用最广的项目语言,代码稳定性超过C和C++生产力远超C和C++ JVM在,可以轻松的跨平台 | 具有强大的开源开发工具,大象的开源共享库 | |
Go语言:夹缝中生存 | 现在很受关注,是取代C和C++的另一门有潜力的语言 称为云计算领域的标准语言,尤其是在Docker/Kubernetes | 语言语法特别简单,有了C和C++基础可以0成本学习 从Java社区一直了各种优秀的框架和库 |
总结:程序设计语言有很多种,每种语言都是为了实现某个特定的目的而发明的
没有最好的语言,只有特定场景下相对来说,最合适的语言
如果已经掌握了一种编程语言,也会更容易上手其他的编程语言,关键是学习如何使用程序设计方法来解决问题
Java语言概述
1. Java概述
是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言
是一种面向Internet的编程语言,Java一开始富有吸引力是因为Java程序可以在web浏览器运行,这些java称为Java小程序(applet)内嵌在HTML代码中
伴随着互联网的高速发展,java技术在web方面的不断成熟,已经成为web应用程序的首选开发语言
2. Java语言简史
1991年SUN的工程师小组想要设计一种语言,应用在电视机,电话,闹钟等家用电器的控制和通信,由于这些设备的处理能力和内存都有限,并且不同的厂商选择不同的CPU,因此这种语言的关键是代码短小,紧凑,平台无关(不能与特定的体系结构绑定)
随着20世纪90年代互联网的发展,Sun公司发现该语言在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。(Java是印度尼西亚`爪哇岛`的英文名称,因盛产咖啡而闻名。)
詹姆斯·高斯林(James Gosling)先生以“Java 技术之父”而闻名于世。他是Java 技术的创始人,他亲手设计了Java语言,并开发了Java编译器和Java虚拟机,使Java成为了世界上最流行的开发语言。于1984 年加入Sun公司,并一直服务于Sun公司,直至2010年前后,Sun被Oracle并购而加入Oracle,担任客户端软件集团的首席技术官; 2010年4月从Oracle离职。
重要历史节点:
Java 5.0:退出很多新特性,平台名变更
java8.0:2014 继5.0之后变化最大的版本是长期支持版本
java 9.0:此后,每半年更新一次,此后不再支持windows 32位系统
java 11.0:JDK安装包取消独立安装JRE包
java 17.0:长期支持版本
3. Java技术体系平台
JavaSE(java standard Edition)标准版
支持面向桌面级应用的java平台,及定位个人计算机的应用开发
包括用户界面接口AWT及Swing,网络功能与国际化,图像处理能力与输入输出支持等
此版本之前成为J2SE
Java EE(Java Enterprise Edition)企业版
为开发企业环境下的应用程序提供的一套解决方案,及定位在服务端的Web应用开发
JavaEE是JavaSE的扩展,增加了用于服务器开发的类库,如Servlet能够延伸服务器的功能,通过请求-相应模式处理客户端的请求,jsp是一种可以将java程序代码内嵌子啊网页内的技术
版本之前称为J2EE
Java ME(Java Micro Edition)小型版
支持java程序运行在移动终端的平台,即定位在消费性电子产品的应用开发
JavaME是JavaSE的内伸,精简了JavaSE的核心类库,同时也提供自己的扩展类,增加了适合微小装置的类库 java.microedition.io等
此版本之前称为J2ME
Andriod开发不等同于JavaME开发
Java8.0 platform示例:
4. Java开发环境搭建
JDK:(Java Development Kit)是java程序开发工具包,包含JRE和开发人员使用的工具
JDK = JRE+开发工具集
JRE:(Java Runtime Environment)java程序的运行时环境,包含JVM和运行时所需要的核心类库。
JRE = JVM+Java SE标准库
版本选择
5.Hello world
java程序编写和执行的过程
1. 编写,将java代码编写子啊.java结尾的源文件中
2. 编译,针对.java结尾的源文件进行编译操作,格式:javac 源文件名.java
3. 运行,针对于编译后生成的字节码文件,进行解释运行,格式:java 字节码文件名
class HelloChina {
public static void main(String[] args){
System.out.println("hello world");
}
}
class:关键字,表示类,后面跟随类名
main()方法的格式是固定的
main()方法是java语言的入口
java程序严格区分大小写
从控制台输出数据的操作:
System.out.println():输出数据后,换行,括号内可以为空,
System.out.print():输出数据后,不换行,括号内为空会报错
每一个执行语句必须以;结尾
一个源文件尽量只写一个类,便于维护
编译后,会生成一个或多个字节码文件,每一个字节码文件对应一个java类,字节码文件名与类名相同。
编译不通过可以考虑的问题:
- 查看编译的文件名,文件路径是否存在书写错误
- 查看代码中是否出现语法问题
运行过程,是针对字节码文件对应的java类运行的,需要注意大小写
运行不通过可以考虑的问题
- 查看编译的文件名,文件路径是否存在书写错误
- 可能存在运行时异常,在第九章中讲解
一个源文件可以生成多个类,将编译出多个字节码文件,但是最多只能有一个类使用public进行声明,且要求声明为public的类与源文件名相同
指定源文件的字符编码:
javac -encoding utf-8 xxx.java
6. java注释
java中分为单行注释 // ,多行注释/* */和文档注释/** */(java独有)
单行注释和多行注释:
1. 对程序中的代码进行解释说明
2. 对程序进行调试
3. 单行注释和多行注释中声明的信息,不参与编译,也就是说编译后声明的字节码文件中不包含单行注释和多行注释的信息
多行注释不能嵌套使用
文档注释
文档注释的内容可以被JDK提供的工具javadoc解析,生成一套以网页文件形式体现的该程序的说明文档文件夹
javadoc -d mydoc -author -version CommentTest.java
7. java核心机制
生成的字节码文件,通过java.exe命令进行运行,这个时候JVM便对该文件进行内存的分配和运行
1. java语言的优缺点
优点:
跨平台性:是java的核心优势,java在最初设计的时候就注重移植和跨平台性。比如java的int永远都是32位,不像C++可能是16和32,根据编译器厂商规定的变化
通过java编写的应用程序在不同的系统平台上都可以运行
原理:只要在运行java应用程序的操作系统上,先安装一个java虚拟机(JVM, Java Virtual Machine),由JVM负责java程序在该系统中的运行
面相对象性:是一种程序设计技术,非常适合大型的软件设计和开发,面相对象编程支持封装,集成多态等特性,程序可高内聚,低耦合
健壮性:吸收了c/c++语言的优点,去掉了其影响程序健壮性的部分(如指针,内存的申请和释放等),提供了一个相对安全的内存管理和访问机制
安全性高:java适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的共计,如安全防范机制,可以分配不同的命名空间以防替代本地的同名类,字节代码检查
简单性:java是 C++语法的简版,也称为C++--
高性能:java发展中期通过虚拟机的优化提升了几十倍的运行效率,通过JIT即时编译技术提高
缺点:
语法过于复杂,严谨:
一般适用于大型网站开发,整个架构会比较重
并非适合所有领域
2. JVM功能说明
JVM, Java Virtual Machine 是一个虚拟的计算机,是java程序的运行环境,JVM具有指令集,并使用不同的存储领域,负责执行指令,管理数据,内存和寄存器
功能1:实现java程序的跨平台性功能2:自动内存管理(内存分配,内存回收)
java程序在运行过程中,涉及到运算的数据分配,存储都由jvm完成
java消除了程序员回收无用空间内存的职责,提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应的阈值时,检查并释放可被释放的存储器空间
GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄露
问题:
1. java程序还会出现内存溢出和内存泄露的问题吗?是的!!!
内存泄露多即导致内存溢出
2. 如何看待java是一门半编译半解释型的语言?
生成的字节码文件有两种执行方式:
逐行运行
针对热点代码提前编译运行(JIT)