Day12复习(内部类)
内部类分类
成员内部类
创建对象方式:
1.先创建外部类对象
2.内部类名 对象名 = 外部类对象名.new 内部类构造函数(实参列表);
静态内部类
创建对象方式:
内部类名 对象名 = 外部类类名.new 内部类构造函数(实参列表);
局部内部类
内部类类名 对象名 = new 内部类构造函数(实参列表);
只能在定义的方法中创建对象;
匿名内部类
没有类名
定义位置 值或实参中
作用: 简化代码
创建对象过程
父类名/父接口名 对象名 = new 父类名/父接口名(){
所有重写的方法;
其他;
}
Day12包装类与常用类
八大数据类型及其包装类:
字节长度 数据类型 对应包装类
1 byte Byte
2 short Short
4 int Integer
8 long Long
2 float Float
4 double Double
1 boolean Boolean
2 char Character
数据类型转换:
字符串转换为int:
int 转换后的数字的变量名 = Integer.parseInt(字符串);
将字符串转换为double
double 转换后的数字的变量名 = Double.parseDouble(字符串);
将字符串转换为布尔
boolean 转换后的数字的变量名 = Boolean.parseboolean(字符串);
将各种类型传换为字符串
String 变量名 = "" + 其他类型的数据;
System:
属性
in 输入
out 正常输出
err 错误输出
提供的方法:
ArrayCopy(原数组,拷贝开始位置,目标数组,复制开始位置,拷贝数组长度);
System.currentTimeMillis()
获取1970年1月1日00:00:00(格林威治时间)到现在的毫秒值
常用与判断程序运行时间
程序运行结束时毫秒值 - 程序运行开始前毫秒
System.exit(0);
退出当前程序
0:表示正常退出
其他:非正常退出
System.gc();
手动调用垃圾回收机制
Scanner
键盘输入,获取值
new Scanner(System.in)
next();
nextInt();
Random
随机数
next(最大值); 0~最大值-1;
Arrays
数组操作工具类
sort(数组):排序
toString:将数组转换为特点格式的字符串
Object
所有类的父类
1.类对象可以转换为Object的对象
2.Object提供的方法所有对象都有的方法
Object object = new Object();
object.equals("");//比较是否相同
//object提供的方法是比较对象内存地址是否相同;
/**
* 1.判断两个对象内存地址是否相同,
* 若相同,是 同一个对象,属性值也相同
* 2.判断传入的对象与调用equals方法的对象是否同一个类的对象.
* 如果是,将传入的对象,转换为该类对象
* 使用转换后的对象的属性与调用equals方法的对象一一对比
* 如果属性值都相同,认为相同
* 3.返回不相同;
*
*
*/
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (this == obj) {
return true;
}
if (obj instanceof Person) {
Person person = (Person)obj;
if (this.name.equals(person.name) &&
this.age == person.age &&
this.sex.equals(person.sex)) {
return true;
}
}
return false;
}
Class<? extends Object> class1 = object.getClass();
object.hashCode();//获取对象的hash码值,如果不重写,可以理解为堆内存中的地址
fianlize();//回收该对象回所占内存地址时调用.final,fianlly.
object.toString();//将对象转换为字符串
//打印对象是,默认调用对象toString()方法;
BigDecimal (精准计算)
eg:
BigDecimal money1 = new BigDecimal(0.1+"");
BigDecimal money2 = new BigDecimal(0.01+"");
//创建该对象时传入字符串
money1.add(money2);//加
money1.subtract(money2);//减
money1.multiply(money2);//乘
money1.divide(money2);//除
//doubleValue()转换为double的数据;
double doubleValue = money1.doubleValue();
字符串相关:
可变字符:
StringBuffer
1.线程安全的
2.jdk1.0出现
3.效率低
StringBuilder
1.线程不安全的
2.jdk1.5出现
3.效率高
方法:
append(被添加的字符串):添加到尾部
delete()
insert()
大量(大于10000)修改,时使用可变字符串
建议使用可变字符串进行大量修改
将不可变字符串转变为可变字符串
String str = "kkk";
StringBuffter sb = new StringBuffer(str);
StringBuilder sb = new StringBuilder(str);
将可变字符串转变为不可变字符串
sb.toString();
String 不可变字符
String
增
+ 字符串连接
String str= "abcdef";
String str1 = "c";
/*
* 查询方法
*/
str.contains(str1);//判断str中是否(包含)存在str1
str.indexOf(str1);//查询str1是否在str中存在的位置,返回值为-1(不存在).存在,返回str1中第一个字符出现的位置
str.lastIndexOf(str1);//查询str1在str中最后一次出现的位置.-1为不存在
str.charAt(0);//获取指定位置下的字符
str.length();//获取字符串长度;
/*
* 比较
*/
str.equals(str1);//不忽略大小写比较是否相同
str.equalsIgnoreCase(str1);//忽略大小写比较是否相同str.
/*
* 转换大小写字母
*/
str.toUpperCase();//把字符中的小写字母全部变成大写字母
str.toLowerCase();//把字符中的大写字母全部变成小写字
/*
* 转换数组
*/
str.toCharArray();//将字符串str转换为char数组
str.getBytes();//将str字符串转换成byte数组
/*
* 判断字符串开始,结束
*/
str.endsWith(str1);//判断字符串是否以str1结尾
str.startsWith(str1);//判断字符串是否以str1开始
/*
* 切割
*/
String regex = ",";
str.split(regex);//以什么(,)字符串切割
/*
* 截取
*/
str.substring(beginIndex);//开始位置到字符串结尾
str.substring(beginIndex, endIndex);//开始位置到结束位置(不包含endIndex的值)
str.substring(2);//截取字符串,从2开始到末尾
str.substring(1,3);//截取字符串,下标从1开始,3结束(不包含3)
/*
* 替换
*/
//返回值为替换后的字符串
str.replace(oldChar, newChar)//oldChar(要被替换的字符串), newChar(新的字符串);
str.replace("a", "z");//替换字符(要替换的字符 , 替换后的字符)
/*
* null :空
* "" :空字符串
*/
//使用null调用方法,空指针异常;
str.isEmpty();//判断是否为空字符串;
/*
* 忽略字符串前后空白
*/
str.trim();//字符串前后空白
时间相关
Date 时间(年月日时分秒)
//获取当前系统时间
Date date = new Date();
//获取距离1970年1月1日00:00:00(格林威治时间)1000毫秒值
Date date1 = new Date(1000l);
date.getTime();
date.after(date1);
date.before(date1);
Calendar 日历
calendar.set(Calendar.YEAR, 2000);
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 20);
calendar.set(Calendar.HOUR_OF_DAY, 13);
calendar.set(Calendar.MINUTE, 14);
calendar.set(Calendar.SECOND, 56);
calendar.set(Calendar.MILLISECOND, 521);
System.out.println(calendar);
calendar.get(calendar.YEAR);
//将calendar对象转换为Date对象
Date date = calendar.getTime();
simpleDateFormat(时间格式化)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");
Date date = new Date();
/**
* 格式要求:
* y:年
* M:月
* d:日
* H:小时24
* h:小时12
* m:分钟
* s:秒
* SS:毫秒
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");
String time = sdf.format(date);
System.out.println(time);
String str = "2022/10/10 16:06:55:347";
Date date2 = sdf.parse(str);
System.out.println(date2);