内部类
public class Outer {
private int number = 10;
public void out(){
System.out.println("这是外部类");
}
public class Inner{//静态修饰的内部类不能调用到外部的属性
public void in(){
System.out.println("这是内部类");
}
public void getInt(){
System.out.println(number);//内部类可以访问外部私有属性
}
public void getOut(){
out();//内部类可以访问外部方法
}
}
}
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();//内部类的定义必须借助外部类来进行实例化,换言之,必须先实例化外部类再实例化内部类
inner.in();
inner.getInt();
inner.getOut();
}
}
局部内部类
定义在方法中的类就是局部内部类
public class Outer {
public void out(){
System.out.println("这是外部类");
}
public void method(){
class Inner {
public void in(){
System.out.println("这是局部内部类");
}
}
}
}
匿名内部类
public class Test {
public static void main(String[] args) {
//第一种应用案例
new Apple().eat();//不用将实例保存到变量中
}
//第二种应用案例
Banana banana = new Banana() {
@Override
public void turn() {
System.out.println("水果成熟了");
}
};
}
class Apple{
public void eat(){
System.out.println("吃苹果");
}
}
interface Banana{
void turn();
}
异常
错误(Error)
Error类对象由虚拟机生成并且抛出,大多数和编写者执行操作无关
异常(Exception)
RuntimeException异常(运行时异常)是Exception中的一个重要子类
异常处理机制
public class demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("程序出错,变量b不能为0");
}finally{
System.out.println("finally");//善后工作
}
}
}
自定义异常类
public class MyException extends Exception{
private int detail;
public MyException(int a) {
this.detail = a;
}
@Override
public String toString() {
return "MyException{" +
detail +
'}';
}
}
public class Test {
static void test(int a) throws MyException {
if(a>10){
throw new MyException(a);
}
System.out.println("ok");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println("MyException->"+e);
}
}
}
输出结果为:MyException->MyException{11}
先捕获异常再toString方法输出异常信息