一、枚举
枚举指由一组固定的*** 常量 ***组成的类型,里面的数据不能重复。
枚举的作用:可以避免对象属性的非法赋值,提高了系统操作数据的安全性。
定义的抽象类与接口与枚举的区别:
1、枚举是为了避免非法赋值,所以把出现的可能性进行了一一列举。
2、枚举也是一种自定义的数据类型
3、定义的抽象类与接口里面定义的属性是一种静态的常量。
package com;
public enum DogColorEnum {
COLOR_ONE(1,"白色"),
COLOR_TWO(2,"黄色"),
COLOR_THREE(3,"黑色");
private int code;
private String value;
DogColorEnum() {
}
DogColorEnum(int code, String value) {
this.code = code;
this.value = value;
}
//定义一个获取常量value的方法
public static String valueOf(int code){
//遍历枚举的常量集合
for (DogColorEnum dce :values()) {
if(code==dce.code){
return dce.value;
}
}
return null;
}
}
实体类:
package com;
public class Dog {
private String name; //昵称
private int color; // 颜色
public Dog() {
}
public Dog(String name, int color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
}
应用:
public static void main(String[] args) {
Dog dog=new Dog();
dog.setName("小黄");
dog.setColor(2);
System.out.println(dog.getName());
System.out.println(DogColorEnum.valueOf(dog.getColor())); //dog.getColor()==2
}
二、包装类
为什么要使用包装类?
因为在日常开发中,经常使用到数据类型的转换,比如int要转成String类型,String要转成布尔类型等等操作,基本数据类型不能满足类型转换,所以就用到了包装类对象。
2.1 构造包装类实例对象
每一个包装类都可以由它所对应的基本数据类型作为参数类进行构造一个实例(创建一个对象),也可以通过字符串来创建一个实例(Character除外)
2.2 注意事项
1、Boolean类型使用字符串作为构造方法的参数,字符串true忽略大小写,结果为true,除字符串true之外的其他字符串结果都为false
2、当Number包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常
2.3 包装类的常用方法
2.3.1 xxxValue()
包装类对象->基本数据类型 (只限定于Number类型)
把包装类对象转成对应的基本数据类型
语法:
Integer num1=new Integer("22");
int num2 = num1.intValue();
Boolean bool1=new Boolean("true");
boolean bool2 = bool1.booleanValue();
2.3.2 toString()
包装类对象->字符串
把包装类对象转成字符串
语法:
Integer num=new Integer("100");
String s = num.toString();
System.out.println(s+1);
Character character=new Character('a');
String s1 = character.toString();
System.out.println(s1);
Boolean bool=new Boolean("true");
String s2 = bool.toString();
System.out.println(s2);
2.3.3 包装类.parseXxx()
字符串->基本数据类型
把字符串转换为相应的基本数据类型数据(Character除外)
要转成什么基本数据类型,就用所对应的包装类.parse【包装类名称】()
语法:
String str="120";
int num=Integer.parseInt(str);
System.out.println(num+1);
String str1="120.55";
double num1=Double.parseDouble(str1);
System.out.println(num1);
String str2="ok";
boolean bool=Boolean.parseBoolean(str2);
System.out.println(bool);
2.3.4 value0f()
基本数据类型->包装类对象
把基本数据类型转成包装类对象,有两种方式
语法
//基本数据类型转换为包装类对象
int num=10;
Integer num1 = Integer.valueOf(num);
double num2=10.50;
Double num3 = Double.valueOf(num2);
char num4='a';
Character character = Character.valueOf(num4);
2.3.5 valueOf()
字符串->包装类对象
语法
String str="10";
Integer integer = Integer.valueOf(str);
System.out.println(integer+1);
Double num2 = Double.valueOf(str);
String str="true";
Boolean aBoolean = Boolean.valueOf(str);
if(aBoolean){
System.out.println("转换成功!");
}
char num='b';
Character character = Character.valueOf(num);
三、Math类
使用final修饰的类,就是一个终级类,就不能被其他类所继承
使用final修饰的方法,不能被子类所重写
使用final修饰的属性,就是一个常量,不能被重写赋值
语法:
//求绝对值
int num = Math.abs(-1); //求绝对值
System.out.println(num);
四、Random类
Random random=new Random(10);
int i = random.nextInt(100);
int j = random.nextInt(100);
System.out.println(i+"=="+j);
Random类的对象,可以指定随机种子。生成的随机数可以指定一个区间
Math.random()方法生成的数是一个大于等于0.0小于1.0之间的数
五、String类
字符串常用方法:
长度:length()
忽略大小写比较:equalsIgnoreCase(String value)
字符串转小写:toLowerCase()
字符串转大写:toUpperCase()
字符串连接:concat(String value);
求字符所在的索引位置:indexOf(String value)
求最后一个字符所在索引位置:lastIndexOf(String value)
字符串的截取:substring(int index)
去除字符串首尾的空格:trim()
分割字符串:split(String ch)
StringBuffer:可变字符串对象,线程安全
StringBuilder:可变字符串对象,线程不安全
六、BigDecimal类
相加:num1.add(num2)
相减:num1.subtract(num2)
相乘:num1.multiply(num2)
相除:num1.divide(num2,2,BigDecimal.ROUND_HALF_UP) 相除,保留两位小数,四舍五入
/**
* BigDecimal的使用
* 用于浮点数计算,保留其精度!
*/
//创建BigDecimal对象
BigDecimal n1 = new BigDecimal(num3);
BigDecimal n2 = new BigDecimal(num4);
//相加
BigDecimal add = n1.add(n2);
//相减
BigDecimal subtract = n1.subtract(n2);
//相乘
BigDecimal multiply = n1.multiply(n2);
//相除,只能除以能除尽的小数
BigDecimal divide = n2.divide(n1);
//四舍五入相除,且保留两位小数
BigDecimal divide1 = n1.divide(n2, 2, BigDecimal.ROUND_HALF_UP);
七、DecimalFormat
double num = 10.2363532432;
//创建对象 设置数据格式"#0.00" 保留两位小数
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
//设置舍入模式为四舍五入
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
//导入对象
String n3 = decimalFormat.format(num);
//字符串转double
double v = Double.parseDouble(n3);
System.out.println(v);
//用逗号分隔
DecimalFormat d=new DecimalFormat("#,###.00");
八、日期类
Date类转字符串
Date date=new Date(); //以当前时间创建的对象
//创建了一个日期类对象 Mon Feb 19 10:17:20 CST 2024
// 2024-2-19 10:18:16
// 2024/2/19 10:18:16
//2024年2月19日 10:18:16
//日期的格式化
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //日期格式化的工具
String dt = sdf.format(date);
System.out.println(dt);
字符串转Date类型
String dt = "2003-7-15 12:10:26";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dt);
System.out.println(date);
九、Calendar类(日历)
JDK1.1推出了Calendar类,用来代替Date类中得到年 月 日 小时等时间元素的api
Calendar提供了一系列获取时间元素的api,并且使用起来也比较简单,通过Calendar.getInstance()获取到Calendar对象,调用一系列API得到时间元素
//创建Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取日期或时间
System.out.println("年:" + calendar.get(Calendar.YEAR));
System.out.println("月:" + (calendar.get(Calendar.MONTH)+1));
System.out.println("日:" + calendar.get(Calendar.DATE));
System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
System.out.println("秒:" + calendar.get(Calendar.SECOND));
System.out.println("毫秒:" + calendar.get(Calendar.MILLISECOND));
System.out.println("今年的第几个星期:" + calendar.get(Calendar.WEEK_OF_YEAR));
System.out.println("这个月的第几个星期:" + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println("今年的第几天:" + calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("这个月的第几天:" + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("这个星期的第几天:" + calendar.get(Calendar.DAY_OF_WEEK));
//计算日期和时间
calendar.add(Calendar.YEAR, 1); // 在当前日期的基础上加 1 年
calendar.add(Calendar.MONTH, 1); // 在当前日期的基础上加 1 个月
calendar.add(Calendar.DAY_OF_MONTH, 1); // 在当前日期的基础上加 1 天
calendar.add(Calendar.HOUR_OF_DAY, 1); // 在当前日期的基础上加 1 小时
calendar.add(Calendar.MINUTE, 1); // 在当前日期的基础上加 1 分钟
calendar.add(Calendar.SECOND, -1); // 在当前日期的基础上减 1 秒
把字符串日期转成Calendar日历对象
//思路:
//1、把字符串可以转成Date
//2、把Date日期对象设置给Calendar对象
//3、操作Calendar对象
String str = "2003-7-15 12:10:26";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
System.out.println("出生年份:"+calendar.get(Calendar.YEAR));
把Calendar对象格式化为字符串输出
Calendar calendar=Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(calendar.getTime());
System.out.println(str);