该文章是分享对于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外部类和异样的常识分享,感激大家观看,也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。
若内容对小伙伴有帮忙,帮忙点个赞反对一下哦~ 你们的反对就是我创作的能源~