Java--内部类与异常类--学习笔记

文章详细介绍了Java中的内部类,包括其与外嵌类的关系以及示例代码。接着讨论了匿名类的概念和特点,指出匿名类是内部类且可直接创建对象。最后,文章讲解了异常处理,包括try-catch语句的使用和自定义异常类的创建方法。
摘要由CSDN通过智能技术生成

目录

一、内部类

二、匿名类

三、异常类

3.1 try-catch语句

3.2自定义异常类


一、内部类

        Java支持在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外嵌类。

        内部类与外嵌类之间的关系如下:

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

举例:

//RedCowForm.java
public class RedCowForm {
    static String formName;
    RedCow cow;  //内部类声明对象

    RedCowForm(){
    }

     RedCowForm(String s) {
         cow =new RedCow(150,120,5000);
         formName=s;
    }
    public void showCowMess(){
        cow.speak();
    }

    class RedCow {  //内部类的声明
        String cowName="红牛";
        int height,weight,price;
        RedCow(int h,int w,int p){
            height=h;
            weight=w;
            price=p;
        }
        void speak(){
            System.out.println("偶是"+cowName+",身高:" +height+ "cm 体重:"+ weight+"kg,生活在"+formName);
        }
    }

}
//test.java
public class test {
    public static void main(String[] args) {
        RedCowForm redCowForm = new RedCowForm("红牛牛场");
        redCowForm.showCowMess();
        redCowForm.cow.speak();
    }
}

运行截图:

内部类也可以被修饰为static内部类,这样程序就可以在其他类中使用static内部类创建对象,但是static内部类不能操作外嵌类中的实例成员变量。

 将前一个例子进行更改:

// RedCowForm.java
public class RedCowForm {
    static String formName;
    RedCow cow;  //内部类声明对象

    RedCowForm(){
    }

     RedCowForm(String s) {
         cow =new RedCow(150,120,5000);
         formName=s;
    }
    public void showCowMess(){
        cow.speak();
    }

    static class RedCow {  //内部类的声明
        String cowName="红牛";
        int height,weight,price;
        RedCow(int h,int w,int p){
            height=h;
            weight=w;
            price=p;
        }
        void speak(){
            System.out.println("偶是"+cowName+",身高:" +height+ "cm 体重:"+ weight+"kg,生活在"+formName);
        }
}

}

//test.java
public class test {
    public static void main(String[] args) {
        RedCowForm redCowForm = new RedCowForm("红牛牛场");
        redCowForm.showCowMess();
        redCowForm.cow.speak();

        System.out.println("=====================");

        RedCowForm.RedCow redCow = new RedCowForm.RedCow(100, 110, 8000);
        redCow.speak();
    }
}

运行截图:

注意点:非内部类不可以是static类。

二、匿名类

        Java允许直接使用一个类的子类的类体创建一个子类对象,也就是说,创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称为匿名类。可以直接用匿名类创建一个对象。

匿名类有如下特点。

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

尽管匿名类创建的对象没有经过类声明步骤,但匿名对象的引用可以传递给一个匹配的参数。

三、异常类

        使用throw关键字抛出一个Exception子类的实例表示异常发生。

①在Exception分支中有一个重要的子类RuntimeException(运行时异常)

  • ArrayIndexOutOfBoundsException(数组下标越界)
  • NullPointException(空指针异常)
  • ArithmeticException(算数异常)
  • MissingResourceException(丢失资源)
  • ClassNotFoundException(找不到类)等异常

3.1 try-catch语句

        Java 使用 try-catch 语句来处理异常,将可能出现的异常操作放在try-catch 语句的try 部分,当 try 部分中的某个方法调用发生异常后,try 部分将立刻结束执行,转向执行相应的 catch 部分。

语句格式:

try{
    包含可能发生异常的语句
}
catch(ExceptionSubClass1 e){
...
}
catch(ExceptionSubClass2 e){
...
}

 各个catch参数中的异常类都是Exception的某个子类,表示try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。

快捷键:ctrl+alt+t

3.2自定义异常类

        在编写程序时可以扩展 Exception 类定义自己的异常类,然后根据程序的需要来规定哪些方法产生这样的异常。一个方法在声明时可以使用throws 关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用 throw关键字抛出该异常对象,导致该方法结束执行。程序必须在try-catch 块语句中调用可能发生异常的方法,其中 catch 的作用就是捕获 throw 关键字拋出的异常对象。
注意:throw 是Java 的关键宇,该关键宇的作用就是抛出异常。throw 和throws 是两个不同的关键宇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿喵酱ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值