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

package com.Example1;

public class Example7_1 {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        RedCowForm form = new RedCowForm("jjf");
        form.showMessage();
        form.cow.speak();

}

}

class RedCowForm {
    static String formName;
    RedCow cow;

RedCowForm() {

}

RedCowForm(String s) {
        cow = new RedCow(12, 12, 12);
        formName = s;
    }

public void showMessage() {
        cow.speak();
    }

class RedCow {
        String cowName = "Red";
        int height, weight, price;

RedCow(int h, int w, int p) {
            this.height = h;
            this.weight = w;
            this.price = p;
        }

void speak() {
            System.out.println("****" + cowName + "###" + height + "###" + formName + "" + weight);
        }
    }
}

2、匿名类的概念

匿名类可以继承父类的方法也可以重写父类的方法,使用匿名可以直接用匿名类创建对象,因此匿名类一定是内部类,匿名类可以访问外嵌类中的成变量和方法,匿名类体重不可以声明static成员变量和static方法。由于匿名类是一个子类,没有类名,匿名类创建对象的时候要直直接使用父类的构造方法。

package com.Example1;

public class Example7_3 {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        ShowBoad board = new ShowBoad();
        board.showMessage(new outputEnglish());
        board.showMessage(new OutputAlphabet() {
            public void output() {
                for (char c = 'a'; c < 'w'; c++)
                    System.out.printf("%3c", c);
            }
        });

}

}

abstract class OutputAlphabet {
    public abstract void output();
}

class outputEnglish extends OutputAlphabet {

@Override
    public void output() {
        for (char c = 'a'; c < 'z'; c++) {
            System.out.printf("%3c", c);
        }

}

}

class ShowBoad {
    void showMessage(OutputAlphabet show) {
        show.output();
    }
}
4、和接口有关的匿名类

package com.Example1;

interface SpeakHelloMan {
    void speak();
}

class HelloMeachine {
    public void turnOn(SpeakHelloMan hello) {
        hello.speak();
    }
}

public class Example7_7 {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        HelloMeachine machine = new HelloMeachine();
        machine.turnOn(new SpeakHelloMan() {
            public void speak() {
                System.out.println("hello you are welcome");
            }
        });
        machine.turnOn(new SpeakHelloMan() {
            public void speak() {
                System.out.println("欢迎光临");
            }
        });

}

}

5、异常类的概念

异常类处理会改变程序的控制流程,让程序有机对错误做出处理,java使用throw关键字抛出一个Exception子类的实例表示异常发生。使用try -catch语句操作异常语句

package com.Example1;

public class Example7_4 {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n = 0, m = 0, t = 100;
        try {
            m = Integer.parseInt("232342");
            n = Integer.parseInt("787676");
            t = Integer.parseInt("2402321");
        } catch (NumberFormatException e) {
            System.out.println("发生异常" + e.getMessage());
        }
        System.out.println(m + "  " + n + "   " + t);
        try {
            System.out.println("抛出异常");
            throw new java.io.IOException("异常");
        } catch (java.io.IOException e) {
            System.out.println("eccor error" + e.getMessage());
        }

}

}
6、自定义异常类的概念

在写程序的时候可以扩展Exception类定义自己的异常类,一个方法在声明的同时可以使用关键字throw抛出干个异常,并在方法的方法体中给出异常的操作,即用响应的异常类创建对象,并使用throw关键字抛出异常的对象,导致该异常结束。

package com.Example1;

public class Example7_5 {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Bank bank = new Bank();
        try {
            bank.income(200, -22);
            bank.income(452, -222);
            bank.income(200, -600);
            System.out.println(bank.getMoney());
            bank.income(9999, -666);
        } catch (BankException e) {
            System.out.println("出现问题");
            System.out.println(e.warnMess());
        }

}

}

class BankException extends Exception {
    String message;

public BankException(int m, int n) {
        message = "in" + m + "out" + n;
    }

public String warnMess() {
        return message;
    }
}

