java 匿名 异常_JAVA类(内部类、匿名内部类、异常、自定义异常)

内部类

package AA;public class类 {int de=123;

StringBuffer dee=newStringBuffer();public class成员内部类{public voidff() {

System.out.println("这是成员内部类方法");

}

}/*1.可以访问外部类所有的成员,包括被声明为私有(private)的;

2.可以使用任何访问权限修饰符,包括protected和private;*/

public voidff1() {int de1=12;class局部内部类{public voidff() {

System.out.println("局部内部类方法");

System.out.println(de);

}

}new局部内部类().ff();

}/*1.不允许使用任何访问权限修饰符;

2.创建局部内部类的对象的语法,必须在声明局部内部类之后;调用只能在该方法里

3.可以访问外部类所有的成员,包括被声明为私有(private)的;*/

private static class静态内部类{public voidff() {

System.out.println("这是静态内部类方法");

}

}/*1.只能访问static成员

2.可以使用任何访问权限修饰符,包括protected和private;

3.可以在其它类中直接创建静态内部类的对象,语法格式为:*/

public voiddy() {new 成员内部类().ff();//调用成员内部类方法

//调用方法二:   类.成员内部类 de=new 类.成员内部类();

new 类().ff1();//调用局部内部类方法

new 静态内部类().ff();//调用静态内部类方法

//调用方法二:类.静态内部类  de=new 静态内部类();

}public static voidmain(String[] args) {new类().dy();

}

}

参考:

匿名内部类

参考:

抽象类

异常

先来点基础的:

public classxin {public static voidmain(String[] args) {try{

System.out.println("hhhhh");int de[]=new int[10];

de[10]=12;

}catch(ArrayIndexOutOfBoundsException fr){

System.out.println("chucuo");

}

}

}

上面代码解释了:一个基本异常的基本格式,try{  } ......catch(){   }

try。。。catch:不需要抛出异常

自定义异常:

package AA;

import java.util.Scanner;class de1 extends Exception{//首先类要继承Exception(就是异常类)

publicde1(String fr) {

super(fr);

}

}public classde{public static int fg(int a,int b) throws de1{//声明方法并且抛出异常(throws de1)

Scanner de1=new Scanner(System.in);

System.out.println("请输入数值1");

a=de1.nextInt();

System.out.println("请输入数值2");

b=de1.nextInt();if(a<0||b<0) {throw new de1("负数错误");//抛出异常

}if(a>100||b>100) {throw new de1("数大于100错误");

}return a+b;

}public static voiddayin() {

System.out.println("异常啦");

}public static voidmain(String[] args) {try{

fg(3123,3123); //调用上面的方法,下面并且打印出结果,打印方法是打印方法的返回值//这里的数字没多大用处,主要是不出错//根据上面的方法给出的变量所以这里必须要加//但是上面有输入流,就直接将这个覆盖了

System.out.println(fg(3123,3123));

}catch(de1 e) {//这个是try后面必须接的//括号里面的是异常类型,e是结果

dayin();

System.out.println(e);

}

}

}//1,程序通过try走,并且执行fg方法//2,当用户输入数值时,会进行判断,如果不符合就会抛出异常(这里是抛在de1类里面,关键字:throw new 类名)//3,try执行已经异常了,所以将会执行catch,而catch可以有多个,那个catch则会判断try异常属于哪一类型的异常//4,判断完后,将会执行catch里面的语句,用来提示用户//4的注意:上面的判断下面什么(负数错误)(da数错误),其实是de1类的构造string方法,可以去掉,直接在catch里面加提语句都一样//列如下面:去掉构造,在catch里面加已是语句

package AA;

import java.util.Scanner;classde1 extends Exception{

}public classde{static int fg(int a,int b) throws de1{//声明抛出异常(throws de1)

Scanner de1=new Scanner(System.in);

System.out.println("请输入数值1");

a=de1.nextInt();

System.out.println("请输入数值2");

b=de1.nextInt();if(a<0||b<0) {throw new de1();//抛出异常,说白了就是

}if(a>100||b>100) {throw newde1();

}return a+b;

}static voiddayin() {

System.out.println("异常啦");

}public static voidmain(String[] args) {try{

fg(3123,3123); //调用上面的方法,下面并且打印出结果,打印方法是打印方法的返回值//这里的数字没多大用处,主要是不出错//根据上面的方法给出的变量所以这里必须要加//但是上面有输入流,就直接将这个覆盖了

System.out.println(fg(3123,3123));

}catch(de1 e) {//这个是try后面必须接的//括号里面的是异常类型,e是结果

dayin();

System.out.println("有错误哟!");

System.out.println(e);

}

}

}

