1.内部类的访问规则:
内部类可以直接访问外部类的成员,包括私有的成员。
之所以内部类可以直接访问外部类的成员,是因为内部类持有外部类的引用,格式是外部类名.this.X。
外部类要访问内部类的对象,必须要建立内部类对象。
访问格式:
当内部类定义在外部类的成员位置上时,而且非私有,可以在其他外部类中直接建立内部类对象访问。
格式:外部类名.内部类名 变量=外部类对象.内部类对象
2.当内部类在成员位置之上时,就可以被成员修饰所修饰。
比如, private 将内部类在外部类中进行封装。
static :内部类就有了静态的特性。当内部类被static修饰之后,那么内部类只可直接访问外部类的静态成员,访问权限就受了限制。
注意:当内部类定义的成员是静态的时候,内部类也必须是静态的。
当外部类的静态方法访问内部类的方法时,内部类也必须是静态的。
当描述事物的时候,事物的内部还有事物,该事物就用内部类来描述。因为内部事务在使用外部事物的内容。
3.内部类定义在局部时,
1)不可以被成员修饰符修饰
2)可以直接访问外部类的成员,因为还持有外部类的引用。但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
4.匿名内部类
匿名内部类其实就是内部类的简写格式。
定义匿名内部类的前提:内部类必须实现接口或者继承接口。
匿名内部类的格式:new 父类或者接口( ){ 定义子类的内容}
其实匿名内部类就是一个匿名子对象。
案例:
package com.inner;
public class Outer {
/*1.内部类的
*
*/
private int x=9;
private class Inner{
int x=8;
void print(){
int x=7;
//System.out.println("inner:"+Outer.this.x);
System.out.println("inner:"+x);
}
}
void diaoyong()
{
Inner i=new Inner();
i.print();
}
public static void main(String[] args) {
//Outer o=new Outer();
//o.diaoyong();
Outer.Inner out=new Outer().new Inner();
out.print();
}
}
5.异常
1).Throwable:可分为error和Exception。
2).异常的处理
Java提供了特殊的语句处理
Try{
需要被检测的代码
}catch(异常类 变量){
处理异常的代码:(处理方式)
}finally{
一定会执行的语句
}
6.throws和throw的区别
Throws使用在函数上,throw使用在函数内。
Throws后面跟异常类,可以有多个,用逗号隔开
Throw后面跟异常对象。
案例:自定义异常
1.创建一个类,并且继承Exception.
package com.zidingyi.demo;
@SuppressWarnings("serial")
public class FuShuException extends Exception {
private int value;
FuShuException (String message,int value){
super(message);
this.value=value;
}
public int getValue(){
return value;
}
}
2.
package com.zidingyi.demo;
public class Demo {
public int test(int a,int b) throws FuShuException{
if(b<0){
throw new FuShuException("负数",b);//手动通过throw关键字抛出一个自定义异常。
}
return a/b;
}
}
3写一个测试类:
package com.zidingyi.demo;
public class ExceptionDemo {
public static void main(String[] args) {
Demo d=new Demo();
try{
d.test(4, -1);
}catch(FuShuException e){
e.printStackTrace();
System.out.println(e.getValue());
// System.out.println(e.toString());
// System.out.println("除数出现负数了");
}
}
}