文档详情

Java程序设计基础教程((慕课版)(第2版) 课件 第9单元 反射、异常及枚举 .pptx

发布:2025-05-25约2.92万字共52页下载文档
文本预览下载声明

第9单元反射、异常及枚举Java程序设计基础教程((慕课版)(第2版))

目录导航9.1反射9.3枚举9.2异常9.4项目实战9.5单元小结

9.1.1反射概述反射允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性。例如,使用它能获取Java类中各成员的名称,并将名称显示出来。反射允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性。例如,使用它能获取Java类中各成员的名称,并将名称显示出来。在熟悉Java中的反射之前,读者需要了解面向对象编程中的一个重要概念——运行时类型识别(Run-TimeTypeIdentification,RTTI)。运行时类型识别是所有面向对象编程语言都必须提供的功能。下面请看任务9-1。类型自动识别01OPTIONClass类中提供了很多方法,其中forName()就是用来加载一个类的。使用该方法时可以不必使用new关键字来创建对象,如任务9-2所示。利用Class类创建类对象02OPTION

9.1.1反射概述那么,现在获取到了对象的Class对象,应该怎样判断它的类型呢?最简单直接的方式之一是将获取到的类名与特定类名进行比较,如任务9-3所示。03OPTION通过类名获取类信息这种方式比使用getName()方法的方式简单一些,而且效率更高。不过,这样仍需产生一个Class对象。Java还提供了一个更加简单的方式,即使用instanceof关键字,如任务9-4所示。使用instanceof关键字获取类型信息04OPTIONString类的反射05OPTION了解了运行时类型识别,Java的反射就很好理解了。Java的反射就是利用Class类来进行一系列的操作,相较于运行时类型识别的简单载入功能,Java的反射可以做更多的事情。为了理解反射能做什么,下面给出一个简单的反射任务,如任务9-5所示。

任务9-1运行时类型识别文件Shape.javapublicclassShape{publicstaticvoiddrawShape(Shapeshape){shape.draw();}publicvoiddraw(){System.out.println(drawshape!);}publicstaticvoidmain(String[]args){Shapeshape=newShape();Circlecircle=newCircle();Triangletriangle=newTriangle();Squaresquare=newSquare();drawShape(shape);drawShape(circle);drawShape(triangle);drawShape(square);}}文件Square.java文件Circle.javapublicclassCircleextendsShape{publicvoiddraw(){System.out.println(drawcircle!);}}publicclassSquareextendsShape{publicvoiddraw(){System.out.println(drawsquare!);}}文件Triangle.javapublicclassTriangleextendsShape{publicvoiddraw(){System.out.println(drawtriangle!);}}运行结果如图9-1所示。如果想要对圆形进行着色,那么程序就需要知道每个类型的准确信息,此时就需要使用运行时类型识别技术,用它来查询某个shape对象的准确类型。运行时类型识别的类型识别功能是基于Class类的。在Java中,任何一个作为程序一部分的类都是一个Class对象。换言之,每次写一个新类时,同时会创建一个Class对象。在程序运行期间,一旦程序员想要生成某个类的对象,JVM会先检查该类型的Class对象是否载入。若未载入,则JVM会查找与该类型同名的.class文件并将其载入。一旦该类型的Class对象载入内存,就可以使用它创建该类型的对象。当然,未使用的Class对象是不会载入的。drawShape()实际上会执行4种不同的方法,它会根据实际执行时shape对象的真正类型来决定调用哪种方法。这个特性被称为运行时多态。

任务9-2

显示全部
相似文档