Java从入门到精通
2023-06-08 20:46:54 23 举报
AI智能生成
挺详细的,后续会补全
作者其他创作
大纲/内容
第一章:初识Java
Java简介
Java是一门高级的面向对象的程序设计语言。使用Java语言编写的程序时跨平台的,从PC到智能手机,都有Java开发的程序,Java程序可以在任何计算机、操作系统以及支持Java的硬件设备上运行
Java语言的特性
简单
语法规则和C++类似
Java语言对C++进行了简化和提高
Java提供了丰富的类库、API文档以及第三章开发包、大量基于Java的开源项目
面向对象
面向对象时Java语言的基础,也是Java语言的重要特性,它本身就是一种纯面向对象的程序设计语言,Java提倡万物皆对象,Java语言最外部的数据类型是对象,所有的元素都要通过类和对象访问
分布性
操作分布
在不同主机上布置相关操作
数据分布
将数据分别存在多个不同的主机上,主机是网络中不同的成员Java可以凭借URL(统一资源定位符)对象访问网络对象
可移植性
Java程序具有与体系结构无关的特征,可以移植到网络上不同计算机中。Java类库也实现了针对不同平台的接口,让不同类库也可以被移植
解释型
运行Java程序需要解释器。任何有Java解释器的计算机都可以用Java字节码进行解释执行。字节码独立于平台,本身携带了许多编译时的信息,让连接过程更加简单。开发过程更加迅速
安全性
Java语言取消了类C语言中的指针和内存释放等语法
健壮性
Java会检查程序在编译和运行时的错误,并消除错误,类型检查能帮助用户检查出许多在开发早期的错误
多线程
能够使应用程序在同一时间并执行多项任务,而且相应的同步机制可以保证不同线程能够正确的共享数据。多线程能够带来更好的交互能力和事实行为
高性能
Java编译后的字节码是在解释器中运行的,所以速度较多数交互式应用程序提高了很多。字节码可以在程序运行时被翻译成特定平台的机器指令来进一步提高运行速度
动态
Java中进行动态调整时非常简单和直接的,可以动态调整库中方法和增加变量,而客户端不需要任何更改
搭建Java环境
JDK
要编译和执行Java程序JDK(Java Developers Kits)是必不可少的,其中JDK8跟JDK11是长更新的稳定版本,其他均为过渡版本
第二章:熟悉Eclipse开发工具
熟悉Eclipse
虽然记事本和JDK编译工具也能编写Java程序,但在开发过程中必须使用大型集成开发工具(IDE)来编写Java程序。Eclipse由IBM公司开发而成,它基于Java语言编写,是目前最流行的Java集成开发工具之一。Eclipse所有代码都是开源的,可扩展,其后续由Eclipse联盟负责。Eclipse拥有一流的Java程序开发环境,它的平台体系结构是插件概念的基础上构建的,插件时Eclipse平台的特征之一,也是区别于其他开发工具的特征之一
使用Eclipse
创建Java项目
依次点击:File/New/java Project
创建Java类文件
依次点击:File/New/class
程序调试
断点
程序调试不可缺少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行
第三章:Java基础语言
Java主类结构
包声明
一个Java程序是由若干个类组成的(详细内容在十一章)
声明成员变量和局部变量
通常将类的属性称为成员变量(全局变量),方法中的属性称为局部变量。成员变量(全局变量)作用在类中,只在这个类中有效,局部变量作用在方法体中,只在这个方法中有效
编写主方法
main()方法是类体中的主方法,从“{”开始,到“}”结束。public、static、void分别是main()方法的权限修饰符、静态修饰符和返回值修饰符。main()方法必须声明为:public static void main(String[] args){}。String[] args是一个字符串类型的数组,它是main()方法的参数。main()方法是程序开始执行的位置
导入其他类库(API)
用import关键字导入相关的类。在JDK的API中(应用程序接口)提供了130多个包。可以通过JDK的API文档来查看这些包中的类。把握类的继承结构、类的应用、成员变量表、构造方法表等,对每个变量的使用目的进行了解。API文档减少了Java程序员的代码量,是程序员不可缺少的工具
基本数据类型(8位等于1字节)
整数类型
byte
内存空间:8位
取值范围:-128~127 / -2^7~2^-1
short
内存空间:16位
取值范围:-32768~32767 / -2^15~2^15-1
int
内存空间:32位
取值范围:-2147483648~2147483647 / -2^31~2^31-1
int型是Java整型值的默认数据类型,当对多个尚未定义数据类型的整数做运算时,运算结果默认为int类型
long
内存空间:64位
取值范围:-9223372036854775808~9223372036854775807 / -2^63~2^63-1
long类型的取值范围比int类型大,且属于高精度数据类型,所以在赋值时要和int类型做出区分,需要在整数后面加上大写的L或者小写的l
例;long number = 123456789987654321147258L;
浮点数类型
float
内存空间:32位
单精度浮点数
取值范围:1.4E~3.4028235E38
为了区分单精度浮点数跟双精度浮点数,单精度浮点数在使用的时候必须在小数后面添加大写的F或者小写的f来作为区分
例:float number = 2.1F
只要记住小数后面有字母f的,那就是单精度浮点数,若是小数后面没有字母或者有字母d的,那就是双精度浮点数
double
内存空间:64位
双精度浮点数
取值范围:4.9~1.7976931348623157E308
在默认情况下小数都看作double型,也可以在定义小数的时候在后面加上大写的D或者小写d,加不加无所谓,没有硬性规定
字符型
char
内存空间:16位
用单引号表示:' '。单引号表示字符
String:字符串类型,第十章内容
用双引号表示:" "。双引号表示的是字符串
Unicode编码
包含65536个字符,里面有你想要的任何符号、字母,所以Java字符几乎可以处理所有国家的语言文字
想得到相应类型的Unicode表字符,就必须使用相应类型转换
转义字符
解释:是一种特殊的字符变量,以反斜杠“\”开头,后面有着一个或多个字符。也对应着Unicode表
含义:不同于原有字符的含义,所以称为转义字符
常用的转义字符
例子与结果
布尔型
通过Boolean关键字来定义,只有两个值
true:真
false:假
布尔值不能与其他数据类型转换,布尔类型通常被用在流程控制中,作为判断条件
布尔值默认为:false(假)
变量与常量
标识符
在程序中经常自定义的类名、包名、方法名、变量名等被称为标识符由大小写字母,下划线,美元符号,数字组成。不能以数字开头,不能是Java中的关键字。在Java中,标识符是严格区分大小写的,同一字母大小写不同就是两个不同的标识符
定义标识符规范
1:包名所有字母统一小写
2:类名和接口名每个单词首字母大写
3:常量名统一用大写字母,单词之间用下划线连接
4:变量名和方法名第一个单词小写,第二个单词开始首字母大写,注意标识符定义不能以数字开头,不能用空格
5:在程序中,尽量用有意义的英文单词定义标识符,让程序便于阅读
1:包名所有字母统一小写
2:类名和接口名每个单词首字母大写
3:常量名统一用大写字母,单词之间用下划线连接
4:变量名和方法名第一个单词小写,第二个单词开始首字母大写,注意标识符定义不能以数字开头,不能用空格
5:在程序中,尽量用有意义的英文单词定义标识符,让程序便于阅读
关键字
是Java中已经被赋予特定意义的一些单词,关键字也称保留字
声明变量与常量
声明就是定义的意思,给变量/常量赋值。是编写代码最基础必不可少的环节。变量名在作用域内不能重复
常量:在程序中一直不会改变的的量,也称为final变量。常量在整个程序中只能赋值一次,所有代码块都能用,作用域是整个程序
null常量:只有一个值null,表示对象的引用为空
示例
有效范围
运算符
赋值运算符
符号:”=“
含义:将右方数值赋值给左方操作数
左方操作数必须是一个变量,右边操作数可以是任何表达式,包括变量、常量。有两个等号情况或多个等号情况下,从右往左执行
算数运算符
加(+)、减(-)、乘(*)、除(/)、取余数(%)
负数求余结果还是负数
自增自减运算符
自增
++a:使用变量a之前,先将a的值+1
a++:使用变量a之后,把a的值+1
自减
--a:使用变量a之前,先将a的值-1
a--:使用变量a之后,把a的值-1
比较运算符
示例
逻辑运算符
位运算符
三元运算符
语法:条件式 ? 值1 : 值2
含义:如果表达式是真的,则表达式值取值1,否则取值2
示例
结果
数据类型转换
隐式类型转换:也叫自动类型转换,从低级类型向高级类型转换,一定不会丢失数据
显式类型转换:也叫强制类型转换,把高精度的变量值赋给低精度的变量,有可能丢失数据。转换时需要添加被转换类名
示例
代码注释与编码规范
代码注释:编写代码过程中可以添加注释来提高代码的可读性,注释包含代码的信息,更好的可以让编程人员解读
单行注释:用两条斜杠表示”//“,从斜杠开始直到换行的所有内容都会被编译器忽略
多行注释:用两个//跟两个*表示”/* */“,在/* */ 中间的所有内容都会被编译器忽略
文档注释:用两个//跟三个*表示”/** */“,在/** */之间的所有内容都为文档注释
编码规范
良好的编码习惯可以为以后的维护工作提供便利
每条语句尽量单独占一行,即使右多个相同数据类型变量,这样方便添加注释
局部变量在定义的时候同时进行赋值
Java代码中,空格无任何其他意义 仅供分隔使用
方法必须写在类的{}里
第四章:流程控制
复合语句
复合语句是以整个区块为单位的语句,又称块语句。由开阔号”{“开始,闭括号”}“结束
定义类体或者方法、方法体也是从”{“开始,”}“结束
复合语句内的每个语句都是从上到下被执行
复合语句中还可以嵌套复合语句
复合语句等于作用域
条件语句
条件语句可根据不同的条件执行不同的语句
if语句
if语句会告诉程序在某个条件成立的情况下执行某段语句,在不成立的情况下执行另一段语句。关键字if之后是作为条件的布尔表达式,返回结果为真(true)或假(false)。
简单if语句
if else语句
最常用的语句表达式,它会针对条件有选择的做出处理
if else if多分支语句
争对某一事件多种情况进行处理
switch多分支语句
不同条件获取不同值
循环语句
while循环语句
while循环语句也称条件判断语句,他的循环方式为:利用一个条件来控制是否继续循环执行
条件表达式为真时重复执行{ }里的语句,知道条件表达式为假,每循环一次判断一次条件表达式
do ---while循环语句
do---while循环语句与while循环语句相似,区别就是while语句先判断条件语句在执行循环,而do---while循环是先执行一次循环再去判断条件语句是否成立
for循环
最常用的循环语句。重复执行循环语句,直到条件表达式不满足
例题与流程图
foreach语句
是for循环的特殊简化版本,不能完全取代for循环,但任何foreach语句都能改写为for循环语句版本。foreach不是关键字,它在遍历数组方面给带来了便利。例题:
循环控制
break语句
跳出当前循环体,从而中断当前循环。在循环嵌套的情况下,break语句只会跳出包含它的循环
continue语句
针对break语句的补充。continue是跳过本次循环,回到条件判断部分,不是跳出循环
标签功能
在循环嵌套的情况下,若要跳出外层循环,Java提供了标签功能。在循环关键字前加个标签名跟冒号,使用的时候直接使用在控制语句后面加上标签名就ok
第五章:数组
数组概述
数组是具有相同数据类型的一组数据集合,数组中的每个元素具有相同的数据类型
一维数组
创建一维数组
声明一维数组,数组元素类型决定了数组的数据类型。有以下两种声明方式
分配内存。一般情况,数组声明完之后是直接初始化赋值的
初始化一维数组,有两种方式
二维数组
创建二维数组
二维数组的声明,跟一维数组一样,只不过多了个中括号[]
二维数组内存的分配
二维数组的初始化。一个大括号里就表示一个一维数组
前面数表示行,后面的数表示列
数组的基本操作
遍历数组,遍历数组的话,使用foreach语句会更方便
替换数组元素,前索引改,后索引不改
复制数组,前索引值在,后索引值不在
数组元素排序
查询数组
数组排序算法
冒泡排序:与相邻的元素做对比,小的换前面去,大的往后面换,一次换一个
直接选择排序:直接锁定最大的元素放在最后,其他元素往前移,依次循环排列
第六章:类和对象
面向对象概述
面向对象的开发思想,它将所有预处理的问题抽象为一个对象,通过了解对象有哪些相应的行为与属性,以解决这些对象面临的一些实际问题。在程序开发中引入面向对象设计的概念,实质上就是说对现实实际中的对象进行建模操作
对象是类抽出来的一个实例
类实质上就是封装对象行为和属性的载体
封装:把对象的属性跟行为放进一个类里面,这就是封装。
继承,类与类之间也有关联,继承就是关联的一种。继承性主要利用特定对象之间的共有属性。
多态:子类继承父类的行为就是多态,子类不仅有父类的特点,还具有自身演化出来的特点,这特点是父类没有的,这就是多态。通俗一点来说:就是一个方法使用后有多种结果
类
class关键字是用来定义类
局部变量:这里的局部变量是成员方法内定义的变量
局部变量有效范围:不同一区域可以定义同一变量,同一区域不可以定义同一变量
成员方法
权限修饰符
this关键字:用于表示本类当前对象,当前对象是正在编辑的类,只能在本类中使用
类的构造方法
除成员方法外的一种特殊类型方法
静态变量和静态方法
static关键字修饰的变量与方法称为静态变量和静态方法,这样的变量和方法被称为静态成员。静态成员属于类所有。区别于个别对象可以在本类和其他类使用。语法:类名.静态成员。一般不建议这样使用,因为容易混淆静态成员和非静态成员
类的主方法
主方法是类的入口点,它定义了程序从如何开始。主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。
特性:1.主方法是静态的,若要在主方法里调用其他方法,该方法也得是静态的。2.主方法没有返回值。3.主方法的形参为数组,可以使用args.length获取参数的个数
对象
创建对象:用new操作符调用构造方法创建对象
访问对象的行为和属性。创建对象后可以使用“对象名.类成员”的方式来获取对象属性行为。类成员是类中的变量方法等
get和set方法
第七章:继承、多态、抽象类与接口
类的继承
继承是一个非常重要的概念。继承在程序中可以复用一些已经定义完善的类,不仅可以减少软件开发周期,也可以提高整个软件的可维护性和可扩展性
继承关键字:extends 子类在继承父类后,子类的对象也能调用父类构造方法变量等
Object类
Java中所有的类都是直接或间接继承了java.lang.Object类。Object类是比较特殊的类,是所有类的父类
Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被从写,这些方法已经被定义为final类型
对象类型的转换
向上转型:子类转父类,自动类型转换
向下转型:父类转子类,强制类型转换
使用instanceof关键子判断对象类型
执行向下转型的时候,如果父类不是子类对象的实例,就会发生ClassCastException异常,所以在执行向下操作时要养成习惯去判断父类是否是子类实例对象这个判断运用到了“instanceof”关键字。instanceof返回值为布尔类型
final关键字
final被译为“最终的”、“最后的”。final关键字用于声明变量,一旦被声明,在整个程序中就不可改变。方法也可以用final关键字声明,通常用于父类,防止子类修改父类的定义与实现方式。还有final类,将类定义为final类时,该类不可以被继承。
方法的重载
方法的重载就是在同一个类中允许存在一个以上的同名方法,只要方法中的参数类型,或参数顺序,或参数个数不同就可以构成方法重载
多态
同一个方法,输出的结果不同,就是多态。就是一个成员方法被多个对象调用输出不同的结果
抽象类与接口
抽象类
抽象类:用关键字abstract来定义抽象类。抽象类除了被继承没有任何意义。有抽象方法的类一定是抽象类。抽象类不可以实例化对象。 语法:修饰符 abstract class 类名{}
抽象方法:被abstract关键字定义的方法被称为抽象方法,抽象方法没有方法体,抽象方法本身没有任何意义,只能被重写。 语法: 修饰符 abstract 返回参数 方法名(传入参数);
抽象类被继承后,其所有抽象方法都要实现
接口
接口是抽象类的延伸,用关键字interface定义。语法:修饰符 interface 接口名{}
接口里的方法都是没有方法体,接口里的任何变量、方法都是static类型和final类型的。接口可以多实现
第八章:包和内部类
Java包类
类名冲突:Java编译器不会允许存在同名的类文件,解决的方法是将这两个同名的类放置在不同的类包中
完整的类路径:书134页
创建包:书134页
导入包
使用import关键字导入
使用import关键字时,要指定完整的类路径,如果要使用更多包中的类,在import关键字后面指定的包后面加上*,这表示该包中所有的类. 语法:import com.mr.*
导入静态成员:import还可以导入静态成员。语法:import static 静态成员。具体看书136页。
内部类
成员内部类
类中定义的类叫做成员内部类
成员内部类可以随意的使用外部类的成员方法、成员变量,尽管被修饰为privacy
成员内部类实例化对象必须绑定在外部类的实例化对象上。语法:外部类名.内部类名 内部类对象名 = 外部类.new 内部类();
如果外部类中定义的成员变量与内部类成员变量名称相同,可以用this关键字来区分。
匿名内部类
匿名内部类是在创建对象时才会编写类体的一种写法。特点是:现用现写。匿名内部类不能编写构造方法,不能定义静态成员
例题演示怎么编写匿名内部类
第九章:异常处理
异常概述
程序在运行时可能出现的一些错误称为异常。异常是一个在程序执行期间发生的错误,它中断了程序执行的正常指令流
异常的抛出与捕捉
抛出异常
异常抛出后,如果不做任何处理,程序就会被终止
异常抛出案例
捕捉异常
Java的异常捕捉结构由try、catch、finally 这3部分组成。try语句块是存放可能发生的异常,catch语句块是在try语句块之后,用来处理发生的异常,finally语句块放在最后,无论程序会不会报错、try怎样结束,finally语句块都会执行。
Java常见的异常
自定义异常
只需继承Exception类即可自定义异常类
定义异常四步骤
自定义异常及使用例题
在方法中抛出异常
使用throws关键字抛出异常
throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常,多个异常用逗号分隔
使用throw关键字抛出异常
throw关键字体通常用来抛出用户自定义异常
通过例题介绍throw关键字捕捉异常
子主题
运行时异常
Java异常结构类
RuntimeException异常的种类
异常的使用原则
在当前方法声明中使用 try-catch 语句捕捉异常。一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类。如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常
第十章:字符串
Sting类
单个字符用char类型存储,多个字符组成的文本就得用String对象保存,String被称为字符串,一个String对象可保存(2^32-1)个字节(4GB空间大小)的文本内容
声明字符串:字符串必须包含在一对双引号中("")。语法:String 字符串名 = "你好";。字符串有好几种声明方式,这是最方便的一种
连接字符串
连接多个字符串:用加号(+)
连接其他数据类型还是用加号
获取字符串信息
获取字符串长度
字符串查找
获取指定索引位置的字符
字符串操作
获取子字符串
去除首尾空格
字符串替换
判断字符串的开头与结尾
判断字符串是否相等:字符串相对比不是内容对比,而是存储空间对比,它有两种方法
按照Unicode值去比较两个字符串的顺序
按照字母大小写转换
字符串分割,分割完之后是存放在字符串数组里
格式化字符串
String类的静态format()方法用于创建格式化字符串
语法
使用正则表达式
通常用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式中,可以用方括号扩起若干个字符来表示一个元字符,该元字符可以代表方括号中任意一个字符。在正则表达式中允许使用限定修饰符来限定元字符出现的次数。下列是限定修饰符
字符串生成器
append()方法
用于向字符生成器中追加内容
insert()方法
向字符串生成器中的指定位置插入数据内容
delete()方法
用索引表示位置删除某些字符
第十一章:常用库类
收藏
收藏
0 条评论
下一页