#########
前言:这次学习有很多概念,以及很多繁琐的东西需要重复理解;
这次学习了异常,随机数,日历类和日期类,以及包装类;这次难点在于日历类想调用方法时,所调用对象的原因以及关系;包装类的几种属性也应该充分理解;
一:异常;
异常可分为两类:一类是运行时异常,一类是编译时异常;
运行时异常,在没有编译时ide不会提示警告,只有运行时才会报异常;
处理异常的3种方式;1:使用try。。。catch语句可以处理异常
将有异常的语句放进try语句里;然后catch语句里放如果发生异常要输出的语句;
一般try。。。catch语句还可以搭配finaly,在这个关键字修饰的语句里面可以放有无异常都输出的语句;
2:throws Exception;
这项操作可以将异常抛出去;需要注意的是在方法main后使用这个操作,方法也必须使用,要不然会报错;
3:throw处理异常;
这个方法类似与创建一个异常的对象,然后被创建的这个异常对象就会被抛出;这种处理异常的方法可以用来进行判断;只要值不是你想要的你就可以使用这种方法将异常抛出;
需要注意的是在使用throw创建对象将异常抛出的方法时,在这行代码后不能在输出其他代码;
4:比较特殊的一种异常,自定义异常;
自定义异常一般用于登入系统,要输入密码判断密码是否正确;
自定义异常首先需要创建一个类,并且让这个类去继承一个 RuntimeException 的异常类
然后重写一个有参构造器,并且为这个构造器附上你测试时想返回的数据的数据类型;
在构造器里 使用super关键字调用父类的方法;将先前构造器所取得值名称放入super里;
想要调出自定义异常时需要 throw new 自定义异常的类名即可;
二:随机数;
随机数相对来说比较简单,也比较好理解
首先如果想要生成随机数,必须先创建一个Random对象 然后sout调用random.nextint方法,在方法括号里可以填上你想要随机生成的随机数的范围;需要注意的是,在生成随机数时如果你想要取到范围得+1,才能实现;
随机数这里还有一点就是如果你想生成固定的随机数的话可以在创建Random对象的那个括号里加上一个种子数这样就可以实现固定随机数生成了;
三:1;日期类(用的比较少,重要在于后面的日历类);
首先实体化一个日期对象date,然后这里用的比较多的就是一个时间戳;
调用方法是:.getTime方法;返回的是1970年1月1日到现在的毫秒数
2;日历类(有些概念比较难理解)
日历类是一个抽象类,所以想要调用不能创建对象调用,必须得通过Calendar.getInstanse方法进行调用;;
日历类对象在使用.getTime方法时所返回的值是date类型的返回的是日期,而日期类同样的方法所返回的值却是时间戳,不能混淆;
想要使用日历类获取一些时间需要使用calendar.get(Calendar.方法进行获取);
不直接调用是因为它已经在根类赋值过了,所以没用,只会获取到常量;
3;格式化输出日期类;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");注意这里年月日所对应的字母必须是统一的不能改变,其中HH代表24小时制hh代表12小时制
// 将当前日期转化成yyyy-MM-dd HH:mm:ss格式的字符串
//或者先Date date=new Date();
//创建一个字符串存放date;String str1=simpleDateFormat.format(date);最后打印字符串即可获取时间
String date = simpleDateFormat.format(new Date());
System.out.println(date);
// 将日期格式的字符串转化成Date对象
String dateStr = "2000-01-01 12:00:00";
try {
Date date2 = simpleDateFormat.parse(dateStr);
System.out.println(date2);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
四:包装类;
包装类中;只有两种是特殊的,一个是int型,包装类是Integer;还有一个是char型,包装类是Character;其余类型的包装类全都是首字母大写即可;
使用包装类型的不同之处:延展性更强,可以直接调用很多方法;
经过包装类修饰过的变量都会变成包装类,它会自动发生一个自动装箱的功能
就是将基本数据类型转化为对应的包装类;
自动拆箱,定义一个基础类型,然后赋值一个包装类型,这样会变成基础类型;
包装类与基础类型比较时,会自动进行拆箱;
应用数据==比的是地址,==基础类型数据比的是大小
需要注意的是,常量池会定义一个-128——127的值,在比较时只会有一个地址输出;
int i6 = 100;
Integer i7 = new Integer(100);
Integer i8 = new Integer(100);
Integer i9 = 200;
Integer i10 = 200;
Integer i11 = 100;
Integer i12 = 100;
System.out.println(i6 == i7);
System.out.println(i7 == i8);
System.out.println(i9 == i10);
System.out.println(i9.intValue() == i10.intValue());
System.out.println(i11 == i12);
System.out.println(i6 == i7); // true 包装类与基本类型比较的时候会将包装类拆箱成基本类型进行比较。
System.out.println(i7 == i8); // false new出两个新的地址
System.out.println(i9 == i10); // false 自动装箱,调用了valueOf() 把int转化为对象 -128~127
System.out.println(i9.intValue() == i10.intValue()); // true进行主动拆箱
System.out.println(i11 == i12); // true 常量池会初始化-128到127的值,只会保留一个地址的值