【笔记】Java

教程地址:Java入门第一季
教程地址:Java入门第二季
教程地址:Java入门第三季

文章目录

一、Java简介

1. 版本

Java SE: standard Edition,标准版
Java EE: Enterprise Edition,企业版
Java ME: Micro Edition,移动版
在这里插入图片描述

2. 重要概念

JVM: Java Virtual Machine
JDK: Java Development Kit
JRE: Java Runtime Environment

在这里插入图片描述
由上图可以看出,一般我们安装JDK 就包含了JRE 和JVM。

3. 运行Java程序

javac HelloWorld.java 正常运行后会出现 HelloWorld.class文件
java HelloWorld java命令后面的文件名不加后缀

或者直接IDE里run


二、变量和常量

1. 关键字

在这里插入图片描述
Java 是大小写敏感的

2. 标识符

标识符:用于给 Java 程序中变量、类、方法等命名的符号。

  1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。譬如:123name 就是不合法滴

  2. 标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。如:不可以使用 void 作为标识符,但是 Myvoid 可以

  3. 标识符是严格区分大小写的。 所以涅,一定要分清楚 imooc 和 IMooc 是两个不同的标识符哦!

  4. 标识符的命名最好能反映出其作用,做到见名知意。

3. 变量

在 Java 中,我们通过三个元素描述变量:变量类型、变量名以及变量值

(1)变量命名
在这里插入图片描述
良好习惯:

1、变量名由多单词组成时,第一个单词的首字母小写,其后单词的首字母大写,俗称骆驼式命名法(也称驼峰命名法),如 myAge

2、变量命名时,尽量简短且能清楚的表达变量的作用,做到见名知意。如:定义变量名 stuName 保存“学生姓名”信息

PS: Java 变量名的长度没有限制,但 Java 语言是区分大小写的,所以 price 和 Price 是两个完全不同的变量哦!

(2)数据类型
Java 语言是一种强类型语言。通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。 Java 中有两类数据类型:
在这里插入图片描述
在 Java 中,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址

常用基本数据类型:
在这里插入图片描述
String 是一种常见的引用数据类型,用来表示字符串。
float 类型的变量值必须加 f

(3)使用规则

  1. Java 中的变量需要先声明后使用
  2. 变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值
  3. 变量中每次只能赋一个值,但可以修改多次
  4. main 方法中定义的变量必须先赋值,然后才能输出
  5. 虽然语法中没有提示错误,但在实际开发中,变量名不建议使用中文,容易产生安全隐患,譬如后期跨平台操作时出现乱码等等

(4)自动类型转换

  1. 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
  2. 目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了

(5)强制类型转换

语法:( 数据类型 ) 数值

在这里插入图片描述
运行结果:
75.8
75
数值上并未进行四舍五入,而是直接将小数位截断。

4. 常量

所谓常量,可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变

语法:final 常量名 = 值;

在这里插入图片描述
常量名一般使用大写字符

5. 注释

Java 中注释有三种类型:单行注释多行注释文档注释.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190731164547996.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNTQ5Mjkx,size_16,color_FFFFFF,t_70)
javadoc命令可以从文档注释中提取内容,生成API帮助文档


三、运算符

1. 什么是运算符

Java 语言中常用的运算符可分为如下几种:

Ø 算术运算符

Ø 赋值运算符

Ø 比较运算符

Ø 逻辑运算符

Ø 条件运算符

2. 算术运算符

在这里插入图片描述
其中,++ 和 – 既可以出现在操作数的左边,也可以出现在右边,但结果是不同的。
double a = 105 / 4结果为26.0, 而double a = 105 / 4.0结果为26.25

3. 赋值运算符

在这里插入图片描述

4. 比较运算符

在这里插入图片描述
1、 > 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型
2、 == 、 != 两边的操作数既可以是数值类型,也可以是引用类型

5. 逻辑运算符

在这里插入图片描述
“短路”现象:
( one > two ) && ( one < three ) 中,如果能确定左边 one > two 运行结果为 false , 则系统就认为已经没有必要执行右侧的 one < three 啦。
同理,在( one > two ) || ( one < three ) 中,如果能确定左边表达式的运行结果为 true , 则系统也同样会认为已经没有必要再进行右侧的 one < three 的执行啦!

6. 条件运算符