结论:

1,首先一个自定义异常的要有一个拋回来的异常类,这个类用于其它类执行的方法时抛出来的异常,就抛在这个类里面

注意:这个类必须是继承Exception(推荐)和RuntimeException

2,然后就可以在‘其他类’里面随意加方法了,

注意:需要抛出异常就必须在方法名后面加throws 类名,格式:方法名 throws 类名(被抛异常类)

3,声明好方法后,就可以了

注意:这里番外哈,1,如果里面有if判断语句,可以在判断下方在加个'异常抛出',格式:throw new 类名(被抛异常类)

2,注意:throw:是放在方法体里面的

throws:是放在方法体上面的(就是方法名上面)

4,接下来就是用try.....catch了。try里面放异常的方法(说白了就是在try里面执行方法体)

catch就是异常类型了,自定义异常,那‘异常类型’肯定就是‘被抛异常类名’

catch语句格式:catch(类名 返回值(结果)),结果随意

这个语句一般放在开始执行程序是调用方法那里

下面再举一个例子:判断输出输入的值是否是负数

package hhh;public classhh extends Exception{static inta,c;static int b=211;public static void de(inta1) throws hh{if(a1<0){throw newhh();

}

a=b*a1*21;

System.out.println("输出:"+a);

}public static voidmain(String []args){try{

de(-6);

}catch(hh re){

System.out.println("负数无效");

}

}

}

执行结果:抛出异常,执行catch语句

例子二

package AA;

import java.util.InputMismatchException;

import java.util.Scanner;public class异常 extends Exception{

Scanner de=new Scanner(System.in);public voidks()throws 异常 {try{for(;;) {

System.out.println("请输入数字");int dee=de.nextInt();if(dee<0)throw new异常();

System.out.println("正确");

}

}catch(异常 e) {

System.out.println("对不起你输入的有误!!");new异常().ks();

}catch(InputMismatchException ee) {

System.out.println("数字过大或者非数字");new异常().ks();

}

}public static voidmain(String[] args) throws 异常 {new异常().ks();

}

}/*编写程序:判断用户输入的是否为负数,否则异常*/

执行结果:

fa86cb912e721c483ef93a81d404ca45.png

(内部类、匿名类、匿名内部类、抽象类、异常、终态)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,匿名内部类是一种特殊的内部类,它没有显式的名。匿名内部类通常用于创建一个只需要使用一次的的实例。匿名内部类可以通过继承一个或实现一个接口来实现。 比较匿名内部类的方式有两种。第一种是通过继承一个来创建匿名内部类。在这种情况下,匿名内部类会继承指定的所有方法和属性,并可以重写其中的方法。通过重写方法,可以实现自定义的行为。 第二种方式是通过实现一个接口来创建匿名内部类。在这种情况下,匿名内部类会实现指定接口的所有方法,并可以在方法中定义自己的逻辑。 例如,可以使用匿名内部类来实现一个接口的方法,如下所示: ``` Interface01 interface01 = new Interface01() { @Override public void show() { System.out.println("使用了匿名内部类"); } }; interface01.show(); ``` 在这个例子中,我们创建了一个匿名内部类,实现了Interface01接口的show()方法,并在方法中输出了一条信息。 需要注意的是,匿名内部类在编译期间会生成一个以$编号结尾的class文件,即它被识别为一个真实的。在编译前(java文件)时,它是以匿名的形态存在的。\[2\]\[3\] #### 引用[.reference_title] - *1* [【java笔记】Java中的匿名类匿名内部类](https://blog.csdn.net/zuzhiang/article/details/118016420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java基础——匿名内部类](https://blog.csdn.net/qq_52519008/article/details/127154696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值