异常
try{
有可能出现异常的语句 ;
}[catch (异常类型 异常对象) {
} ... ]
[finally {
异常的出口
}]
- try 代码块中放的是可能出现异常的代码;
- catch 代码块中放的是出现异常后的处理行为;
- finally 代码块中的代码用于处理善后工作, 永远都会在最后执行;
一般用于资源关闭; - 建议return不要放在 finally 块中,因为可能会抑制try或者catch中的return;
- 其中 catch 和 finally 都可以根据情况选择加或者不加;
运行时异常
编译时异常(受查异常):必须显式进行处理;
Exception是异常类的父类;
自定义异常
- 需要自己定义一个类实现Exception;
- 在抛出的时候需要自己进行throws;
- 编译时期;
内部类
定义在类里面
- 实例内部类
- 静态内部类
- 匿名内部类
- 本地内部类
实例内部类
- 不能有静态的数据成员;
eg:
public class TestDemo3 {
public int data1 = 10;
public static int data2 = 20;
//实例内部类
class InnerClass{
public int data1 = 100;
public static int data2 = 300;//报错——》
}
}
- 如何拿到内部类:外部类类名.内部类类名 = 外部类对象.new 内部类方法();
eg:
class OuterClass {
public int data1 = 10;
public static int data2 = 20;
//实例内部类
class InnerClass{
public int data1 = 100;
//public static int data2 = 300;//报错
public int data2 = 999;
public InnerClass(){
System.out.println("InnerClass()");
}
public void func(){
System.out.println("data2"+data2);
}
}
}
public class TestDemo3{
public static void main(String[] args){
OuterClass o = new OuterClass();
OuterClass.InnerClass in = o.new InnerClass();
in.func();
}
}
- 面试问题:实例内部类是否拥有外层类对象的/是否有额外的开销?–>是;
静态内部类
eg:
class OuterClass{
public int data1 = 10;
public static int data2 = 20;
static class InnerClass{
public int data1 = 999;
public static int data2 = 888;
public InnerClass(){
}
public void func(){
System.out.println("data1:"+data1);
System.out.println("data2:"+data2);
}
}
}
public class TestDemo3{
public static void main(String[] args){
OuterClass.InnerClass in = new OuterClass.InnerClass();
in.func();
}
}
- 不能直接在内部类中访问外部类的静态数据成员,但是可以间接访问;
eg:
class OuterClass{
public int data1 = 10;
public static int data2 = 20;
static class InnerClass{
public int data1 = 999;
public static int data2 = 888;
OuterClass o2 = null;
public InnerClass(){
}
public InnerClass(OuterClass o ){
o2 = o;
}
public void func(){
System.out.println("data1:"+data1);
System.out.println("data2:"+data2);
System.out.println(o2.data1);
}
}
}
public class TestDemo3{
public static void main(String[] args){
OuterClass.InnerClass in = new OuterClass.InnerClass();
in.func();
}
}
匿名内部类
eg:
//匿名内部类
class Mythread{
public void func(){
System.out.println("hhh");
}
}
public class TestDemo3{
public static void main(String[] args){
new Mythread(){
@Override
public void func(){
System.out.println("hello");
}
}.func();
}
}
本地内部类
来源:CSDN
作者:嘿小程序员
链接:https://blog.csdn.net/qq_41649694/article/details/104381166