教程地址: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 程序中变量、类、方法等命名的符号。
-
标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。譬如:123name 就是不合法滴
-
标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。如:不可以使用 void 作为标识符,但是 Myvoid 可以
-
标识符是严格区分大小写的。 所以涅,一定要分清楚 imooc 和 IMooc 是两个不同的标识符哦!
-
标识符的命名最好能反映出其作用,做到见名知意。
3. 变量
在 Java 中,我们通过三个元素描述变量:变量类型、变量名以及变量值。
(1)变量命名
良好习惯:
1、变量名由多单词组成时,第一个单词的首字母小写,其后单词的首字母大写,俗称骆驼式命名法(也称驼峰命名法),如 myAge
2、变量命名时,尽量简短且能清楚的表达变量的作用,做到见名知意。如:定义变量名 stuName 保存“学生姓名”信息
PS: Java 变量名的长度没有限制,但 Java 语言是区分大小写的,所以 price 和 Price 是两个完全不同的变量哦!
(2)数据类型
Java 语言是一种强类型语言。通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。 Java 中有两类数据类型:
在 Java 中,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。
常用基本数据类型:
String 是一种常见的引用数据类型,用来表示字符串。
float 类型的变量值必须加 f
(3)使用规则
- Java 中的变量需要先声明后使用
- 变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值
- 变量中每次只能赋一个值,但可以修改多次
- main 方法中定义的变量必须先赋值,然后才能输出
- 虽然语法中没有提示错误,但在实际开发中,变量名不建议使用中文,容易产生安全隐患,譬如后期跨平台操作时出现乱码等等
(4)自动类型转换
- 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
- 目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了
(5)强制类型转换
语法:( 数据类型 ) 数值
运行结果:
75.8
75
数值上并未进行四舍五入,而是直接将小数位截断。
4. 常量
所谓常量,可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
语法:final 常量名 = 值;
常量名一般使用大写字符
5. 注释
Java 中注释有三种类型:单行注释、多行注释、文档注释.
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
语法
- switch 后面小括号中表达式的值必须是整型或字符型
- case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
- case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束
- 可以把功能相同的 case 语句合并起来,如
- 如果没有匹配的 case 语句则执行 default 块的代码,default 块可以出现在任意位置,也可以省略
2. 循环语句
(1)while
语法
(2)do … while
语法
do…while 语句保证循环至少被执行一次
(3)for
语法
or
(4)多重循环
(5)循环跳转
- break:退出循环,直接执行循环后面的代码
- 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类: