当前位置 : 主页 > 编程语言 > java >

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用

来源:互联网 收集:自由互联 发布时间:2022-07-13
5.7.2 捕获异常 问:为什么要捕获异常? 答:因为捕获异常可以对异常情况进行额外处理,防止系统崩溃 异常的分类:编译时异常和运行时异常 编译时异常:编译器强制要求必须使用


 


5.7.2 捕获异常

问:为什么要捕获异常?

答:因为捕获异常可以对异常情况进行额外处理,防止系统崩溃

异常的分类:编译时异常和运行时异常

编译时异常:编译器强制要求必须使用try…catch块进行捕获,或者使用throws抛出

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用_核心技术

public class Main {
public static void main(String[] args){
Main solution = new Main();
//处理方法1:try...catch...
try{
Class<Date> c2 = (Class<Date>) Class.forName("java.util.Date");
}catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}public class Main {
//处理方法2:直接在方法头,使用 throws 关键字抛出
public static void main(String[] args) throws ClassNotFoundException {
Main solution = new Main();
Class<Date> c2 = (Class<Date>) Class.forName("java.util.Date");
}
}

运行时异常:开发者可不提供处理器,运行时异常编译器会检查是否提供了处理器,没提供时会直接抛出;例如访问指向 null 的应用

public class Main {
public static void main(String[] args) throws ClassNotFoundException {
Main solution = new Main();
Integer v = null;
//运行时异常,系统不会提示进行捕获
System.out.println(v.intValue());
}
}

额外知识:运行时异常也可用try…catch…捕获,来进行统一的处理:

public class Main {
public static void main(String[] args) throws ClassNotFoundException {
Main solution = new Main();
try{
Integer v = null;
//运行时异常,系统不会提示进行捕获
System.out.println(v.intValue());
}catch (Exception e){
System.out.print("test:");
e.printStackTrace();
}
}
}

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用_java_02

5.7.3 利用反射分析类的能力

Field:  描述全局变量

Constructor: 描述构造器

Method: 描述方法

代码比起原版略有更改,输出的类名为短名称:

import java.lang.reflect.*;
import java.util.Scanner;

public class ReflectionTest {
public static void main(String[] args){
String name="";
if(args.length>0){
name = args[0];
}else{
Scanner in = new Scanner(System.in);
System.out.println("Enter class name(e.g. java.util.Date):");
name = in.next();
}
try{
Class c1 = Class.forName(name);
Class sc1 = c1.getSuperclass();
//类访问修饰符
String modifiers = Modifier.toString(c1.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.print("class "+c1.getSimpleName());
if(sc1 != null && sc1 != Object.class)
System.out.print(" extends "+sc1.getSimpleName());
System.out.print("\n{\n");
printConstructors(c1);
System.out.println();
printMethods(c1);
System.out.println();
printFields(c1);
System.out.println("}");
System.out.println();
}catch (ClassNotFoundException e){
e.printStackTrace();
}
System.exit(0);
}

private static void printConstructors(Class c1) {
Constructor[] constructors = c1.getDeclaredConstructors();
for(Constructor c:constructors){
String name = c.getName();
System.out.print("\t");
String modifiers = Modifier.toString(c.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.print(c1.getSimpleName()+"(");
Class[] paramTypes = c.getParameterTypes();
for(int j = 0; j < paramTypes.length; j++){
if(j > 0)
System.out.print(", ");
System.out.print(paramTypes[j].getSimpleName());
}
System.out.println(");");
}
}

private static void printMethods(Class c1) {
Method[] methods = c1.getDeclaredMethods();
for(Method m:methods){
String name = m.getName();
Class returnType = m.getReturnType();
System.out.print("\t");
String modifiers = Modifier.toString(m.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.print(returnType.getSimpleName()+" "+name+"(");
Class[] paramTypes = m.getParameterTypes();
for(int j = 0; j < paramTypes.length; j++){
if(j > 0)
System.out.print(", ");
System.out.print(paramTypes[j].getSimpleName());
}
System.out.println(");");
}
}

private static void printFields(Class c1) {
Field[] fields = c1.getDeclaredFields();
for(Field f:fields){
String name = f.getName();
System.out.print("\t");
String modifiers = Modifier.toString(f.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.println(f.getType().getSimpleName()+" "+name+";");
}
}
}

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用_核心技术_03

 系列内容:

《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述

《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参

《Java 核心技术 卷1》 笔记 第四章:类与对象

《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成

《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造

《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块

《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计

《Java 核心技术 卷1》 笔记 第五章 继承

《Java 核心技术 卷1》 笔记 第五章 继承(2)

《Java 核心技术 卷1》 笔记 第五章 继承(3)

《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法

《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString

《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型

《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组

《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射

喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

关注公众号,互相学习:钰娘娘知识汇总

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用_类与对象_04

【转自:韩国服务器 http://www.yidunidc.com 欢迎留下您的宝贵建议】
网友评论