条件运算符( ? : )也称为 “三元运算符”。

语法形式:布尔表达式 ? 表达式1 :表达式2

运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值

7. 运算符优先级

在这里插入图片描述
级别为 1 的优先级最高,级别 11 的优先级最低。

最好用括号,如下
在这里插入图片描述


四、流程控制语句

1. 条件语句

(1)if

语法
在这里插入图片描述

如果 if 条件成立时的执行语句只有一条,是可以省略大括号的。
但如果执行语句有多条,那么大括号就是不可或缺的。

(2)if … else

语法
在这里插入图片描述

(3)多重if

语法
在这里插入图片描述

(4)嵌套if

语法
在这里插入图片描述

(5)switch

语法
在这里插入图片描述

  1. switch 后面小括号中表达式的值必须是整型或字符型
  2. case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
  3. case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束
  4. 可以把功能相同的 case 语句合并起来,如
    在这里插入图片描述
  5. 如果没有匹配的 case 语句则执行 default 块的代码,default 块可以出现在任意位置,也可以省略

2. 循环语句

(1)while

语法
在这里插入图片描述

(2)do … while

语法
在这里插入图片描述

do…while 语句保证循环至少被执行一次

(3)for

语法
在这里插入图片描述
or

for (循环变量类型 循环变量名称 : 要被遍历的对象)  {循环操作}

(4)多重循环
在这里插入图片描述

(5)循环跳转

  1. break:退出循环,直接执行循环后面的代码
  2. continue:跳过循环体中剩余的语句执行下一次循环(要先判断是否满足循环条件)

五、数组

1. 什么是数组

数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩
在这里插入图片描述
数组中的元素都可以通过下标来访问,下标从 0 开始。例如,可以通过 scores[0] 获取数组中的第一个元素 76 ,scores[2] 就可以取到第三个元素 92

2. 数组的使用

(1) 声明数组

语法: 数据类型[ ] 数组名;

或者 数据类型 数组名[ ];

其中,数组名可以是任意合法的变量名,如:
在这里插入图片描述

(2)分配空间

简单地说,就是指定数组中最多可存储多少个元素

语法: 数组名 = new 数据类型 [ 数组长度 ];

其中,数组长度就是数组中能存放元素的个数,如:
在这里插入图片描述
我们也可以将上面的两个步骤合并,在声明数组的同时为它分配空间,如:
在这里插入图片描述
(3)赋值

分配空间后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例如向 scores 数组中存放学生成绩
在这里插入图片描述
(4)处理数组中数据

我们可以对赋值后的数组进行操作和处理,如获取并输出数组中元素的值
在这里插入图片描述
在 Java 中还提供了另外一种直接创建数组的方式,它将声明数组、分配空间和赋值合并完成,如
在这里插入图片描述
它等价于:
在这里插入图片描述

3. Arrays类

Arrays 类是 Java 中提供的一个工具类,在 java.util 包中。该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序、搜索等
(1)排序

语法:Arrays.sort(数组名);

在这里插入图片描述
在这里插入图片描述
(2)将数组转换为字符串

语法: Arrays.toString(数组名);

在这里插入图片描述
在这里插入图片描述

4. 使用 foreach 操作数组

foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组、集合时, foreach 更简单便捷。

语法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. 二维数组

(1)声明数组并分配空间
在这里插入图片描述
或者
在这里插入图片描述
如:
在这里插入图片描述
(2)赋值

二维数组的赋值,和一维数组类似,可以通过下标来逐个赋值,注意索引从 0 开始
在这里插入图片描述
也可以在声明数组的同时为其赋值
在这里插入图片描述
如:
在这里插入图片描述
(3)处理数组

二维数组的访问和输出同一维数组一样,只是多了一个下标而已。在循环输出时,需要里面再内嵌一个循环,即使用二重循环来输出二维数组中的每一个元素。如:
在这里插入图片描述
运行结果:
在这里插入图片描述
需要了解的:在定义二维数组时也可以只指定行的个数,然后再为每一行分别指定列的个数。如果每行的列数不同,则创建的是不规则的二维数组,如下所示:
在这里插入图片描述
运行结果为:
在这里插入图片描述


六、方法

方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。

1. 定义

在这里插入图片描述
其中:

1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴;

