1.内部类
1.1内部类概述
内部类: 就是一个类中定义一个类。 举例: 在一个类A的内部定义一个类B,类B就被称为内部类
内部类的定义格式
格式:
public class 类名{
修饰符 class 类名{
}
}
public class Outer{
public class Inner{
}
}
内部类的访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类成员,必须创建对象
1.2成员内部类
按照内部类在类中定义的位置不同,可以分为如下两种形式
在类的成员位置: 成员内部类
在类的局部位置: 局部内部类
成员内部类,外界如何创建对象使用呢?
格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
1.3局部内部类
局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以方法访问方法内的局部变量
1.4匿名内部类
前提: 存在一个类或者接口,这里的类可以是具体类也可以是抽象类
格式:
new 类名或者接口名(){
重写方法;
};
new Inter(){
public void show(){
}
};
本质: 是一个继承了该类或者实现了该接口的子类匿名对象
2.Math
2.1Math类概述
Math包含执行基本数字运算的方法
没有构造方法,如何使用类中的成员呢?
看类的成员是否都是静态的,如果是,通过类名就可以直接调用
2.2Math类的常用方法
方法名 | 说明 |
public static int abs(int a) | 返回参数的绝对值 |
public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 |
public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 |
public static int round(float a) | 按照四舍五入返回最近接参数的int |
public static int max(int a,int b) | 返回两个int值中的较大值 |
public static int min(int a ,int b) | 返回两个int之中的较小值 |
public static double pow(double a,double b) | 返回a的b次幂 |
public static double random() | 返回值为double的正值,[0.0,1.0) |
3.System
3.1System类概述
System包含几个有用的类字段和方法,它不能被实例化
3.2System类的床用方法
方法名 | 说明 |
public static void exit(int status) | 终止当前的Java虚拟机,非零表示异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
4.Object
4.1Object类概述
Object是类层次结构的跟,每个类都可以将O不jet作为超类。所有类都直接或者间接的继承自该类
构造方法: public Object()
回想面向对象中,为什么说子类的构造方法默认访问的父类的无参构造方法?
因为它们的顶级父类只有无参构造方法
4.2Object类的常用方法
方法名 | 说明 |
public String toString() | 返回对象的字符串表示形式。建议所有子类重写该方法,自动生成 |
public boolean equals(Object obj) | 比较对象是都相等。默认比较地址,重写可以比较内容,自动生成 |
5.Arrays
5.1冒泡排序
排序: 将一组数据按照固定的规则进行排序
冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,一次对多有的数据进行操作,直至所有数据按要求完成排序
如果有n个数据进行排序,总共需要比较n-1次
每一次比较完毕,下一次的比较就会少一个数据参与
5.2Arrays类的概述和常用方法
Arrays类包含用于操作数组的各种方法
方法名 | 说明 |
public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
工具类的设计思想:
构造方法用private修饰
成员用public static修饰
6.基本类型包装类
6.1基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常见的操作之一: 用于进本数据类型与字符串之间的转换
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
6.2Integer类的概述和使用
Integer: 包装一个对象中的原始类型
方法名 | 说明 |
public Integer(int value) | 根据int值创建Integer对象(过时) |
public Integer(String s) | 根据String值创建Integer对象(过时) |
public static Integer valueOf(int i) | 返回表示指定的int值的Integer实例 |
public static Integer valueOf(String s) | 返回一个保存指定值的Integer对象String |
6.3int和String的相互转换
基本类型包装类的最常见的操作就是: 用于基本数据类型和字符串之间的相互转换
6.3.1int转换为String
public static String value(int i): 返回int参数的字符串表示形式。该方法是String类中的方法
6.3.2String转换为int
public static int parseInt(String s): 将字符串解析为int类型。该方法是Integer类中的方法
6.4自动装箱和拆箱
装箱: 把基本数据类型转换为对应的包装类类型
// 装箱
Integer i = Integer.valueOf(100);
// 自动装箱
Integer i = 100;
拆箱: 把包装类类型转换为对应的基本数据类型
Integer i = 100;
// 拆箱
i = i.intValue() + 200;
//自动拆箱
i += 200;
注意: 在使用包装类的时候,如果做操作,最好先判断是否为null
我们推荐的是,只要是对象,在使用前就必须进行不为null的判断
7.日期类
7.1Date类概述和构造方法
Date代表了一个特定的时间,精确到毫秒
方法名 | 说明 |
public Date() | 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
public Date(long date) | 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
7.2Date类的常用方法
方法名 | 说明 |
public long getTime() | 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒 |
public void setTime(long time) | 设置时间,给的是毫秒值 |
7.3SimpleDateFormat类概述
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式化和解析
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从'A'到'Z'以及从'a'到'z'引导的字母被解释为表示日期或时间字符串的组件的模式字母
常用的模式字母及对应关系如下:
y 年
M 月
d 日
H 时
m 分
s 秒
7.4SimpleDateFormat的构造方法
方法名 | 说明 |
public SimpleDateFormat() | 都早一个SimpleDateFormat,使用默认模式和日期格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
7.5SimpleDateFormat格式化和解析日期
7.5.1格式化(从Date到String)
public final String format(Date date): 将日期格式化成日期/时间字符串
7.5.2解析(从String到Date)
public Date parse(String source): 从给定的字符串的开始解析文本以生成日期
7.6Calendar类概述
Calendar为某时刻和日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
7.7Calendar的常用方法
方法名 | 说明 |
public int get(int field) | 返回给定日历字段的值 |
public abstract void add(int field,int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year,int mouth,int date) | 设置当前日历的年月日 |
8.异常
8.1异常概述
异常: 就是程序出现了不正常的情况
异常体系
Throwable Error
Exception RuntimeException
非RuntimeException
Error: 严重问题,不需要处理
Exception: 称为异常类,它表示程序本身可以处理的问题
RuntimeException: 在编译期是不检查的,出现问题后,需要我们回来修改代码
非RuntimeException: 编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了
8.2JVM的默认处理方案
如果程序出现了问题,我们没有任何处理,最终JVM会做默认的处理
把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
程序停止执行
8.3异常处理
如果程序出现了问题,我们需要自己来处理,有两种方案:
try...catch...
throws
8.4异常处理之try...catch...
格式:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
执行流程:
程序从try里面的代码开始执行
出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统
当Java运行时系统接收到异常对象时,回到catch中去匹配的异常类,找到后进行异常的处理
执行完毕之后,程序还可以继续往下执行
8.5Throwable的成员方法
方法名 | 说明 |
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
8.6编译时异常和运行时异常的区别
Java中的异常被分为两大类: 编译时-异常和运行时异常,也被称为受检异常和非受检异常
所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常
编译时异常: 必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常: 无需显示处理,也可以和编译时异常一样处理
8.7异常处理之throws
虽然我们通过try...catch..可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理
也就是说,有些时候可能出现的异常是我们处理不了的,这个时候该怎么办呢?
针对这种情况,Java提供了throws的处理方案
格式:
throws 异常类名;
注意: 这个格式是跟在方法的括号后面的
编译时异常必须要进行处理,两种处理方案: try...catch...或者throws,如果采用throws这种方案,将来谁调用谁处理
运行时异常可以不处理,出现问题,需要我们回来修改代码
8.8自定义异常
格式:
public class 异常类名 extends Exception{
无参构造
带参构造
}
public class ScoreException extends Exception{
public ScoreException(){}
public ScoreException(String message){
super(message);
}
}
8.9throws和throw的区别
throws | throw |
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示抛出异常,由该方法的调用这来处理 | 表示抛出异常,由方法体内的语句处理 |
表示出现异常的一种可能性,并不一定会发生这些异常 | 执行了throw一定抛出了某种异常 |