JavaOOP 08实用类(枚举、包装类、装箱、拆箱、Random)

8.1JavaApl介绍

  • Java应用程序编程接口(Java Application Programming Interface)

  • 是运行库的集合

描述

java.lang

编写Java程序时最广泛使用的包,自动导入所有的程序中,包含了Java程序的基础类和接口。包装类、String类等常用的类都包含在此包中,还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等系统操作的类

java.util

包含系统辅助类,特别是Collection、List和Map等集合类

java.time

包含对日期时间进行处理的类,如创建日期对象,格式化日期等

java.io

包含与输入/输出有关的类,如文件操作等类

java.net

包含与网络有关的类,如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 包中,每当需要以任意或非系统方式生成数字时,就使用此类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值