8.1JavaApl介绍
-
Java应用程序编程接口(Java Application Programming Interface)
-
是运行库的集合
包 | 描述 |
java.lang | 编写Java程序时最广泛使用的包,自动导入所有的程序中,包含了Java程序的基础类和接口。包装类、String类等常用的类都包含在此包中,还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等系统操作的类 |
java.util | 包含系统辅助类,特别是Collection、List和Map等集合类 |
java.time | 包含对日期时间进行处理的类,如创建日期对象,格式化日期等 |
java.io | 包含与输入/输出有关的类,如文件操作等类 |
包含与网络有关的类,如Socket、ServerSocket等类 | |
java.sql | 包含与数据库相关的类,如Connection、Statement等类 |
8.2枚举
定义果树的生长状态,包括“生长期”、“成熟期”和“已死亡
public class Constants {
public static final String GROW = "生长期";
public static final String MATURE = "采摘期";
public static final String DEAD = "已死亡";
}
数据库存储、状态判断时,int类型数据的执行效率高
public class Constants {
public static final int GROW = 0;
public static final int MATURE = 1;
public static final int DEAD = 2;
}
8.2.1 枚举概述
-
枚举是由一组固定的常量组成的类型。
-
语法
访问修饰符 enum 枚举名{
常量1[,常量2...[;]]
//其他成员
}
-
在枚举中可以定义多个常量,表示不同的枚举值,枚举元素,之间用逗号隔开。
-
在枚举中可以定义其他成员,包括构造方法等,置于枚举常量之后。
-
可以使用"枚举名.常量名"的形式取出枚举中的指定内容。
定义表示性别的枚举:
public enum Genders{
Male,Female;
}
定义7个枚举常量,代表一周中的7天,查看一周中每天日程安排
public enum Week {
MON,TUE,WED,THU,FRI,SAT,SUN;
}
public class WeekTest {
public void doWhat(Week day)
{
switch (day){
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日努力写代码");
break;
case SAT:
System.out.println("星期六休息看电影");
break;
case SUN:
System.out.println("星期日,休息!打篮球");
break;
default:
System.out.println("想累死扛扛呀");
break;
}
}
}
创建一个测试类测试代码
public class Test {
public static void main(String[] args) {
WeekTest weekTest=new WeekTest();
weekTest.doWhat(Week.MON);
Week week=Week.TUE;
weekTest.doWhat(week);
}
}
这样子一个一个去赋值的话太过于繁琐,可以用到枚举类型的 values()方法可以实现对枚举的遍历操作
public class Test {
public static void main(String[] args) {
WeekTest weekTest=new WeekTest();
for (Week w:Week.values()){
weekTest.doWhat(w);
}
}
}
-
枚举的 values() 方法表示取得枚举中全部内容,返回一个对象数组。
8.2.2 枚举的方法
-
每一个枚举类型成员都可被看作 Enum 对象,
-
所有枚举实例都可以调用 Enum 类的方法
表 8-1 枚举常用方法
方法 | 描述 |
T[] values() | 以数组形式返回枚举类型的所有成员 |
T valueOf() | 将普通字符串转换为枚举实例 |
int compareTo() | 比较两个枚举成员在定义时的顺序,结果为负整数、零或正整数,表示当前对象小于、等于或大于指定对象 |
int ordinal() | 获取枚举成员的索引位置 |
示例
public enum BuMen {
xueShu,pinPai,caiWu,xiaoShou;
}
public class Test2 {
public static void main(String[] args) {
System.out.println("********foreach 遍历枚举元素**********");
for (Week w:Week.values()){
System.out.print(w+"\t");
}
System.out.println("**********获取枚举个数**********");
System.out.println("一周有"+Week.values().length+"天");
System.out.println("***********使用索引遍历枚举元素***********");
for (int i=0;i<Week.values().length;i++){
System.out.println("索引"+Week.values()[i].ordinal()+"值"+Week.values()[i]+".");
}
System.out.println("***********枚举元素比较**********");
System.out.println((Week.valueOf("MON")).equals(Week.MON));
System.out.println(Week.FRI.compareTo(Week.TUE));
}
}
可以看出
-
枚举具有类似数组的特征
-
每个枚举元素都默认有一个对应的索引值,表示枚举元素的位置,初始值从0开始。
小结
-
枚举可以使代码更易于维护,有助于确保为变量指定合法、期望高的值。
-
使用枚举赋值,只需输入枚举名和".",就可以显示所有枚举值。
-
枚举使代码更加清晰,允许用描述性的名称表示数据,使用时直观方便。
8.3 包装类
8.3.1 包装类概述
-
将基本数据类型封装到一个类中,即将基本类型包装成一个类类型
-
Java为每一种基本类型都提供了一个包装类
-
保存于java.lang包中
-
用途:
-
作为和基本数据类型对应的类型,方便对象的操作
-
包含每种基本数据类型的相关属性
-
如最大值、最小值等,以及相关的操作方法
-
所有数字类型包装类都继承 Number 类、Number 类是一个抽象类。
-
Number 类包装了 Byte、Short、Interger、Long、Float、Double 等数字类型。
包装类和基本数据类型的对应关系表
类型 | 长度 | 默认值 | 包装类 |
byte | 8位 | 0 | java.lang.Byte |
short | 16位 | 0 | java.lang.Short |
int | 32位 | 0 | java.lang.Integer |
long | 64位 | 0 | java.lang.Long |
float | 32位 | 0.0 | java.lang.Float |
double | 64位 | 0.0 | java.lang.Double |
char | 16位 | \u0000~\uFFFF | java.lang.Character |
boolean | 1位 | false、true | java.lang.Boolean |
包装类的用途主要有两个:
-
包装类作为和基本数据类型对应的类型存在,方便对象的操作。
-
包装类包含每种基本数据类型的相关属性,如最大值、最小值等,
8.3.2 包装类和基本数据类型的转换
在不同应用场景中,基本数据类型和包装类间要进行相互转换以完成特定操作。
1.基本数据类型转换为包装类
基于基本数据类型数据创建包装类对象通常采用两种方式:
public Type(type value)
public Type(String value)
每一个包装类,都可以使用关键字 new 将一个基本数据类型值包装为一个对象
语法
Integer intValue=new Integer(21);
2.基本数据类型向包装类转换的用法
public class 数据类型向包装类转换 {
public static void main(String[] args) {
boolean b1=true;
int a=21;
char sex='男';
//1.通过构造方法实现基本数据类型向包装类转换
Boolean bl=new Boolean(b1);
Integer t1=new Integer(a);
Character character=new Character(sex);
//2.将字符串转换为 Boolean 对象
Boolean bobj=new Boolean("true");
Boolean bobj1=new Boolean("TRue");//不区分大小写
Boolean bobj2=new Boolean("hello");//非true及false
System.out.println(bobj+","+bobj1+","+bobj2);
//char 类型不能使用字符串构造包装类
}
}
-
当使用一个字符串来创建Boolean 对象时,如果传入的字符串时"true" 或不同字母大小写形式(如"TRue"),则都将创建与 true 对应的Boolean对象。
-
如果传入其他字符串,则会创建与 false 对应的Boolean 对象。
注意
1.使用一个字符串来创建 Byte、Short、Integer、Long、Float和Double 等包装类对象时,如果传入的字符串不能成功转换成功对应的基本类型变量,会引发 NumberFormatException 异常
2.char 型数据不饿能使用第二种形式的构造方法创建 Character 类型的包装类对象。
3.包装类转换为基本数据类型
语法
public type typeValue();
-
type 指的时基本数据类型,如 byteValue()、charValue(),相应的返回值为 byte、char。
public class 包装类向数据类型转换 {
public static void main(String[] args) {
boolean b1=true;
int a=21;
char sex='男';
//1.通过构造方法实现基本数据类型向包装类转换
Boolean bl=new Boolean(b1);
Integer t1=new Integer(a);
Character character=new Character(sex);
//包装类转换为基本数据类型
boolean b2=bl.booleanValue();
int i=t1.intValue();
char sex1=character.charValue();
System.out.println(b2+","+i+","+sex1);
}
}
8.3.3 装箱拆箱
-
自动装箱:把基本数据类型变量直接转换为对应的包装类对象,或者转换为Object对象。
-
自动拆箱:与装箱相反,将包装类对象转换成对应的基本数据类型变量。
public class Demo01 {
public static void main(String[] args) {
//基本数据类型变量转换为包装类
Integer inObj=5;
Object boolobj=true;
System.out.println(inObj+","+boolobj);
//包装类转换为基本数据类型(拆箱)
int it=inObj;
System.out.println(it);
if(boolobj instanceof Boolean)
{
//先把 Object 对象强转为 Boolean 类型, 在赋值给变量
boolean b=(Boolean)boolobj;
System.out.println(b);
}
}
}
8.4日期类
1.创建日期对象
java.time 包中表示日期的常用类
类 | 描述 | 示例 |
LocalDate | 表示日期(年/月/日),不包含时间 | 2020/11/24 |
LocalTime | 表示时间(时/分/秒/毫秒),不包含日期 | 15:32:12 |
LocalDateTime | 表示日期和时间(年/月/日/时/分/秒/毫秒) | 2020/11/24 15:32 |
-
LocalDate类、LocalTime类、LocaDateTime 类的实例是不可变的对象,提供了简单的日期或时间,并不包含时间信息,也不包含与时间信息,也不包含与时区相关的信息。
日期类的通用方法
方法 | 描述 |
日期类 now() | 根据当前时间创建对象,返回日期对象 |
日期类 of(int year,Month month, int dayOfMonth) | 根据指定日期/时间创建日期类对象 |
Month getMonth() | 获取月份,返回Month,这是一个表示月份的枚举 |
int getDayOfMonth() | 返回当前日期对象的月份天数 |
int getYear() | 返回当前日期对象的年份 |
日期类 plusDays() 日期类 plusWeeks() 日期类 plusMonths() 日期类 plusYears() | 在指定日期基础上添加天数、周数、月数、年数,返回日期类型对象 |
三种日期类的语法:
- LocalDate localDate=LocalDate.now();//获取当前日期
- LocalTime localTime=LocalTime.now(); //获取当前时间
- LocalDateTime localDateTime=LocalDateTime();//获取当前日期和当前时间
public class Test {
public static void main(String[] args) {
//日期对象(年/月/日)
LocalDate localDate= LocalDate.of(2003,12,29);
System.out.println(localDate);
//返回当前日期对象的月份天数
System.out.println("天:"+localDate.getDayOfMonth());
//返回日期类对象的年份
System.out.println("年份:"+localDate.getYear());
//返回日期类对象的月份
System.out.println("月份"+localDate.getMonth());
//返回周几
System.out.println("周几"+localDate.getDayOfWeek());
//返回一年的第几天
System.out.println("一年中的第几天"+localDate.getDayOfYear());
//给原本时间类对象的时间天数基础上增加
System.out.println(localDate.plusDays(-10));
//给原本时间类对象的时间周数基础上增加
System.out.println(localDate.plusWeeks(1));
//给原本时间类对象的时间月数数基础上增加
System.out.println(localDate.plusMonths(1));
//给原本时间类对象的时年数数基础上增加
System.out.println(localDate.plusYears(1));
//获取时间(年/月/日/时/分/秒/毫秒)
LocalDateTime localDateTime=LocalDateTime.now();
System.out.println(localDateTime);
//手动添加(年/月/日/时/分/秒/毫秒)
System.out.println(LocalDateTime.of(2004, 02, 02, 15, 40, 30));
}
}
2.日期格式化
public class 日期格式化 {
public static void main(String[] args) {
//第一种语法
//日历
//创建一个日期格式化对象 给一个约束
SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
//获取当前日期
Date date=new Date();
//调用日期格式化对象的frmat()方法进行格式化输出
System.out.println(format.format(date).toString());
//第二种语法
//创建一个日期格式化对象 给一个约束
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//获取当前日期
LocalDate localDate=LocalDate.now();
//日期格式化对象frmat()方法对时间进行格式化
System.out.println(formatter.format(localDate));
//时间 frmat()方法 对日期格式化对象进行格式化
System.out.println(localDate.format(formatter));
}
}
-
使用不同格式输入当前日期
-
分别提取当前日期对应的年、月、日信息并输出
8.5 Random 类
Random 类的构造方法
方法 | 描述 |
Random() | 创建一个随机数生成器 |
Random(long seed) | 使用单个long种子创建一个随机数生成器 |
nextInt()重载方法
方法 | 描述 |
int nextInt(); | 返回下一个伪随机数,它是此随机数生成器序列中均匀分布的int值 |
int nextInt(int n); | 取自此随机数生成器序列的、在0(包括)和指定值n(不包括)之间均匀分布的int值 |
//创建一个Random对象,即随机数生成器
Random rand = new Random();
//随机生成10个随机整数,并显示
for(int i=0;i<10;i++) {
int num = rand.nextInt(10);
System.out.println("第"+(i+1)+"个随机数是:" + num);
}
总结
枚举
-
枚举可以使代码更易于维护,有助于确保为变量指定合法的、希望的值。
包装类
-
包装类是指将基本数据类型封装到一个类中,也就是将基本类型包装成一个类。
-
共有八个包装类:Boolean、Character、Byte、Short、Integer、Long、Float、Double
自动装箱和自动拆箱
-
自动装箱:把基本数据类型变量直接转换为对应的包装类对象,或者转换为Object 对象
-
自动拆箱:与自动装箱相反,将包装类对象转换成对应的基本数据类型变量。
日期和时间的类就位于java.time中。
-
LocalDate 类、LocalTime 类、LocalDateTime 类的实例是不可变的对象,它提供了简单的日期和时间
-
使用 DateTimeFormatter 类进行日期格式化处理, format()方法用于将日期格式化为字符串。
Random 类用于生成随机数。位于java.util 包中,每当需要以任意或非系统方式生成数字时,就使用此类。