第一章 Java概述
1.从项目到代码
项目 | 人体 |
子系统(仓储、物流、商品、认证……) | 子系统(呼吸、免疫、消化、血液循环……) |
模块(商品搜索、商品发布、商品展示……) | 器官(胃、小肠、大肠、胰腺、肝脏、胆囊……) |
包(组件类包、实体类包、工具类包……) | 组织(结缔组织、肌肉组织、脂肪组织、……) |
类(Servlet组件类、Service组件类、Dao组件类……) | 细胞(肌肉细胞、脂肪细胞、血小板、白血球、红血球…… |
代码(变量、常量、方法、流程控制、异常处理、IO、反射、枚举、泛型……) | 细胞组成部分(细胞壁、细胞质、细胞液……) |
2.JavaSE体系
- 第一部分:计算机编程语言核心结构:
数据类型
、运算符
、流程控制
、数组
、… - 第二部分:Java面向对象核心逻辑:
类和对象
、封装
、继承
、多态
、抽象
、接口
、… - 第三部分:JavaSE核心高级应用:
集合
、I/O
、多线程
、网络编程
、反射机制
、… - 第四部分:Java新特性:
Lambda表达式
、函数式编程
、新Date/Time API
、接口的默认、静态和私有方法
、… - 第五部分:MySQL/JDBC核心技术:
SQL语句
、数据库连接池
、DBUtils
、事务管理
、批处理
、…
3.计算机语言介绍(了解)
计算机语言是什么
所谓计算机编程语言,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
- 第一代:机器语言
- 第二代:汇编语言
- 第三代:高级语言
4.Java语言概述(了解)
4.1 Java生态圈
- Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大,Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。
- 作为一个平台,Java虚拟机扮演着举足轻重的作用。除了 Java语言,任何一种能够被编译成字节码的计算机语言都属于Java这个平台。Groovy、Scala、 JRuby、Kotlin等都是Java平台的一部分,它们依赖于Java虚拟机,同时,Java平台也因为它们变得更加丰富多彩。
- 作为一种文化,Java几乎成为了 “开源”的代名词。在Java程序中,有着数不清的开源软件和框架。如Tomcat、Struts, Hibernate, Spring等。就连JDK和JVM自身也有不少开源的实现,如OpenJDK、Apache Harmony。可以说,“共享”的精神在Java世界里体现得淋漓尽致。
- 作为一个社区,Java拥有全世界最多的技术拥护者和开源社区支持,有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件,都可以看到Java的身影。其应用形式之复杂、参与人数之众多也令人咋舌。可以说,Java社区已经俨然成为了一个良好而庞大的生态系统。其实这才是Java最大的优势和财富。
4.2 Java 是最好的语言吗?
不是,因为在每个领域都有更合适的编程语言。
- C 语言无疑是现代计算机软件编程语言的王者,几乎所有的操作系统都是 C 语言写成的。C++ 是面向对象的 C 语言,一直在不断的改进。
- JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占有一席之地。
- Python 用于系统管理,并通过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。
- Ruby 强于 DSL(领域特定语言),程序员可以定义丰富的语义来充分表达自己的思想。
- Erlang 就是为分布式计算设计的,能保证在大规模并发访问的情况下,保持强壮和稳定性。
- Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。
- 编写网页用 PHP,函数式编程有 Lisp,编写 iOS 程序有 Swift/Objective-C。
- R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法
- SQL 是用于访问和处理数据库的标准的计算机语言, 这类数据库包括:MySQL,Oracle, Sybase, SQL Server, DB2, Access 等等
一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。
4.3 Java语言发展历史
Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。
Java之父是詹姆斯.高斯林(James Gosling)。
1996年发布JDK1.0版。
发行版本 | 发行时间 | 备注 |
Java | 1995.05.23 | Sun公司在Sun world会议上正式发布Java和HotJava浏览器 |
Java 1.0 | 1996.01.23 | Sun公司发布了Java的第一个开发工具包 |
Java 1.1 | 1997.02.19 | |
Java 1.2 | 1998.12.08 | 拆分成: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公司 |
Java 7.0 | 2011.07.02 | |
Java 8.0 | 2014.03.18 | |
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安装包 |
Java 12.0 | 2019.03.19 | |
Java 13.0 | 2019.9.18 |
4.4 Java技术体系平台
- JavaSE(Java Platform, Standard Edition标准版):允许您在桌面和服务器上开发和部署Java应用程序。Java提供了丰富的用户界面、性能、多功能性、可移植性和当今应用程序所需的安全性。
- JavaEE(Java Platform, Enterprise Edition企业版):是为开发企业环境下的应用程序提供的一套解决方案,主要针对于Web应用程序开发。
- JavaME(Java Platform, Micro Edition 小型版):为互联网上的嵌入式和移动设备上运行的应用提供了一个健壮、灵活的环境:微控制器、传感器、网关、移动电话、个人数字助理(PDA)、电视机顶盒、打印机等等。JavaME包括灵活的用户界面、健壮的安全性、内置的网络协议,以及支持动态下载的网络和离线应用程序。基于JavaME的应用程序在许多设备上都是可移植的,但是利用了每个设备的本机功能。
- Java Embedded: 用于解锁物联网的智能设备的价值: 通过远程市场更新和刷新功能延长产品生命周期和价值; 利用Java的可伸缩性、健壮性、可移植性和全套功能,提高生产效率,降低成本,缩短上市时间; 在边缘启用快速数据功能;
- Java Card:使安全元件(如智能卡和其他防篡改安全芯片)能够承载采用Java技术的应用程序。Java card提供了一个安全的、可互操作的执行平台,它可以在一个资源受限的设备上存储和更新多个应用程序,同时保持最高的认证级别和与标准的兼容性。
- Java TV:是一种基于JavaME的技术,它为开发在tv和机顶盒设备上运行的java应用程序提供了一个性能良好、安全且易于实现的解决方案。使用Java TV运行时,开发人员可以轻松创建应用程序,例如电子节目指南(EPG)、视频点播(VOD)客户端、游戏和教育应用程序、用于访问Internet数据的应用程序(例如天气、新闻播报器、社交网络)以及大多数蓝光光盘标题上的用户界面和奖金内容。
5.Java语言跨平台原理
5.1 Java语言的特点
- 完全面向对象:Java语言支持封装、继承、多态,面向对象编程,让程序更好达到高内聚,低耦合的标准。
- 支持分布式:Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
- 健壮型:Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
- 安全:Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
- 跨平台性:Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
5.2 Java语言的跨平台原理
- 跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。
- JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境之一,也是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在JVM 之上。
如图所示,Java的虚拟机本身是不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机。
- JRE (Java Runtime Environment) :是Java程序的运行时环境,包含
JVM
和运行时所需要的核心类库
。 - JDK (Java Development Kit):是Java程序开发工具包,包含
JRE
和开发人员使用的工具。
我们想要运行一个已有的Java程序,那么只需安装JRE
即可。
我们想要开发一个全新的Java程序,那么必须安装JDK
,其内部包含JRE
。
6.写第一个代码HelloWorld遇到的问题
6.1 源文件名与类名一致问题?
(1)源文件名是否必须与类名一致?public呢?
答:如果这个类不是public,那么源文件名可以和类名不一致。
如果这个类是public,那么要求源文件名必须与类名一致。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
(2)一个源文件中是否可以有多个类?public呢?
答:一个源文件中可以有多个类,编译后会生成多个.class字节码文件。但是一个源文件只能有一个public的类。
一个类就是一个.class字节文件,这也就是为什么用doc命令运行时,是java 类名(而不是java 类名.class),因为加不加.class都是运行当前类,而且这个类里面要有main方法,不然运行不了。
有:
运行Java程序
在DOS命令行中,进入Java源文件的目录,使用
java
命令进行运行。命令:
java 类名字
举例:
java HelloWorld
java HelloWord 不要写 不要写 不要写 .class;Java字节码文件的运行工具:java.exe
(3)main必须在public的类中吗?
答:不是。
但是后面写代码时,基本上main习惯上都在public类中
6.2 编码问题
编码过程:字符转换为二进制的数值
解码过程:将二进制数值转换为字符
乱码:编码和解码过程中使用的字符集不一致。
- 解决方法一:
在Notepad++等编辑器中,修改源文件的字符编码
- 解决方法二:
在使用javac命令式,可以指定源文件的字符编码 javac -encoding utf-8 Review01.java
第二章 Java基础知识
1.注释(comment)
注释的概念:在编写程序的过程中,对程序代码进行解释说明。
- 代码本身和人类的自然语言相比,可读性肯定是要差一些,所以为了更快能够知道代码的含义、作用、需要注意地方,所有程序员都应该养成写注释的好习惯。
- 由于注释的内容是给程序员看的,需要使用人类的自然语言,而自然语言又不符合编程语言的语法,所以必须通过特定的符号,标记出来这部分的内容是注释,而不是要执行的程序的代码。
- 注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。
有3种注释方式
①单行注释:单行注释以
//
开头,以换行
结束②多行注释:多行注释以
/*
开头,以*/
结束;注意:多行注释不能嵌套。③文档注释:文档注释以
/**
开头,以*/
结束;Javadoc命令可以抽取每个类、方法中的文档注释,生成API手册。
/** 这里是一个文档注释,通常包括对类或方法的介绍,还有作者、日期等信息。 类名:HelloWorld 整个程序执行的入口:main函数 作者:彦祖 日期:3月24日 */ public class HelloWorld{ /* 多行注释:注释内容可以分很多行编写 注意:多行注释不能嵌套,嵌套会导致多行注释提前结束 main函数是整个程序的入口 main函数的声明格式是固定的 每一个类中最多只能有一个main函数*/ public static void main(String[] args){ // 单行注释:在命令行窗口内打印一句话 // 单行注释仅对当前行有效 System.out.println("彦祖我爱你"); } } class YanZu { }
2.关键字(keyword)
关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。
- HelloWorld案例中,出现的关键字有
public
、class
、static
、void
等,这些单词已经被Java定义好 - 关键字的特点:全部都是
小写字母
。 - 关键字比较多,不需要死记硬背,学到哪里记到哪里即可。
关键字一共50个,其中const和goto是保留字。
true,false,null看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。
java的流程与做饭相比较
3.标识符(identifier)
简单的说,凡是程序员自己命名的部分都可以称为标识符。
即给类、变量、方法、包等命名的字符序列,称为标识符。
1、标识符的命名规则(必须遵守)
规则是硬性规定:一旦违反,程序就会在编译过程中报错
(1)Java的标识符只能使用26个英文字母大小写,0-9的数字,下划线_,美元符号$
(2)不能使用Java的关键字(包含保留字)和特殊值
(3)数字不能开头
(4)不能包含空格
(5)严格区分大小写
2、标识符的命名规范(遭受鄙视)
规范是柔性规定:违反规范,不会导致编译报错,但是如果不遵守基本的规范,有很大可能被公司开除。
(1)见名知意
(2)类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,
例如:HelloWorld,String,System等
(3)变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,
例如:age,name,bookName,main
(4)包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,
例如:java.lang
(5)常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,
例如:MAX_VALUE,PI
4.初识数据类型(data type)
Java的数据类型分为两大类:
- 基本数据类型:包括
整数
、浮点数
、字符
、布尔
。 - 引用数据类型:包括
类
、数组
、接口
。 - 常量整数值, 赋值给byte,只要在byte范围内即可。 赋值给short,只要在short范围即可。 赋值给int,只要在int范围即可。 赋值给long,在int范围内的,可以加也可以不用加L,会自动升级为long,如果数字超过int范围,必须加L。
- 小数常量值,无论多少,不加F,就是double类型。
四类八种基本数据类型:
Java中默认的类型:整数类型是int、浮点数类型是double。
5.常量(constant)
- 常量:在程序执行的过程中,其值不可以发生改变的量
- 常量的分类:
- 自定义常量:通过final关键字定义(后面在面向对象部分讲解)
- 字面值常量:
字面值常量 | 举例 |
字符串常量 | ”HelloWorld“ |
整数常量 | 12,-23 |
浮点常量 | 12.34 |
字符常量 | ‘a’,'0',‘沙’ |
布尔常量 | true,false |
空常量 | null |
public class ConstantDemo { public static void main(String[] args) { //字符串常量 System.out.println("HelloWorld"); //整数常量 System.out.println(12); System.out.println(-23); //小数常量 System.out.println(12.34); //字符常量 System.out.println('a'); System.out.println('0'); System.out.println('沙'); //布尔常量 System.out.println(true); System.out.println(false); } }
注意事项:
①字符常量,单引号里面有且仅有一个字符
②空常量,不可以在输出语句中直接打印
6.变量(variable)
6.1 变量的概念
变量:在程序执行的过程中,其值可以发生改变的量
变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的。
6.2 变量的三要素
1、数据类型
2、变量名
3、值
6.3 变量的使用应该注意什么?
1、先声明后使用
如果没有声明,会报“找不到符号”错误
2、在使用之前必须初始化
如果没有初始化,会报“未初始化”错误
3、变量有作用域
如果超过作用域,也会报“找不到符号”错误
4、在同一个作用域中不能重名
6.4 变量的声明和赋值、使用的语法格式?
1、变量的声明的语法格式:
1、变量的声明的语法格式:
//数据类型 变量名; //例如: int age; String name; double weight; char gender; boolean isMarry;
2、变量的赋值的语法格式:
变量名 = 值; 例如: age = 18; name = "柴林燕"; //字符串的值必须用"" weight = 44.4; gender = '女';//单字符的值必须使用'' isMarry = true;
long类型:如果赋值的常量整数超过int范围,那么需要在数字后面加L。
float类型:如果赋值为常量小数,那么需要在小数后面加F,不然默认为double。
char类型:使用单引号''
String类型:使用双引号""
7.两种常见的输出语句
换行输出语句:输出内容,完毕后进行换行,格式如下:
System.out.println(输出内容);
直接输出语句:输出内容,完毕后不做任何处理,格式如下:
System.out.print(输出内容);
String name = "柴林燕"; int age = 18; 对比如下两组代码: System.out.println(name); System.out.println(age); System.out.print(name); System.out.print(age); 对比如下两组代码: System.out.print("姓名:" + name +",");//""中的内容会原样显示 System.out.println("年龄:" + age);//""中的内容会原样显示 System.out.print("name = " + name + ","); System.out.println("age = " + age);
注意事项:
①换行输出语句,括号内可以什么都不写,只做换行处理
②直接输出语句,括号内什么都不写的话,编译报错
③如果()中有多项内容,那么必须使用 + 连接起来
④如果某些内容想要原样输出,就用""引起来,而要输出变量中的内容,则不要把变量名用""引起来
在这里感谢尚硅谷的老师,这些知识整理于在尚硅谷的学习!!!