class Bank {
    private int money;

public void income(int in, int out) throws BankException {
        if (in <= 0 || out >= 0 || in + out <= 0) {
            throw new BankException(in, out);
        }
        int netIncome = in + out;
        System.out.println(" " + netIncome);
    }

public int getMoney() {
        return money;
    }

}

7、断言处理概念

断言语句:程序不准备通过捕获异常来处理错误,直接暂停。 assert BooleanException:message

java内部类和异常类的概念的更多相关文章

  1. Java基础知识笔记第七章:内部类和异常类

    内部类 /* *Java支持在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外嵌类 */ 重要关系: /* *1.内部类的外嵌类在内部类中仍然有效,内部类的方法也可以外嵌类的方 ...

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

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

  3. java内部类以及匿名类

    内部类 一个类内部定义的类称为内部类. 内部类允许把逻辑相关的类组织在一起,并控制内部代码的可视性. 内部类与外部类的结构层次如下. 顶层类:最外层的类 外部类:内部类所在的类 内部类:类内部定义的类 ...

  4. 一文简述JAVA内部类和异常

    内部类和异常 内部类 在一个类的内部定义的一个类,例如,A类中定义了一个B类,则B类相对于A类就是内部类,而A类相对于B类就是外部类 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类 pub ...

  5. java中的异常类

    Java中的异常: 1. Throwable是所有异常的根,java.lang.Throwable Throwable包含了错误(Error)和异常(Exception),Exception又包含了运 ...

  6. Java学习(异常类)

    一.什么是异常: 异常就是在运行时产生的问题.通常用Exception描述. 在java中,把异常封装成了一个类,当出现问题时,就会创建异常类对象并抛出异常相关的信息(如详细信息,名称以及异常所处的位 ...

  7. Java学习(异常类练习题)

     练习题: 1.计算圆的面积,半径不能为零和负数 package com.oracle.Demo01; public class Demo02 { // 写一个计算圆的面积的方法,传一个半径,返回面积 ...

  8. JAVA中常见异常类

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  9. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型. 从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是 ...

随机推荐

  1. windows平台下利用Nginx做负载均衡

    1.下载nginx(http://nginx.org/en/download.html)安装包,解压,并使用cmd命令转到nginx.exe所在的目录 2.执行cmd命令start nginx启动ng ...

  2. NPOI 列宽自适应 代码示例

    //列宽自适应,只对英文和数字有效 for (int i = 0; i <= maxColumn; i++) { sheet.AutoSizeColumn(i); } //获取当前列的宽度,然后 ...

  3. oracle存储过程---创建存储过程语句

    一.创建存储过程语句 语法:  CREATE OR REPLACE PROCEDURE testname( argument1 TYPE1, ....  ) AS BEGIN ...... END  ...

  4. dom解析xml随笔

    1.dom解析jar包准备: dom解析需用到dom4j的jar包,比如我在项目中用到的的是dom4j-1.6.1jar,因为项目用的是MAVEN,所以可直接到maven中央库去搜索相关pom坐标配置 ...

  5. 解决Ubuntu 18.04中文输入法的问题,安装搜狗拼音

    首先安装fcitx一.检测是否安装fcitx首先检测是否有fcitx,因为搜狗拼音依赖fcitx> fcitx提示:程序“fcitx”尚未安装. 您可以使用以下命令安装:> sudo ap ...

  6. SQL Server - GO

    GO GO是批处理的标志,是一条或多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划. GO语句把程序分成一个个代码块,即使一个代码块执行错误,它后面的代码 ...

  7. SpringCloud Netflix Eureka(服务注册/发现)

    ⒈Eureka是什么? Eureka是Netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来 ...

  8. 20165231 2017-2018-2《Java程序设计》课程总结

    每周作业链接汇总 预备作业一:我期待的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:linux安装及学习 第一周作业:初识JAVA,注册码云并配置Git 第二周作业:JAVA基本语法,标 ...

  9. Samples topic

    Rendering: http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html http://www.scratchapixel.c ...

  10. 红迅JSAAS敏捷开发平台

    红迅JSAAS敏捷开发平台:    http://www.redxun.cn/