1 代码块
类的构成 :
- 成员变量
- 常量
- 类变量(static)
- 构造方法(重载)
- 成员方法
- 静态方法
- 成员内部类
1.1 分析main方法
调用者:JVM
public:保证方法访问权限足够大
static:保证在类加载时就创建main方法,且不需要对象就可访问,
void:不需要返回值
main:方便JVM使用的固定名称
String[] args:可接收参数
1.2 代码块
用{}括起来的一段代码称之为代码块
1.2.1 构造代码块
构造代码块随着对象的创建而执行,每次创建对象都会一次执行,执行时优先于构造方法
构造代码块可以对成员变量进行初始化
1.2.2 静态代码块
1 随类的加载而加载
2 最早执行,优先于构成代码块和构造方法
3 不能使用 this (1.this 指类的对象 2. static加载时没有对象)
4 可完成对静态变量的初始化
执行顺序: 静态代码块 > 构造代码块 > 构造方法
2 JDK中的常用API
2.1 Math
Math
类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
Math类的变量和声明都是static 因此Math的变量和方法可以直接调用
random()
返回值为 double
值为正号,大于等于 0.0
,小于 1.0
。
2.2 Random
随机数生成器
构造方法 : Random()
方法:
计算机中的随机都是伪随机,服从正态分布
2.3 System
System.exit(int status) 终止JVM的运行
System.currentTimeMillis() 返回当前时间
2.4 包装类
基本类型的包装类
弥补java设计中的8种基本类型不满足面对对象的思想缺陷(属性、行为表达不全),同时便于在开发中对基本数据类型的数据进行相关操作,引入了8中基本类型所对应的类。这个类就称为基本类型的包装类
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
Byte Short Integer Long Float Double 都是Number的子类
Number类中提供了可以将包装类转化为基本类型的方法
2.4.1 Integer
设定了 int 的范围作为最值 (-128~127)
构造方法:
方法:
将Integer转换为基本类型
获取两个整数中的最大值和最小值
将字符串解析为基本类型
将基本类型转换为字符串
(https://img-blog.csdnimg.cn/90b5d7d6ea9241019a7f1edab47e4978.png)
将基本类型转换为包装类
Integer 和 int 的区别:
Integer类型的对象可以调用Integer中定义的方法,对整数进行相应的操作和处理,而int基本类型没有这些操作,反映出提供基本类型的包装类的好处
2.4.2 int 和 String 之间的转换
基本类型的包装类的常见操作就是完成基本类型和字符串之间的相互转换,以及对应的基本类型和其他基本类型之间的相互转换
1 int 转换为 String
方法一:使用 String 类提供的 valueOf(参数)
方法二:直接在数字后加上一个空字符串 ” “(以字符串形式输出)
2 String 转换为 int
方法一:使用 Integer.valueOf(String s) 将 String 类型转换为 Integer,然后使用 Integer 的 intValue() 将 Integer 转换为 int 类型
方法二:用 parseInt(String s) 将一个字符串类型的数值解析为基本类型
2.4.3 自动装箱和自动拆箱
指基本类型和包装类之间进行相互转换。(JDK1.5之后引入)
自动装箱:将基本类型直接赋值给包装类 JVM会自动将基本类型的数据转换为对应包装类的对象
自动拆箱:将包装类直接赋值给基本类型
2.4.4 包装类的缓存问题
整型 char 所对应的包装类在自动装箱的同时,对于-128~127 之间的值会创建一个数组进行缓存处理,目的就是提高效率。
1 IntegerCache 为 Ineger 类的静态内部类,仅供 Integer 类使用
2 缓存范围是 IntegerCache.low(-128) ~ IntegerCache.high(127)
2.5 时间日期类
2.5.1 Date
代表一个特定时间,精确到毫秒
时间表示:
- GMT 格林尼治时间
- UTD 协调世界时间
- CST 中国标准时间
2.5.2 常用方法
Date 对象名 = new Date() 创建对象
getTime()返回自1970年1月1日0时0分0秒以来经过的毫秒数
2.5.3 时间格式化
SimpleDateFormat
是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和归一化。
创建对象并规定表现形式(有默认形式)
SimpleDateForma 对象名 = new SimpleDateForma(”表现形式“)
格式化的本质就是将一个Date类型的日期按照一定的格式转换为了String类型
日期的解析:将一个字符串表示的日期 解析为Date类型
当要解析的字符串比对象的参数列表短时,会发生解析异常;比对象的参数列表长时,可以运行
2.5.4 Calendar类(日历类)
获取对象
Calendar 对象名 = Calendar.getInstance() (包含年月日等所有信息)
获取字段
对象名.get(Calendar.获取对象) get中的月份从0~11
对象名.set(参数列表) 给出任意时间
2.6 BigDecimal
该类用于对超过16位有效数字的数进行精确计算
double 可以处理16位有效数字,而在实际应用中需要对更大或更小的数进行运算和处理
float 、double 可用于科学计算和工程计算,BigDecimal 一定用于商业计算
2.6. 创建对象
- BigDecimal (int val)
将
int成
BigDecimal。
- BigDecimal(String val)
将BigDecimal的字符串表示
BigDecimal转换为
BigDecimal` BigDecimal(double val)
将double
转换为BigDecimal
,这是double
的二进制浮点值的精确十进制表示。(不建议,十进制表示小数不精确)
2.6.2 方法
- BigDecimal add(BigDecimal augend)
返回
BigDecimal,其值是
(this + augend),其标为
max(this.scale(), augend.scale())` 。 - subtract(BigDecimal subtrahend)
返回
BigDecimal,其值是
(this - subtrahend),其标为
max(this.scale(), subtrahend.scale())` - multiply(BigDecimal multiplicand)
返回
BigDecimal,其值是
(this × multiplicand),其标为
(this.scale() + multiplicand.scale())` 。 divide(BigDecimal divisor)
返回BigDecimal
,其值为(this / divisor)
,优先级为(this.scale() - divisor.scale())
; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException
。
3 异常
3.1 异常概述
在程序执行过程中发生的不正常情况(开发中的语法错误和逻辑错误不属于异常)
3.2 异常分类
Error:java虚拟机无法解决的严重问题。如:JVM系统内部错误等 一般不用处理。
Exception:因为编程错误或偶然外在因素导致的一般性问题。如:空指针异常,文件不存在,数据下标越界等 可设计针对性代码解决
解决方法:1.遇到错误就终止程序运行 2.在编程中针对可能出现的问题及时增加检测和错误信息的提示以及针对特点错误做出相应的处理
异常可分为编译期异常和运行期异常
运行期异常
运行时出现的异常,在编译时不会要求强制处置,一般为编程时的逻辑错误,是程序应该积极避免其出现的异常
编译期异常
编译时出现的异常,在编译时会要求强制处置,一般为运行时由外界因素造成的一般性异常,不进行相应处理则程序无法正常运行
3.3 常见的异常
一般异常指Exception
3.4 异常处理机制
java中的异常处理采用抓抛模型
3.4.1 机制一(抓)
try{
可能发生异常的代码
}catch(异常类型 变量){
发生异常的处理方式
}finally{
无论有无异常都要执行的代码
}
catch 可以多个(类似if…else if),一个 catch 可以捕获多个同级的异常(JDK7以后),如果捕获的异常有继承,则异常的父类放在最后
finally 中的 return 会覆盖 try 和 catch 的 return
3.4.2 机制二(抛)
声明抛出异常 throws
格式:修饰符 返回值 方法名(参数列表)throws 抛出异常
当方法抛出异常时,该异常会返回给方法的上一级,在上一级进行处理。异常可层层外抛,直到从 main 方法抛到 JVM,此时JVM就会采用默认的处理方式:1. 在控制台打印堆栈信息 2. 终止程序
throws抛出异常的特点
抛的是异常的类型
可以同时抛出多个异常类型
3.5 自定义异常
自定义异常可以是运行期异常,也可是编译期异常
自定义运行期异常时 只需要继承RuntimeException 自定义编译期异常时 只需要继承Exception
自定义异常的实现:
1 定义无参构造,使用 super 调用父类的无参构造
2 定义带参构造,用错误描述信息作为参数,用 super 调用父类的带参构造
throw 和 throws 区别
1 编写位置:throw 在方法内部
throws在方法的声明上
2 抛出类型:throw 抛出的是一个对象
throws 抛出的是异常的类型
3 抛出个数:throw 抛出一个对象
throws 可以抛出多个类型