内部类和异常

内部类

在一个类的内部定义的一个类,例如,A类中定义了一个B类,则B类相对于A类就是内部类,而A类相对于B类就是外部类

  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

成员内部类

  1. public class outer {
  2. private int ID;
  3. public void out(){
  4. System.out.println("外部类方法");
  5. }
  6. public class inner{
  7. public void in(){
  8. System.out.println("内部类方法");
  9. }
  10. public void getId(){
  11. System.out.println(ID); //内部类可以获得外部类的私有属性,但是外部类使用内部类要借助内部类的对象
  12. }
  13. }
  14. }

这就是一个类中定义一个内部类,可以通过实例化这个外部类来实例化内部类

  1. outer o = new outer();
  2. outer.inner o2 = o.new inner();
  3. o2.in();
  4. o2.getId();

静态内部类

上述inner类的定义中直接改为 public static inner即为静态内部类,静态内部类无法访问外部非静态属性(static会先加载)

一个java类中可以有多个class类,但是这个public class之外不能再写public class

  1. public void method(){
  2. class inner1{
  3. //局部内部类
  4. public void in(){
  5. }
  6. }
  7. }

匿名内部类(甚至匿名内部接口)

  1. public class internalClass {
  2. public static void main(String[] args) {
  3. outer o = new outer();
  4. outer.inner o2 = o.new inner();
  5. o2.in();
  6. new Apple().show();
  7. UserService use = new UserService(){
  8. @Override
  9. public void hello(){
  10. System.out.println("hello");
  11. }
  12. };
  13. }
  14. }
  15. class Apple{
  16. public void show(){
  17. System.out.println("1");
  18. }
  19. }
  20. interface UserService{
  21. void hello();
  22. }

这些都是非常见的用法,记录下来,这样用方便在于可以直接调用匿名内部类的方法

异常

异常和中断等具体将会写在”操作系统部分“

一般需要掌握以下三种类型的异常:

  • 检查型异常:最具代表性的是用户错误或问题引起的异常,例如打开一个不存在的文件等
  • 运行时异常:该类异常可能会在编译时被忽略
  • 错误ERROR:错误不是异常,是脱离程序员控制的问题,例如:栈溢出等等

java.lang.Throwable为所有异常的超类

异常总的分为两大类:错误Error和异常Exception

Error类对象由JVM生成并抛出,大多数错误与代码编写者执行的操作无关。当运行错误时,JVM不再有继续操作所需要的内存资源,将会发生OutOfMemoryError,这些异常发生时,JVM一般会选择终止线程;

Error是程序无法控制和处理的,而Exception通常情况下是可以被程序处理的

捕获和抛出异常

简单地说,异常总是先被抛出,后被捕捉的。

异常处理5个关键字:try, catch, finally, throw, throws

  1. int a = 1;
  2. int b = 0;
  3. //try 监控区域
  4. try{
  5. System.out.println(a/b);
  6. }catch (ArithmeticException e ){ //捕获异常,若栈溢出的话,该类异常捕获不到,类型不同
  7. System.out.println("发生异常,变量b不能为0");
  8. }finally { //一般处理善后工作
  9. System.exit(0);
  10. }
  11. //finally可以不要,但是在IO中,有些资源需要关闭,一般可以放在finally中处理

以上为捕获异常的一个例子,若ArithmeticException e改为Throwable e,则均可被捕获。可写多个catch,相当于多个if进行判断,catch中所写的异常类型要从小到大来捕获,否则会报错

选中sout(a/b); IDEA中 ctrl+alt+T 可自动补写 try catch finally等

  1. try {
  2. System.out.println(a/b);
  3. } catch (Exception e) {
  4. e.printStackTrace(); //打印错误的栈信息
  5. } finally {
  6. }

以上为IDEA自动补写部分

主动抛出异常,用到throw,一般在方法中使用

  1. public static void main(String[] args) {
  2. int a = 1;
  3. int b = 0;
  4. new exceptiondemo2().test(1,0);
  5. }
  6. public void test(int a,int b){
  7. if(b==0){
  8. throw new ArithmeticException();
  9. }
  10. }

方法上主动抛出异常,则用throws

  1. public void test(int a,int b)throws ArithmeticException{
  2. }

自定义异常类可写一个类继承于Exception,可重写打印信息方法.toString

  1. public void doA(int a) throws Exception1,Exception3{......}

throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该方法产生的。throws只是告知该方法可能会产生的异常,而throw则会在具体语句抛出异常

  1. void doA(int a) throws Exception1,Exception2,Exception3{
  2. try{
  3. ......
  4. }catch(Exception1 e){
  5. throw e;
  6. }catch(Exception2 e){
  7. System.out.println("出错了!");
  8. }
  9. if(a!=b)
  10. throw new Exception3("自定义异常");
  11. }

