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程序设计:分析老师案例—面向抽象编程

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("数学老师正在教数学");
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值