008异常 访问控制符 抽象类

1 异常
1.1概述
异常是指封装错误信息的对象
组成结构:类型 提示 行号
Tips :Ctrl +Shift + T:在eclipse当中查找你想要找到的类
1.2异常的继承结构
Throwable:顶级父类
—Error:顶级父类
—Exception:系统错误,无法修复
—RunTimeException:可以修复的错误
–classCastException
–classNotFoundException

1.3异常处理
当程序遇到了异常,通常有两种处理方式:捕获或者向上抛出
当一个方法抛出异常,调用位置可以不做处理继续向上阿婆出,也可以捕获处理异常
1)捕获方式
try{
需要捕获的代码
} catch(异常类型 异常名){
处理方案
}
2)抛出方式:
在会发生异常的方法上添加代码:throws异常类型
例如:public static void main(String[]args)throws Exception

1.4异常测试

package day08;

import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionTest {
    
    
	public static void main(String[] args) throws Exception {
    
    
		method1();
		method2();
	}

	public static void method2() throws Exception {
    
    
		System.out.println("请输入第一个您要计算的数字");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入第二个您要计算的数字");
		int b = new Scanner(System.in).nextInt();
		System.out.println(a / b);
	}

	public static void method1() {
    
    
		try {
    
    
			System.out.println("请输入第一个您要计算的数字");
			int a = new Scanner(System.in).nextInt();
			System.out.println("请输入第二个您要计算的数字");
			int b = new Scanner(System.in).nextInt();
			System.out.println(a / b);// ArithmeticException算数错误,InputMismatchException输入类型异常

		} catch (ArithmeticException e) {
    
    
			System.out.println("分母不能为0请重新输入");
		} catch (InputMismatchException e) {
    
    
			System.out.println("输入的类型不正确请重新输入");
		} catch (Exception e) {
    
    
			System.out.println("请输入正确的整数");
		}
	}
}

总结:

  1. try()里面放的是可能发生异常的代码
  2. 如果发生异常被捕获,就被匹配对应的解决方案
  3. 由于程序种可能存在多种异常,所以catch可以配合多次使用
  4. 如果还有其他的异常情况,用Exception匹配捕获

访问控制符
用来控制符,或者类中的成员的访问范围.
在这里插入图片描述Tips:default是表示不写修饰符,默认,如果写default单词来修饰会报错

3.抽象类
3.1抽象类
Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法.
Java中可以定义被abstract关机簪子修饰的类,被abstract关机簪子修饰的类叫做抽象类
如果一个类含有抽象方法,那么她一定是一个抽象类
抽象类中的方法交给子类来完成

3.2抽象方法的格式
权限修饰符 abstract 返回值类型 方法名 (参数列表);

3.3特点

  1. abstract可以修饰方法或者类;
  2. 被abstract修饰的类叫做抽象类,被abstract修饰的方法叫做抽象方法
  3. 抽象类中可以没有抽象方法
  4. 如果类中有抽象方法,那么该类必须定义为一个抽象类
  5. 子类如果继承了抽象类之后,要么还是一个抽象类,要么就把所有抽象方法都重写
  6. 抽象方法用于多态中
  7. 抽象类不可以被实例化
package day08;

public class AbstractDemo {
    
    
	public static void main(String[] args) {
    
    
		Animal3 pig = new Pig();
		pig.eat();
		pig.fly();
//		Animal dog = new Dog();抽象子类不能实例化
		// Cannot instantiate the type Dog
	}
}

abstract class Animal3 {
    
    
	public void eat() {
    
    
		System.out.println("吃好吃的就可以");
	}

	public void play() {
    
    
		System.out.println("玩好玩的就可以");
	}

	public abstract void fly();

	public abstract void fly2();

}

class Pig extends Animal3 {
    
    

	@Override
	public void fly() {
    
    
		System.out.println("小猪飞了");
	}

	@Override
	public void fly2() {
    
    
		System.out.println("小猪又飞了");
	}

}

abstract class Dog3 extends Animal3 {
    
    

}

3.5练习3:抽象类构造函数测试
抽象类中的构造函数通常在子类实例化时候使用

package cn.oop;

public class Test3_Abstarcr2 {
    
    
	public static void main(String[] args) {
    
    
		Animal3 a = new Dog3();
		// Animal3 a2 = new Animal3();抽象类不能实例化创建对象,会报错
		// Cannot instantiate the type Animal3
	}
}

abstract class Animal3 {
    
    
	public Animal3() {
    
    
		System.out.println("Animals...构造方法");
	}
}

class Dog3 extends Animal3 {
    
    
	public Dog3() {
    
    
		super();
		System.out.println("Dog3...构造方法");
	}
}

3.6练习4:抽象类成员测试

package cn.oop;

/* 本类用于测试抽象类中的成员*/
public class Test4_Abstract {
    
    
	public static void main(String[] args) {
    
    
		new Apple();
	}
}

abstract class Fruit {
    
    
	int sum = 10;// 抽象类中可以有成员变量
	final String name = "banana";// 抽象类中可以有成员常量-但是常量的值不能改变

	public void eat() {
    
    
		System.out.println("吃什么水果都可以");
	}

	public void eat2() {
    
    // 抽象类中可以有普通方法
		System.out.println("eat2...吃什么水果都可以");
	}

	// 抽象类中可以有抽象方法,这个类就必须被声明为抽象类
	abstract public void clean();
	// 如果一个类中都是普通方法,那么这个类为什么还要被申明成为抽象类呢?
	// 因为抽象类不可以创建对象,如果不想让外界创建本类的对象,可以把普通类声明成为一个抽象类
}

class Apple extends Fruit {
    
    

	// 当一个类集成了费父类,父类是一个抽象类时候
	// 子类需要重写父类中的抽象方法,如果不重写,子类自己就要变成一个抽象子类
	public void eat2() {
    
    
		System.out.println("水果中还是苹果好吃~");
	}

	@Override
	public void clean() {
    
    
		System.out.println("苹果要洗洗再吃");
	}

}

4.拓展
4.1程序设计:分析老师案例—面向抽象编程

扫描二维码关注公众号,回复: 12914687 查看本文章
package cn.oop;

public class Test5_Teacher {
    
    
	public static void main(String[] args) {
    
    
		Teacher et = new EnglishTeacher();
		Teacher mt = new EnglishTeacher();
		et.ready();
		et.teach();
		mt.ready();
		mt.teach();
	}
}

abstract class Teacher {
    
    
	public void ready() {
    
    
		System.out.println("老师正在备课");
	}

	abstract public void teach();
}

class EnglishTeacher extends Teacher {
    
    

	@Override
	public void teach() {
    
    
		System.out.println("英语老师正在教英语");
	}
}

class MathTeacher extends Teacher {
    
    

	@Override
	public void teach() {
    
    
		System.out.println("数学老师正在教数学");
	}

}

猜你喜欢

转载自blog.csdn.net/m0_55284524/article/details/115029405