java学习笔记day16常用API和异常机制

1.System

System类提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。
由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。
成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流
(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
成员方法
native long currentTimeMillis():
该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时
间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

北京时间 : 1970.1.1 8:00 00 000

void exit(int status):
该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表
异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等

2. Date

表示特定的瞬间,精确到毫秒
2.1 构造方法
Date():使用无参构造器创建的对象可以获取本地当前时间。
Date(long date)

2.2 常用方法
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象
表示的毫秒数。
toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
其它很多方法都过时了。

2.3 SimpleDateFormat
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat
类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化:日期à文本、解析:文本à日期

SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern
指定的格式创建一个对象,该对象调用:
public String format(Date date):方法格式化时间对象date

public Date parse(String source):从给定字符串的开始解析文本,以生成
一个日期。

3. Calendar
1、Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
2、获取Calendar实例的方法
使用Calendar.getInstance()方法
调用它的子类GregorianCalendar的构造器。
3、一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想 要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、 MINUTE、SECOND
public void set(int field,int value)
public void add(int field,int amount)
public final Date getTime()
public final void setTime(Date date)
4、注意:
获取月份时:一月是0,二月是1,以此类推,12月是11
获取星期时:周日是1,周二是2 , 。。。。周六是7

	// 创建日历对象
	Calendar c = Calendar.getInstance();
	// 获取当前是本周第几天,周日是第一天
	System.out.println(c.get(Calendar.DAY_OF_WEEK));
	// 获取今天是多少号(本月第几天)
	System.out.println(c.get(Calendar.DAY_OF_MONTH));

	// 获取年
	int year = c.get(Calendar.YEAR);
	// 获取月 从0开始,所以结果+1
	int month = c.get(Calendar.MONTH) + 1;
	// 获取日
	int day = c.get(Calendar.DAY_OF_MONTH);

	// 获取时
	int hour = c.get(Calendar.HOUR);
	// 获取分
	int minute = c.get(Calendar.MINUTE);
	// 获取秒
	int second = c.get(Calendar.SECOND);
	// 获取本周第几天
	int weekday = c.get(Calendar.DAY_OF_WEEK);

	// 把本周第几天转换为星期
	String weekdayStr = "星期";
	switch (weekday) {
	case 1:
		weekdayStr += "日";
		break;
	case 2:
		weekdayStr += "一";
		break;
	case 3:
		weekdayStr += "二";
		break;
	case 4:
		weekdayStr += "三";
		break;
	case 5:
		weekdayStr += "四";
		break;
	case 6:
		weekdayStr += "五";
		break;
	case 7:
		weekdayStr += "六";
		break;
	}
	System.out.println(year+"年"+month+"月"+day+"日  "+hour+":"+minute+":"+second+"  "+weekdayStr);

4. 扩展之Enum
https://www.cnblogs.com/zhanqing/p/11076646.html

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。下面先来看看什么是枚举?如何定义枚举?

4.1 Enum之前定义枚举的方式

上述的常量定义常量的方式称为int枚举模式,这样的定义方式并没有什么错,但它存在许多不足,如在类型安全和使用方便性上并没有多少好处,如果存在定义int值相同的变量,混淆的几率还是很大的,编译器也不会提出任何警告,因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述的常量,同时也感受一把枚举定义的方式,如下定义周一到周日的常量

4.2 Enum之后定义枚举的方式
//枚举类型,使用关键字enum
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

相当简洁,在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。枚举类型Day中分别定义了从周一到周日的值,这里要注意,值一般是大写的字母,多个值之间以逗号分隔。同时我们应该知道的是枚举类型可以像类(class)类型一样,定义为一个单独的文件,当然也可以定义在其他类内部,更重要的是枚举常量在类型安全性和便捷性都很有保证,如果出现类型问题编译器也会提示我们改进,但务必记住枚举表示的类型其取值是必须有限的,也就是说每个值都是可以枚举出来的,比如上述描述的一周共有七天

5. 扩展之Random
5.1 使用

随机数生成器 从0开始

6. Math

  • 提供科学计算和基本的数字操作方法
  • 常用的方法都是静态的,直接类名调用即可,Math是在java.lang.Math 所以使用不需要导包
    6.1 常用方法

abs 绝对值 acos,asin,atan,cos,sin,tan 三角函数 sqrt 平方根
pow(double a,doble b) a的b次幂 log 自然对数
exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度

7. Number
7.1 DecimalFormat

  • 数字格式化
  •  # 表示任意数字,0-9任意单个数字
    
  •  , 千分位
    
  •  . 小数点
    
  •  0 补位
    

8.1 BigInteger
1、Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的, 最大为2^63-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。

2、java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供
所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作。

3、构造器
BigInteger(String val):根据字符串构建BigInteger对象

4、常用方法
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数 相除只保留整数部分。
BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

8.2 BigDecimal
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类。
BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器
public BigDecimal(double val)
public BigDecimal(String val)
常用方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

异常机制

  1. 之前常见的运行时异常
    1 空指针异常
    2 下标越界
    3 类型转换
    4 栈内存移出
  2. 异常概述

异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更加健壮、易于调试。
异常发生的原因有很多,比如:
1)用户输入了非法数据
2)要打开的文件不存在
3)网络通信时连接中断
4)JVM内存溢出
5)这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。

  • 如果程序报错,会终止程序生命周期执行(错误代码之后的代码都不会执行了)

  • 1 异常机制

  •  异常就是错误的另一种说法
    
  •  在java中有一个专门模拟所有异常和错误的类(Throwable),所有的异常类都必须继承这个类
    
  • 异常是我们程序员在写程序的时候,对某些高风险代码的操作规定了一个提醒机制,对于系统来说 就是处理异常的触发机制

  • 2 异常机制的处理形式

  •  	try...catch... : 解决异常,一般用在客户端
    
  •  	throws : 抛出异常,一般用在类库端(服务端)
    
  •  	throw : 制造异常,异常源点,创建一个异常对象
    
  • 用if…else…进行判断,也可以把大多数错误屏蔽掉,但是 只能处理我们预知的情况,对于无法预知的情况,就需要使用try…catch…解决了

  • 3 不同异常机制的选择

  •  	有些错误我们不想处理,或者没有办法处理,或者不知道应该怎么处理(通常是类库端),一般使用throws把问题抛给调用处
    
  •  	在一个就是知道怎么处理,直接使用try...catch...处理问题即可,一般是main方法
    
  • 4 finally语句块

  •  	必须执行的语句块
    
  • 5 异常机制的继承体系

  •  最大的异常类是 Throwable
    
  •  	直接两个子类 : Error(我们解决不了,比如栈溢出)和  Exception(所有的子类除了一个RunTimeException之外,其他全是编译时异常)
    
  • 6 语法 :

  •  try{
    
  •  	高风险代码;
    
  •  }catch(异常类 变量){
    
  •  	处理措施;
    
  •  }
    

