关于java:java-类型信息

37次阅读

共计 902 个字符,预计需要花费 3 分钟才能阅读完成。

为什么须要 RTTI

package rtti;
import java.util.Arrays;
import java.util.List;
abstract class Shape {void draw() {System.out.println(this + ".draw()");
 }
    abstract public String toString();}
class Circle extends Shape {
    @Override
    public String toString() {return "Circle";}
    void sayHello() {System.out.println("hello");
    }
}
class Square extends Shape {
    @Override
    public String toString() {return "Square";}
}
public   class Shapes {public static void main(String[] args) {List<Shape> shapeList = Arrays.asList(new Circle(), new Square());
        // 容器的所有事物都当作 object 持有,当取出时会主动转型为 Shape
        for (Shape shape :
                shapeList) {shape.draw();
        }
    }
}
  • RTTI 名称的含意:在运行时,辨认一个类型的类型
  • 面向对象编程中根本的目标是,让代码只操纵对基类的援用,多态
  • 有时须要操作特定类的独有办法,而这是无奈从基类获取的,这就是应用 RTTI 的意义

Class 对象

  • 类型信息在运行时由 Class 对象示意,每个类都有一个 Class 对象,蕴含与类相干的信息
  • 每当编译一个新类,就会由 jvm 中的类加载器子系统生成一个同名的 Class 对象 (.class)
  • 类加载器子系统是一条类加载器链,原生的类加载器加载可信类,包含 java api 类,也能够额定减少类加载器
  • 所有类都是在第一次应用的时候 (创立第一个对类的动态成员的援用时),动静加载到 jvm 中。这阐明,结构器也是动态的。
  • 一旦某个类的 Class 对象被载入内存,它就被用来创立这个类的所有对象
  • 想在运行时应用类型信息,就必须先取得对 Class 对象的援用

正文完
 0