Object(基类)
方法:
1、equals(){}//比较
2、toString(){}//转成字符串
3、hashcode(){}//对象的哈希地址值
4、getClass(){}//返回运行时类
………………
内部类
定义:将一个类定义在另一个类里,对里面的那个类就称为内部类。
特点:
1.内部类可以直接访问外部类中的成员,包括私有成员。
2.外部类要访问内部类中的成员,必须要建立内部类的对象。
3.当内部类定义在成员位置上时:
可被private static 等成员修饰符修饰,被static修饰的内部类只能访问外部类中的静态
成员。
4.当内部类定义在局部位置上时:
也可直接访问外部类中的成员,但不能被static 等成员修饰符所修饰。虽可以访问所
在局部中的成员变量,但该变量必须是被final所修饰的。。
访问格式:
<1>当定义在外部类的成员位置上,而且非私有,可以在外部类其他类中直接建立内部类对象访问
格式:外部类名.内部类名 变量名 = new 外部类().new内部类()
<2>在外部类其他类中,访问静态内部类的非静态成员:
格式:new 外部类.内部类().非静态成员();
<3>在外部类其他类中,访问静态内部了的静态成员:
格式:外部类.内部类.静态成员();
什么时候用?
在描述事物时,事物的内部还有事物,该事物就用内部类来描述。
匿名内部类
定义:就是内部类的简化写法。
前提:内部类实现或继承一个接口或者外部类。
格式:
new 外部类名或者接口名(){
覆盖类或者接口中的代码(也可自定义内容)
}
————(注:必须定义在方法里)
如:
class Demo {
void show() {
System.out.println("普通show方法");
}
}
//通过继承创建一个匿名内部类
class External {
public void fanlet() {
new Demo(){
void show(){
System.out.println("覆盖后的show方法");
}
}.show();
}
}
//通过接口创建匿名内部类
interface Inter {
public void show1();
}
class Dmeo{
public void fake() {
//创建一个匿名内部类。
new Inter() {
public void show1() {
System.out.println("fake");
}
};
}
}
简单理解:就是建立一个带内容的外部类或者接口的子类匿名对象。
特点:
当定义的方法不超过3个时,方便了方法的调用,简化了书写。只可调用一次,只可
以使用父类中的方法。
异常
定义:
就是程序在运行时出现的不正常情况。
由来:
问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装
成对象。其实就是java中对不正常情况进行描述后的对象体系。
异常体系:
Throwable中的方法:
String getMessage() :获取异常信息,返回字符串。
String toString() :获取异常类名和异常信息,返回字符串。
void print stack Trace() :获取异常类名和异常信息及异常出现的位置。
void print stack Trace(Print Stream s) :通常同该方法将异常信息内容保存在日志文件中,以便查阅。
异常处理:
try{
需要检测的代码;
}
catch(异常类 变量){
异常处理代码;
}
finally{
一定会执行的代码;(通常用来关闭资源)
}
Throws和Throw
1.throws用于标识函数暴露出来的异常,声明异常(像贴了标签的面包)
2.throw用于抛出异常对象,可用于抛出自定义异常对象。
3.throws用在函数上,后面跟异常类名。
4.throw用在函数内,后面跟异常对象。
注:的那个函数内部出现了throw抛出异常对象,那么就必须给出对应的处理动作,要么try.catch处理,要么在函数上
throws声明让调用者处理。
多异常处理:
1.用throws声明异常时,应声明具体的异常,这样处理可以更具体。
2.thorws在函数上可声明多个异常时,但声明了几个异常,就对应的要写几个catch块。不要定义多余的catch块,如果多个catch块的异常出现继承关系,父类异常catch块放在最下面。
自定义异常
由来:
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装为对象,所以对于这些特有的问题可按照java对问题封装的思想,将特有的问题进行自定义的异常封装。
步骤:
1.建立一个类,继承Exception。
2.在功能会发生问题的地方,用throw抛出自定义异常类对象。
3.定义一个信息,因为父类已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类
(通过super语句)。那么就可以直接通过getMessage方法获取自定义异常信息。
Exception异常的分类
1.编译时被检测的异常:包括Exception子类,RunntimeException以外的所有异常,如果在函数上声明,调用时没有处理方式,编译就会报错,而且这种异常有正对性的处理方式,是可处理的。
2.编译时不被检测的异常:包括RunntimeException以及它的所有子类,该异常也称为运行时异常。如果功能上声明了此异常。调用者可以不用任何处理方式也可以编译通过。如果发生异常就需程序停止,对代码进行修正。
细节:
<1>RunntimeException以及子类如果在函数中被throw抛出,可以不用在函数上声明。
<2>子类覆盖父类方法时,子类的方法必须抛出相同异常或者父类异常的子类。
<3>如果父类抛出了多个异常,子类覆盖父类时,只能抛出相同的异常或者它的子集,子类不能抛出父类没有的异常。
<4>如果被覆盖的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类内部有异常发生,那么子类只能try,不能throws。
<5>当try对应多个catch时,最顶层的异常要放在最下面。