共计 2746 个字符,预计需要花费 7 分钟才能阅读完成。
该文章是分享对于 Java 外部类和异样方面的常识,是我在学习过程中的笔记以及总结,示例+代码为大家送上。
上面开始咱们明天的分享:
外部类和异样
外部类
在一个类的外部定义的一个类,例如,A 类中定义了一个 B 类,则 B 类绝对于 A 类就是外部类,而 A 类绝对于 B 类就是外部类
成员外部类
动态外部类
部分外部类
匿名外部类
成员外部类
public class outer {
private int ID;
public void out(){System.out.println("外部类办法");
}
public class inner{public void in(){System.out.println("外部类办法");
}
public void getId(){System.out.println(ID); // 外部类能够取得外部类的公有属性,然而外部类应用外部类要借助外部类的对象
}
}
}
这就是一个类中定义一个外部类,能够通过实例化这个外部类来实例化外部类
outer o = new outer();
outer.inner o2 = o.new inner();
o2.in();
o2.getId();
动态外部类
上述 inner 类的定义中间接改为 public static inner 即为动态外部类,动态外部类无法访问内部非动态属性(static 会先加载)一个 java 类中能够有多个 class 类,然而这个 public class 之外不能再写 public class
public void method(){
class inner1{
// 部分外部类
public void in(){}
}
}
匿名外部类(甚至匿名外部接口)
public class internalClass {
public static void main(String[] args) {outer o = new outer();
outer.inner o2 = o.new inner();
o2.in();
new Apple().show();
UserService use = new UserService(){
@Override
public void hello(){System.out.println("hello");
}
};
}
}
class Apple{
public void show(){System.out.println("1");
}
}
interface UserService{
void hello();
}
这些都是十分见的用法,记录下来,这样用不便在于能够间接调用匿名外部类的办法
异样
异样和中断等具体将会写在”操作系统局部“
个别须要把握以下三种类型的异样:
查看型异样:最具代表性的是用户谬误或问题引起的异样,例如关上一个不存在的文件等
运行时异样:该类异样可能会在编译时被疏忽
谬误 ERROR:谬误不是异样,是脱离程序员管制的问题,例如:栈溢出等等
java.lang.Throwable 为所有异样的超类
异样总的分为两大类:谬误 Error 和异样 Exception
Error 类对象由 JVM 生成并抛出,大多数谬误与代码编写者执行的操作无关。当运行谬误时,JVM 不再有持续操作所须要的内存资源,将会产生 OutOfMemoryError,这些异样产生时,JVM 个别会抉择终止线程;
Error 是程序无法控制和解决的,而 Exception 通常状况下是能够被程序处理的
捕捉和抛出异样
简略地说,异样总是先被抛出,后被捕获的。
异样解决 5 个关键字:try, catch, finally, throw, throws
int a = 1;
int b = 0;
//try 监控区域
try{
System.out.println(a/b);
}catch (ArithmeticException e){// 捕捉异样,若栈溢出的话,该类异样捕捉不到,类型不同
System.out.println("产生异样,变量 b 不能为 0");
}finally {// 个别解决善后工作
System.exit(0);
}
//finally 能够不要,然而在 IO 中,有些资源须要敞开,个别能够放在 finally 中解决
以上为捕捉异样的一个例子,若 ArithmeticException e 改为 Throwable e,则均可被捕捉。可写多个 catch,相当于多个 if 进行判断,catch 中所写的异样类型要从小到大来捕捉,否则会报错
选中 sout(a/b); IDEA 中 ctrl+alt+T 可主动补写 try catch finally 等
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace(); // 打印谬误的栈信息
} finally {
}
以上为 IDEA 主动补写局部
被动抛出异样,用到 throw,个别在办法中应用
public static void main(String[] args) {
int a = 1;
int b = 0;
new exceptiondemo2().test(1,0);
}
public void test(int a,int b){
if(b==0){throw new ArithmeticException();
}
}
办法上被动抛出异样,则用 throws
public void test(int a,int b)throws ArithmeticException{
}
自定义异样类可写一个类继承于 Exception,可重写打印信息办法.toString
public void doA(int a) throws Exception1,Exception3{……}
throws E1,E2,E3 只是通知程序这个办法可能会抛出这些异样,办法的调用者可能要解决这些异样,而这些异样 E1,E2,E3 可能是该办法产生的。throws 只是告知该办法可能会产生的异样,而 throw 则会在具体语句抛出异样
void doA(int a) throws Exception1,Exception2,Exception3{
try{......}catch(Exception1 e){throw e;}catch(Exception2 e){System.out.println("出错了!");
}
if(a!=b)
throw new Exception3("自定义异样");
}
该段共可能呈现 3 种异样,E1 呈现时,先 catch 后 throw,而 E2 呈现时只进行了捕捉,后续没有抛出 E2,if 为自定义的判断。
throws 示意出现异常的一种可能性,并不一定会产生这些异样;throw 则是抛出了异样,执行 throw 则肯定抛出了某种异样。
以上仅为外部类和异样的常识总结。
以上就是明天 Java 外部类和异样的常识分享,感激大家观看,也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。
若内容对小伙伴有帮忙,帮忙点个赞反对一下哦~ 你们的反对就是我创作的能源~