2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值;
注意:
(1) 如果方法的返回类型为 void ,则方法中不能使用 return 返回值
(2) 方法的返回值最多只能有一个,不能返回多个值
(3) 方法返回值的类型必须兼容,例如,如果返回值类型为 int ,则不能返回 String 型值

3、 方法名:定义的方法的名字,必须使用合法的标识符;方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式;

4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开 。

根据方法是否带参、是否带返回值,可将方法分为四类:

Ø 无参无返回值方法
在这里插入图片描述

Ø 无参带返回值方法
在这里插入图片描述

Ø 带参无返回值方法
在这里插入图片描述

Ø 带参带返回值方法
在这里插入图片描述

2. 重载

如果同一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了。如下所示 4 个方法名称都为 show ,但方法的参数有所不同,因此都属于方法的重载:
在这里插入图片描述

当调用被重载的方法时, Java 会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行。如:
在这里插入图片描述

判断方法重载的依据:

1、 必须是在同一个类中

2、 方法名相同

3、 方法参数的个数、顺序或类型不同

4、 与方法的修饰符或返回值没有关系

七、类和对象

Java 是面向对象的语言。

1. 什么是类和对象

类是模子,确定对象将会拥有的特征(属性)和行为(方法)。

类的特点:
(1)类是对象的类型;
(2)具有相同属性和方法的一组对象的集合。

类的组成:
(1)属性:对象具有的各种特征。每个对象的每个属性都拥有特定值。
(2)方法:对象执行的操作。

在这里插入图片描述
手机是类,具体的三星、苹果手机是对象。

2. 定义 Java 中的类

所有 Java 程序都以类(class)为组织单元。

在这里插入图片描述
在这里插入图片描述

3. 使用 Java 中的对象

在这里插入图片描述
在这里插入图片描述

4. Java 中的成员变量和局部变量

成员变量:在类中定义,用来描述对象将要有什么;本类中的方法和其他类中的方法都可使用

局部变量:在类的方法中定义,在方法中临时保存数据;只能在当前方法中使用

区别:

成员变量局部变量
作用域整个类的内部都是可见的仅限于定义他的方法
初始值有初始值无初始值

另外,
(1)同一方法不允许有同名局部变量,不同方法可以有同名局部变量;
(2)成员变量与局部变量同名时,局部变量具有更高的优先级。

5. Java 中的构造方法

构造方法是定义在 Java 类中的一个用来初始化对象的方法,构造方法与类同名且没有返回值

一个新的对象 = new + 构造方法

语法:

public 构造方法名(){
	//初始化代码
}

注意:
(1)没有返回值;
(2)与类名相同;
(3)可以带参数;
(4)未指定构造方法时,系统会自动添加一个无参的构造方法;
(5)构造方法也可以重载。

6. Java 中的 static

Java 中被 static 修饰的成员称为静态成员或类成员。
它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
静态成员可以使用类名直接访问,也可以使用对象名进行访问(鉴于它作用的特殊性更推荐用类名访问)。

static 可以修饰变量、方法和代码块。

静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!

注意:
(1)静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态成员,可以通过创建类的对象,然后通过对象来访问非静态成员;
(2)在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。

静态初始化块

Java 中可以通过初始化块进行数据赋值。如:
在这里插入图片描述
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

注意:
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

举例如下:
在这里插入图片描述
运行结果:
在这里插入图片描述
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

八、封装

面向对象三大特性:封装、继承、多态。

1. 什么是封装

将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。

好处:
(1)只能通过规定的方法访问数据;
(2)隐藏类的实例细节,方便修改和实现。

实现步骤:
在这里插入图片描述

2. 使用包管理 Java 中的类

作用:
管理 Java 文件
解决同名文件冲突

定义:package 包名;
注意:必须放在 Java 源程序的第一行;包名间可用 ‘.’(点)
在这里插入图片描述

使用:
在这里插入图片描述

3. Java 中的访问修饰符

作用:修饰属性和方法的访问范围。

在这里插入图片描述

4. Java 中的 this 关键字

(1)this 关键字代表当前对象
this.属性 操作当前对象的属性
this.方法 调用当前对象的方法
(2)经常用来封装对象的属性

5. 什么是 Java 中的内部类

定义:
内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

