埋骨何须桑梓地,人生何处不青山。
Objects常用方法
1、Objects.equals()的使用 - 避免nullException
当生成其它类时,如果不进行equals重写,直接比较的就是对象的地址—与toString类似,Object这个祖宗类提供的方法,如果不进行重写,后台输出的就是实例的地址,进行toString才能获取到该对象中的属性打印
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
//防止出现nullException
return Objects.equals(userName, user.userName) &&
Objects.equals(passWd, user.passWd);
}
Objects.equals()的源码也很有意思
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
2、Objects.isNull() —— 比较鸡肋
public static boolean isNull(Object obj) {
return obj == null;
}
日期
1、date(util包):目前date只有两个构造器,一个是有参构造,另外一个是无参构造
public static void main(String[] args) {
//当前时间
// Date date = new Date();
// System.out.println(date);
// System.out.println(date.getTime());
//计算该代码块的运行时间
long time = new Date().getTime();
for (int i = 0; i <= 1000000; i ++ ){
System.out.println(111);
}
long endTime = new Date().getTime();
//作为浮点类型去进行运算,秒后有对应的小数时间
System.out.println((endTime - time) / 1000.0);
}
2、SimpleDateFormat类,作为DataFormat(抽象类)的子类,实现format方法,在固定好格式之后,format的对象有两种,一种是对应的时间,一种是时间对应的毫秒数
public static void main(String[] args) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年");
//(1)把对应的时间进行转换
System.out.println(simpleDateFormat.format(new Date()));
//(2)将毫秒数进行转换
System.out.println(simpleDateFormat.format(new Date().getTime()));
}
3、将String类型转换为date,利用parse()去进行转换
public static void main(String[] args) throws ParseException {
//如果parse String类型的字符串,那么解析格式一定要与字符串相同
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = "2023-12-24 08:12:30";
//当提示异常抛出相当于代码测对人的不相信而提供的保护机制
Date parse = simpleDateFormat.parse(dateStr);
System.out.println(simpleDateFormat.format(parse));
System.out.println(simpleDateFormat.format(parse.getTime()));
//在这块很可能会发生报错,在+的后缀处全为int类型的操作,但最后操作的结果较大,很可能会出现边界越界的情况
// long newTime = parse.getTime() + 24*60*60*1000;
//修改:在进行操作的首个int字段添加L,表示其是Long类型的操作
long newTime = parse.getTime() + 24L*60*60*1000;
System.out.println(simpleDateFormat.format(newTime));
}
注:当操作的int类型较大时,考虑使用long类型去进行运算
4、日历类的使用,日历类的使用不再赘述,本质为酶具有类的使用
public static void main(String[] args) {
//规定通过单例获取对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.HOUR));
calendar.add(Calendar.YEAR, 2);
calendar.add(Calendar.HOUR, 2);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.HOUR));
}
System常用的方法
public static void main(String[] args) {
//强制进行gc操作 - 只此一家
System.gc();
//退出当前jvm状态
System.exit(0);
//获取当前时间的毫秒值
System.currentTimeMillis();
//数组拷贝 - 这块留意下
// System.arraycopy();
}
数学类的使用
1、Math类静态方法的使用 - 取绝对值,向上取整,向下取整,四舍五入
public static void main(String[] args) {
System.out.println(Math.abs(-45));
System.out.println(Math.floor(456.2));
System.out.println(Math.ceil(78.2));
System.out.println(Math.round(78.2));
}
2、当进行数字类的运算的时候,考虑使用BigDecimal去进行操作,可极大程度的保持精度
public static void main(String[] args) {
double a = 12.2;
double b = 0.5;
double c = a + b;
System.out.println(c);
System.out.println(a/b);
System.out.println(a + b);
//bigdecimal主要针对的是高精度浮点类型的数据
//其使用的是这种格式进行对象创建
BigDecimal bigDecimal = BigDecimal.valueOf(12.2);
BigDecimal bigDecimal1 = BigDecimal.valueOf(78.5);
BigDecimal bigDecimal2 = bigDecimal.add(bigDecimal1);
System.out.println(bigDecimal2);
}
包装和基本数据类型
基本数据类型只包含了8种,基本数据类型中只包含对应值,比如1,2,3,xueweinan,吴彦祖这种;而包装数据类型是一个对象,继承自Object,包含null与其它操作,或者说其可以承载null值——接口处适应包装数据类型可以避免报错
另外,基本和包装涉及拆箱和装箱,都是默认操作
public static void main(String[] args) {
//装箱
Integer i= 12;
//拆箱
int a = i;
//转换过程中,只局限于数字类的字符串,否则会出现数据形式转换异常
int i1 = Integer.parseInt("1212");
double v = Double.parseDouble("1212");
Integer integer = Integer.valueOf(121);
Double aDouble = Double.valueOf("212121");
}
正则表达式
正则表达式在后端应用的不甚广泛,其主要功能有以下几种:
1、字符串校验
public static void main(String[] args) {
String str = "1217486746854a212";
// System.out.println(matchs(str));
//只进行一次校验
//匹配集合
System.out.println("a".matches("[abc]"));
//不匹配集合
System.out.println("a".matches("[^abc]"));
//匹配数字 - 双//与java本身的字符进行区分
System.out.println("1".matches("\\d"));
//匹配字母-数字也是一种字母吗?-答案是肯定的
System.out.println("1".matches("\\w"));
System.out.println("a".matches("\\w"));
System.out.println("qwqwq".matches("\\w{6,}"));
System.out.println("1213".matches("\\w{4}"));
System.out.println("121375452".matches("\\w{4}"));
System.out.println("121*".matches("[a-zA-Z0-9]{4}"));
System.out.println("121A".matches("[a-zA-Z0-9]{4}"));
//对邮箱进行校验
"127168@qq.com".matches("\\w{1,}&\\w{2,3}(\\.\\w{2,10}){1,2}");
}
private static boolean matchs(String str) {
return str != null && str.matches("\\d{4,}");
}
注:[ ]一般是表示范围,{ }一般是表示个数
2、与字符串方法的联用——与split()和replace()进行联用
public static void main(String[] args) {
String name = "测试wdgiuwh12121开发";
String[] split = name.split("\\w{1,}");
// Stream<String> stream = Arrays.stream(split);
// System.out.println(stream);
for (String s : split) {
System.out.println(s);
}
String s = name.replaceAll("\\w+", " ");
System.out.println(s);
}
3、拔取数据 - 很初始的方法去进行操作
public static void main(String[] args) {
String str = "srdtghkedjhn1212chgujkdhkj34345";
//regex相当于去进行关键走获取 - 以正则表达式的形式去进行获取
String regex = "1[2-9]\\d{1,3}";
//编译正则表达式成为一个匹配规则对象
Pattern compile = Pattern.compile(regex);
//以正则表达式对象去进行String对象的匹配
Matcher matcher = compile.matcher(str);
//当根据正则表达式对象匹配到对应的字符串
while (matcher.find()){
//输出匹配的对应对象
System.out.println(matcher.group());
}
}