日期处理和精度处理
日期处理:long time = System.currentTimeMillis(); //取1970-1-1-零点 到 现在的毫秒数
Calendar = Calendar.getInstance(); (java.util.Calendar)
c.setTimeInMillis(time);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
int weekday = c.get(Calendar.DAY_OF_WEEK);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(year + " 年 "+(month+1) +" 月 "+day+" 日 星期"+((weekday>1)?(weekday-1):"日")+" "+hour+":"+minute+":"+second);
}
精度处理: System.out.println(2.0 – 1.1); //运行结果为0.89999999
利用BigDecimal来处理精度丢失问题:
BigDecimal b1 = new BigDecimal(“2.0”); //不要直接传2.0,不然又默认为double类型
BigDecimal b2 = new BigDecimal(“1.1”);
BigDecimal b3 = B1.substract(b2); //调用相减的方法
异常处理
异常:程序运行过程中不正常的情况(切记:程序中99%的异常是你无法处理的,无法解决的异常不要捕获;若为了打印日志而不解决,尽量不要这样做,否则要及时抛出)
异常的传递方式:
① 传递状态码方式(例如,抛出1 , -1):
a)包含的信息有限;
b)可能和正常结果冲突;
c)不强制要求处理。
② 传递异常对象的方式:通过throw手动抛出异常,相当于return方法抛出异常后,调用者如果不能处理该异常,则继续上抛,知道异常被处理,或直接抛给JVM,当JNM获得异常后会终止程序运行,并将异常方法调用栈信息输出
Throwable (所有异常的超类)
有两种常见方法:
String getMessage():返回详细消息字符串
printStackTrace():将此throwable的详细方法调用栈信息输出到控制台
两种子类:
---Error 错误,严重的底层错误,无法完全避免,可以不用处理
---Exception 异常,可以处理
1. RuntimeException:运行时异常,可以完全避免,可以处理也可以不处理,优先选择避免;编译器对于程序运行时可能产生的运行时异常,不强制要求提供处理方案
2. 非RuntimeException:非运行时异常(编译时异常,已检查异常),不可完全避免,必须处理;编译器对于程序运行时可能产生的编译时异常强制要求必须提供处理方案
自定义异常:①自定义编译时异常,需要继承Exception ②自定义运行时异常,需要继承RuntimeException;③需要提供至少两个构造方法,有一个无参构造
异常处理:两种方法
1.异常的声明:当一个方法无法处理可能产生的异常时,可以在方法声明处声明可能抛出的异常类型,当前的方法不在负责处理该异常,交由调用者处理
2.try {可能出现异常的代码块} catch(异常类型 e){异常出现后处理代码块}:捕获异常,并处理(当异常处理后,程序会继续向下执行,可能跳过一些代码块)
注:try-with-source语法格式(jdk7.0):
try(此处放入实现了AtoCloseable接口的对象,以可以自动释放资源,例如InputStream is = new FileInputStream(“路径”);){
//其他的代码块
}catch() {}
说明:try(xxx; xxx;)内放的是需要释放资源的语句,即实现了AutoCloseable接口的对象构造语句,释放顺序是从后到前。此种语法可自动释放或关闭资源,不写finally
案例: try {①;②;③;}
catch(异常类型1 e) {④}
catch(异常类型2 e) {⑤}
若②处可能出现异常类型1、异常类型2、异常类型3
若是异常类型1、执行的代码块有①②④;
若是异常类型2、执行的代码块有①②⑤;
若是异常类型3、执行①②后catch无法捕获,向上抛出
结论:当try块中的代码产生异常时,会通过catch自上而下的尝试匹配,一旦匹配成功,泽后续的catch不知尝试执行;当catch的异常类型有继承关系,优先捕获子类异常
finally :该代码块中的代码表示无论 如何都一定要执行(通常会将关闭流、连接等代码现在此处)
``