作用:
(1)内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;
(2)内部类的方法可以直接访问外部类的所有数据,包括私有的数据;
(3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

种类:
成员内部类
静态内部类
方法内部类
匿名内部类

成员内部类

内部类中最常见的就是成员内部类,也称为普通内部类。
在这里插入图片描述
在这里插入图片描述
1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

4、 编译上面的程序后,会发现产生了两个 .class 文件
在这里插入图片描述
其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class

另外:
1、 外部类是不能直接使用内部类的成员和方法的,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如下:
在这里插入图片描述

静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

2、 如果外部类的静态成员与内部类的成员名称相同,可通过类名.静态成员访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过成员名直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
在这里插入图片描述
在这里插入图片描述

方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
在这里插入图片描述
注意:
由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

九、继承

1. Java 中的继承

继承是类与类的一种关系,是一种“父子”关系。
注意:Java 中的继承是单继承(每个类最多只能有一个父类)。

好处:
子类拥有父类的所有属性和方法(private修饰的除外)
实现代码复用

语法:
class 子类 extends 父类 例如:

class Dog extends Animal {
	......
}

在这里插入图片描述

2. Java 中的继承初始化顺序

(1)初始化父类再初始化子类;
(2)先执行初始化对象中属性,再执行构造方法中的初始化。

3. Java 中的 final 的使用

final 可以修饰类、方法、属性、变量。
(1)修饰类,则该类不可以被继承;
(2)修饰方法,则该方法不可以被覆盖(重写);
(3)修饰属性,则该属性不会进行隐式的初始化,必须在声明时赋值或在构造方法中赋值(只能选其一);
(4)修饰变量,则该量变为常量。

4. Java 中的 super 的使用

在对象内部使用,代表父类对象。例如:

  • 访问父类的属性:super.age
  • 访问父类的方法:super.eat()

5. Java 中的 Object 类

Object 类是所有类的父类,如果一个类没有使用 extends 关键字明确标识继承另外一个类,那么这个类默认继承 Object 类。

Object 类中的方法适合所有子类。以下是一些比较重要的:
在这里插入图片描述
在这里插入图片描述

十、多态

1. Java 中的多态

对象的多种形态。继承是多态的基础。

  • 引用多态
    父类的引用可以指向本类的对象,也可指向子类的对象。
    在这里插入图片描述
  • 方法多态
    创建本类对象时,调用的方法为本类方法;
    创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

2. 多态中的引用类型转换

  • 向上类型转换(隐式/自动类型转换),小类型到大类型
  • 向下类型转换(强制类型转换),大类型到小类型

向下转换可能会有风险,使用 instanceof 运算符来获得引用对象的类型,避免类型转换的安全性问题。

3. Java 中的抽象类

语法:
使用 abstract 关键字修饰

应用场景:

  • 某个父类只知道子类应该包含什么方法,但无法准确知道子类如何实现这些方法;
  • 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免了子类设计的随意性。

作用:
规定子类必须实现某些方法,但不关注具体实现

使用规则:
在这里插入图片描述
在这里插入图片描述

4. Java 中的接口

接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

语法:

[修饰符] interface 接口名 [extends 父接口1, 父接口2...] { //可以多继承
	零到多个常量定义
	零到多个抽象方法定义
}

注意:
接口就是用来被继承、被实现的,修饰符一般为 public;
不能用 private 和 protected 修饰接口。

  • 接口中的属性是常量,即使定义时不添加 public static final 修饰符,系统也会自动加上。
  • 接口中的方法只能是抽象方法,即使定义时不添加 public abstract 修饰符,系统也会自动加上。

使用:
一个类可以实现一个或多个接口,实现接口使用 implements 关键字。
Java 中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. UML 简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一、异常与异常处理

1. Java 异常介绍

阻止当前方法或作用域继续执行,成为异常。
在这里插入图片描述

2. 使用 try…catch 处理异常

(1)try…catch
语法:

try {
	//一些会抛出异常的方法
} catch (Exception e) {
	//处理该异常的代码块
}

若 try 块中的方法抛出异常,则 try 块中的该方法终止执行,程序的控制权移交给 catch 块中的异常处理程序。例:
在这里插入图片描述
使用多个 catch 块捕获处理不同异常:
在这里插入图片描述
(2)try … catch … finally
语法:
在这里插入图片描述

3. 异常抛出

在这里插入图片描述
在这里插入图片描述

4. 自定义异常

class 自定义异常类 extends 异常类型 {

}

5. 经验

在这里插入图片描述

十二、字符串

1. 什么是 Java 中的字符串

在程序开发中字符串无处不在,如用户登陆时输入的用户名、密码等使用的就是字符串。其实,在前面的章节中我们就已经使用了字符串,例如我们在控制台中输出的 “Hello World” 、 “imooc” 、"爱慕课"等。

在 Java 中,字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。

创建 String 对象的方法:
在这里插入图片描述

2. Java 中字符串的不变性

String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:
在这里插入图片描述
运行结果:
在这里插入图片描述
注意:
1、 通过 String s1=“爱慕课”; 声明了一个字符串对象, s1 存放了到字符串对象的引用,在内存中的存放引用关系如下图所示:
在这里插入图片描述
然后通过 s1=“欢迎来到:”+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象,如下图所示:
在这里插入图片描述
2、 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder。
3、 每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法。

3. Java 中 String 类的常用方法

在这里插入图片描述
注意:

  • 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
  • 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1
  • 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符

4. 认识 Java 中的 StringBuilder 类

使用 String 时,因为 String 不可变,当频繁操作字符串时,就会额外产生很多临时变量。
使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。
在这里插入图片描述

5. Java 中的 StringBuilder 类的常用方法

在这里插入图片描述

十三、常用类

1. Java 中的包装类

我们对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

基本类型和包装类之间的对应关系:
在这里插入图片描述
包装类主要提供了两大类方法:

  • 将本类型和其他基本类型进行转换的方法
  • 将字符串和本类型及包装类互相转换的方法

我们以 Integer 包装类为例,来看下包装类的特性。
Integer 包装类的构造方法:
在这里插入图片描述
Integer包装类的常用方法:
在这里插入图片描述

2. Java 中基本类型和包装类之间的转换

基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同):
在这里插入图片描述
在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

