Object 类
一个类只要没有写明继承除了某个类,那么它默认继承的是object类。下面两行代码是一样:
class Person extends Object{
}
class Person{}
Object 作为父类,有如下常用几种方法作为默认方法。
方法名称 类型 描述
public Object() 构造 构造方法
public Boolean equals(Object obj) 普通 对象比较
public int hashCode() 普通 取得Hash码
public String toString() 普通 对象打印时调用
简单介绍上述几种方法:
toString 用于打印对象的内容信息
equals Object类默认提供的是用于对象地址比较的,实际使用时候可以覆写
Object类是所有类的父类,所有的对象可以向上向object类对象转换,包括数组和接口。
包装类:
包装类与基本数据类型一一对应
Java设计提倡一种思想叫一切都是对象,JAVA数据类型包括基本数据类型和引用数据类型两种,基本数据类型不能称为对象,需要将基本数据类型进行包装。
基本数据类型 包装类 父类
char Character Object
boolean Boolean Object
byte Byte Number
int Integer Number
short Short Number
long Long Number
float Float Number
double Double Number
除了Character和Boolean两个类直属于Object类外,其他的数值型的类均属于类Number。Number类是一个抽象类,里面有很多抽象方法。
装箱与拆箱
装箱是将基本数据类型打包成对象,拆箱是将对象转换成基本数据类型。
自动装箱:用包装类声明一个数值
自动拆箱:用基本数据类型声明一个数值
包装类的应用
包装类应用最多的是将字符串与基本数值类型的转换
第七章:异常的捕获与处理
异常处理的格式:
try{
//可能出现异常的语句
} catch(异常类 异常对象){
//编写异常语句
}catch(异常类 异常对象){
//编写异常语句
}finally{
//一定会运行到的程序代码
}
如果在try中产生异常,程序会自动跳转到catch语句中找到匹配的异常类型进行相应的处理。最后不管程序是否会产生异常,则肯定都会执行到finally语句,finally语句作为异常的统一出口。不管finally语句是可以省略的,如果省略了finally块,则在catch()块运行结束后,程序会跳到try-catch块之后继续执行。有多少个异常,就写上多少个catch语句,写上catch的语句,是为了抓到这些异常的信息
异常处理的标准格式有:try….catch和try…catch….finally两种
异常类的继承结构:
在整个java异常结构中,有两个最常用一个是Exception,一个是Error,这两个类均是Throwable的子类。Exception是程序中出现的可能异常,可以用try。。。catch来处理,而Error是涉及到程序运行的环境JVM的问题,程序是无法处理的。通常把Exception和Error都称为异常,算术异常,数字格式化异常都是Exception的子类。
异常信息的输出方式:在catch语句输出异常时,可以用System.out.println(异常对象)方式打印异常信息,也可以用Exception的子类的printStackTrace()方法输出异常信息,代码是:e.printStackTrace(),使用e.printStackTrace打印方式打印的方法是最完整的。
JAVA的异常处理机制
JAVA异常处理机制是面向对象方式处理的,处理步骤如下:
1、一旦产生一个对象,首先会产生一个异常类的实例化对象
2、在try语句中对此对象进行捕捉
3、产生的异常对象与catch语句中的各种异常类型进行匹配,如果该异常对象属于异常类的实例,则执行catch中的代码。
由对象的多态性可知,所有的子类实例可以全部使用父类接收,那么可以利用向上转型的概念,让所有的异常对象使用Exception类接收,这样可以处理所有异常。需要注意的是Exception处理的异常必须放在最后,因为它能处理的异常是最大的。也可以只用Exception来处理所有异常,但是不建议这样做。由于Exception和Error都是Throwable的子类,所以理论上也可以用Throwable来处理所有异常,但是Error异常是JVM的问题,已经超出了程序本身的处理能力,因此没有必要使用Throwable来处理所有异常。
最好的异常捕获方式是:如果有多个异常最好分别捕获,最后再用Exception处理剩余的异常。
throws 和throw关键字:
throws关键字使用语法:
public 返回值类型 方法名称(参数列表)throws 异常类{}
public int div(int I,int j) throws Exception{
int temp = I / j;
return temp;
}
throws 关键字代笔的语法意思是:使用throws修饰的方法,可能会产生异常,也可能没有产生异常,不管有没有异常产生,调用此方法处的方法都必须进行异常处理。
使用关键字throw抛出异常:
与throws不同的是,可以使用throw手动抛出一个异常类对象。
使用语法:
throw new Exception(“自己抛出异常”)
一般throw不单独使用
一般try-catch与throw搭配使用
在被调用处生成一个异常类对象,然后传给主方法,由主方法处理
Exception类和RunTimeException类
异常的 继承关系:
Exception——→RuntimeException——→IllegalArgumentException——→NumberFormatException
NumberFormatException属于RuntimeException子类,Exception在程序中必须使用try-catch处理,RuntimeException如果有异常可以不使用try catch处理,将由JVM处理,但最好使用try——catch来处理
断言
断言的意思是程序到某个阶段一定会有某个中间结果出现,如果这个结果没有出现,那么程序必然出现了某种错误。
使用语法:
1、assert boolean表达式(即逻辑表达式,逻辑表达式返回的值是true或false)
2、加上详细信息的断言表达式。assert boolean表达式 详细信息
注意:虽然断言返回的是boolean值,但是不能作为逻辑条件在条件判断句中使用
断言有运行结果检查功能,但开发中一般不使用。
第八章 包及访问控制权
本章介绍包及类的封装性
包和windows中的文件夹是类似的,不同的文件夹下面可以有相同文件,类似的,不同的包下面可以有相同的文名文件。
包的定义:package 包名.子包名
编译时候带上参数:-d .
javac -d . 类名
-d:表示生成目录以package名为准
.:表示在当前package中生成class文件
import关键字:
即导包。使用语法:
1、import 包名.子包名...类名 //手动加载所需要的类
2、import.包名.子包名.*//自动加载JVM所需要的类
带有import的java文件编译时候,先编译import的类,再编译当前java文件中的类。被import的类,必须是public访问权限,否则会报访问权限错误。
1和2两种方式导入的方式使用时性能是一样的,没有区别。使用2时自动加载所需的类,不需要的类不会被加载。
当加载的包不止一个,并且不同的包下面有重名的类,如果用重名的类来实例化对象,就会报ambiguous(模棱两可的)错误,这时候,解决办法是实例化对象时候,用完整的包名+类名来实例化对象。
JAVA提供的系统包常见的有:
包名称 作用
java.lang JAVA的基本包,使用时侯自动导入
java.reflect 反射包
java.util 工具包,一些常见的类库和日期包都在此,掌握此包一些常见的设计思路会很好理解
java.text java文本处理类库
java.sql 数据库操作包,提供数据库操作及接口
java.net 完成网络编程
java.io 输入输出处理
java.awt 构成输入输出窗口工具包
javax.swing 建立图形用户界面
静态导入:
import static 包.类.*
导入的全部是一个类的静态方法,这样使用的好处是,调用时候,不用使用类.静态方法名(参数列表),直接使用:静态方法名(参数列表)
class文件的打包:jar命令的使用
一套系统里面包含很多java文件,编译后会对应很多class文件,这样很麻烦,通常会将这些class文件进行打包压缩成.jar文件。使用命令jar。
使用语法:jar -cfv 文件名.jar 包名 如:jar -cvf abc.jar abc
查看jar包详细信息:jar -tvf jar文件名 如:jar -tvf abc.jar
java的封装性
java封装性或访问控制权级别有四个关键字:private,default(或不写),protected,public
private:本类内访问(文件内)
default:本包内访问(文件夹内访问)
protected:本包内及不同包的子类访问
public:无访问限制