目的 : 增强程序的鲁棒性,健壮性

4. Error

  1. 概念
    系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
    比如:OOM(内存溢出错误)、VirtualMachineError(虚拟机错误)、StackOverflowError(堆栈溢出错误)等,一般发生这种情况,JVM会选择终止程序。
  2. 示例
    //堆栈溢出错误
    public class TestError {
    public static void recursionMethod() {
    recursionMethod();// 无限递归下去
    }
    public static void main(String[] args) {
    recursionMethod();
    }
    }

报错信息:
Exception in thread “main” java.lang.StackOverflowError
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
… …
5. Exception
5.1 概述

Exception是所有异常类的父类。分为非RuntimeException和RuntimeException 。
非RuntimeException
指程序编译时需要捕获或处理的异常,如IOException、自定义异常等。属于checked异常。
RuntimeException
指程序编译时不需要捕获或处理的异常,如:NullPointerException等。属于unchecked异常。一般是由程序员粗心导致的。如空指针异常、数组越界、类型转换异常等。

  • try{

  •  高风险代码;
    
  • }catch(异常类 变量){

  •  异常操作
    
  • }catch(异常类 变量){

  •  异常操作
    
  • }

  • 1 catch语句可以根据代码返回的异常编写多个

  • 2 但是从上往下,必须是子类到父类,要不然会因为多态的原因,父类会把子类对象捕捉

  • 3 从上往下可以是没有继承关系的,那样就不需要考虑顺序问题

  • 4 多个异常,只会有一个执行,因为最先出错的语句之后,try中的代码就不再执行了

  • 如果 多个异常中,我们的处理措施是一样的,可以直接写exception 没问题

  • 但是 如果操作不同,就不能使用exception捕捉

  •  	比如 用户登陆,如果使用exception捕捉,你是不知道是用户名不对还是密码不对的,那么就只能提醒 "用户名或密码不对"
    
  •  	如果想分开提醒 到底是用户名错了还是密码错了 就只能分开捕捉
    
  • java1.7开始,出现了一个新的写法,可以一次catch捕捉多个异常,

  • 但是异常之间不能有继承关系,如果有继承关系,之间写父类

  • 多个异常使用 | 隔开

  • 异常类型 | 异常类型 | …

  • java1.7 异常有两个改进

  •  1 多个异常可以在一个catch中同时捕捉, 需要使用 | 隔开
    
  •  2 自动关闭资源
    
  •  	try(开启资源语句){
    
  •  		高风险代码;
    
  •  	}catch(异常类 变量){
    
  •  		处理语句;
    
  •  	}
    

5.4 Throws
5.4.1 第一种

  • throws 并不会把异常处理,而是一种提醒,告诉调用人员,这里有个异常/可能有个异常没有解决,你注意一下

  • 如果你调用的方法 通过 throws 提醒了你,要么你也提醒调用你的地方,或者你 try 处理掉

5.4.2 第二种

  • throws 也可以同时抛出多个异常,使用 逗号 隔开

  • 因为 throws 只是一个提醒,所以无所谓顺序和继承关系

5.4.3 注意-覆写不能有更宽泛的异常

  • 子类中重写的方法,不能比父类有更宽泛的异常

  • 也就是说,子类方法中抛出的异常,必须是父类方法抛出的异常类,或者是其子类

  • 子类覆写后 异常 <= 父类 方法的异常

5.5 Finally
5.5.1 基本使用

  • finally : 必须执行的语句块

  • 我们在编程当中,会碰到程序出错的情况,但是某些情况下,尽管出错了,某些代码也仍然需要让他执行

  •  比如关闭资源语句
    
  • 1 finally 可以直接和 try… finally{} 一起使用

  • 2 finally 不能单独使用

  • 3 也可以和try…catch…finally… 一起使用

  • 4 只有一种不执行 的情况

  •  	System.exit() : 关闭虚拟机
    

5.6 Throw
异常源点,创建一个异常
throw new 异常类( 错误信息 );

详细用法参考 自定义异常
6. 自定义异常类
6.1 定义异常类

  • 自定义异常类
  • 1 继承一个 已有的异常类,基本上就继承Exception即可,如果是运行时异常 就继承RuntimeException
  • 2 无参构造
  • 3 有参构造,传入错误信息,并把信息传递给父类 super(xxx)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值