该段共可能出现3种异常,E1出现时,先catch后throw,而E2出现时只进行了捕获,后续没有抛出E2,if为自定义的判断。

throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。

以上仅为内部类和异常的知识总结,不够详细,未涉及的部分可能会在未来补充。

一文简述JAVA内部类和异常的更多相关文章

  1. java内部类和异常类的概念

    1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...

  2. 一文简述Java IO

    Java IO 本文记录了在学习Java IO过程中的知识点,用于复习和快速查阅,不够详细的部分可能会在后续补充. 什么是流 流:内存与存储设备(外存)之间传输数据的通道 IO:输入流输出流(如rea ...

  3. 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing ...

  4. java.util.ConcurrentModificationException异常分析

    Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下 ...

  5. Core Java 总结(异常类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由 ...

  6. 关于java中的异常问题 1

    1.首先参考一下关于java异常处理方面的知识 查看博客http://lavasoft.blog.51cto.com/62575/18920/ 这里介绍的很好,下面从中学习到一些东西,摘抄如下: 1. ...

  7. Java基础之异常

    1.异常的概念 异常:程序在运行时出现的不正常情况,也可以说是出现的问题: Java中的异常:出现的不正常的问题也是一类事物,这类事物有一些共性的东西,比如有名称,有产生的原因等,将这些共性的部分抽取 ...

  8. Java学习笔记--异常描述

    异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...

  9. java中的异常类型以及区别????

    一.引言 根据JDK的文档我们能够找到异常所在的包:java.lang.Throwable中,Throwable是所有异常类的根类,error是错误,在java.lang.error中,而Except ...

随机推荐

  1. 法兰西金融专访SPC空投重磅来袭

    最近,法兰西金融日报联合德意志财经等知名金融媒体就SPC这一话题进行了专访. 法兰西金融日报记者德维尔斯问到,之前2020年的BGV项目等市场反响异常火爆,2021年已经来到,NGK目前有何新的大动作 ...

  2. NGK与Captain technology合作 推出贷款体验用于简化汽车经销商流程

    据外媒报导,近日,NGK.IO正在与Captain technology恰谈合作事宜,以简化购车体验,包括简化购车流程.NGK的CTO Stephen Litan表示:"NGK宣布与Capt ...

  3. JVM 揭秘:一个 class 文件的前世今生

    本文转载自JVM 揭秘:一个 class 文件的前世今生 导语 引子:我们都知道,要运行一个包含 main 方法的 java 文件,首先要将其编译成 class 文件,然后加载 JVM 中,就可以运行 ...

  4. InnoDB -- 行记录格式

    本文转载自InnoDB -- 行记录格式 分类 Named File Format InnoDB早期的文件格式(页格式)为Antelope,可以定义两种行记录格式,分别是Compact和Redunda ...

  5. JS数字每三位加逗号的最简单方法

    <script> function thousands(num){ var str = num.toString(); var reg = str.indexOf("." ...

  6. [计算机图形学]视图变换:MVP变换、视口变换

    目录 一.MVP变换 1. 模型变换 1.1 缩放矩阵 1.2 旋转矩阵 1.3 平移矩阵 2. 视角变换 3. 投影变换 二.Viewport变换 一.MVP变换 MVP变换是模型变换(M).视角变 ...

  7. 一文读懂什么是kubernetes?

    kubernetes概述 kubernetes面世不过短短几年时间,kuberenetes已经成为容器编排领域事实上的标准,无论是公有云,私有云或混合云,kubernetes都将作为一个为任何应用,任 ...

  8. MySQL学习笔记(六)

    好耶,七天课程的最后一天!我当然还没精通了,,,之后可能是多练习题目然后再学学其他的东西吧.mysql新的知识点也会在后面补充的. 一.杂七杂八补充 1. 当多个函数共用同样的参数时,可以转变成类进行 ...

  9. 高级FTP

      一.作业需求 1. 用户加密认证(已完成) 2. 多用户同时登陆(已完成) 3. 每个用户有自己的家目录且只能访问自己的家目录(已完成) 4. 对用户进行磁盘配额.不同用户配额可不同(已完成) 5 ...

  10. (三)String、StringBuilder、StringBuffer在字符串操作中的性能差异浅析

    参考资料:https://www.iteye.com/blog/hank4ever-581463 <Core Java Volume I-Fundamentals>原书第十版 <Ja ...