装箱: 把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
在这里插入图片描述
拆箱: 和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱
在这里插入图片描述

3. Java 中基本类型和字符串之间的转换

在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。

其中,基本类型转换为字符串有三种方法:

  • 使用包装类的 toString() 方法
  • 使用String类的 valueOf() 方法
  • 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
    在这里插入图片描述

将字符串转换成基本类型有两种方法:

  • 调用包装类的 parseXxx 静态方法
  • 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
    在这里插入图片描述

4. 使用 Date 和 SimpleDateFormat 类表示时间

在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用:
在这里插入图片描述
使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:
在这里插入图片描述
可以使用 SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
(1)使用 format() 方法将日期转换为指定格式的文本
在这里插入图片描述
代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。

运行结果:2014-06-11 09:55:48

(2)使用 parse() 方法将文本转换为日期
在这里插入图片描述
运行结果:
在这里插入图片描述
注意:

  • 调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException,因此需要进行异常处理
  • 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包

5. Calendar 类的应用

Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。

java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
在这里插入图片描述
其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。

运行结果:
在这里插入图片描述
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:
在这里插入图片描述
运行结果:
在这里插入图片描述

6. 使用 Math 类操作数据

Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();

常用的方法:
在这里插入图片描述

十四、Java 中的集合框架

1. 集合框架概述

Java 中的集合类:
是一种工具类,就像是容器,储存任意数量的具有相同属性的对象。

集合的作用:
在这里插入图片描述
在这里插入图片描述
体系结构:
在这里插入图片描述
任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换(用泛型不用转换)。

2. Collection 接口

Collection:

  • 是 List、Set 和 Queue 接口的父接口
  • 定义了可用于操作 List、Set、Queue的方法——增删改查

List 接口及其实现类——ArrayList:

  • List 是元素有序并且可以重复的集合,被称为序列
  • List 可以精确的控制每个元素的插入位置,或删除某个位置元素
  • ArrayList——数组序列,是 List 的一个重要实现类
  • ArrayList 底层是由数组实现的

Set 接口及其实现类——HashSet:

  • Set 是元素无序并且不可重复的集合,被称为集
  • HashSet——哈希集,是 Set 的一个重要实现类

3. 泛型

在这里插入图片描述
注意:

  • 只能存放规定类型及其子类型
  • 泛型不能使用基本类型(可以用对应的封装类)

4. Map接口 & HashMap类

Map接口:
在这里插入图片描述
HashMap类:
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值