java-类型信息
作者:互联网
abstract class Shape{ void draw(){ System.out.println(this + ".draw"); } @Override public abstract String toString(); } class Circles extends Shape{ @Override public String toString() { return "Circles"; } } class Squals extends Shape{ @Override public String toString(){ return "Squals"; } } class OOO extends Shape{ @Override public String toString() { return "OOO"; } } public class RttiDemo1 { public static void main(String[] args) { Stream.of(new Circles(),new Squals(),new OOO()).forEach(Shape::draw); } } /* Circles.draw Squals.draw OOO.draw */
类中包含 draw() 方法,它通过传递 this 参数传递给 System.out.println(),间接地使
用 toString() 打印类标识符(注意:这里将 toString() 声明为 abstract,以此强制
继承者覆盖该方法,并防止对 Shape 的实例化)。如果某个对象出现在字符串表达式中(涉及"+"
和字符串对象的表达式),toString() 方法就会被自动调用,以生成表示该对象的 String。
每个派生类都要覆盖(从 Object 继承来的)toString() 方法,这样 draw() 在不同情况
下就打印出不同的消息(多态)。
/* 编译期,stream 和 Java 泛型系统确保放入 stream 的都是 Shape 对象(Shape 子类的对象也可视为 Shape 的对象),
否则编译器会报错; 运行时,自动类型转换确保了从 stream 中取出的对象都是 Shape 类型。 Shape 对象实际执行什么样的代码,是由引用所指向的具体对象(Circle、Square 或者 Triangle)决定的。 */
Class
对象
class Cookie{ static { System.out.println("Loading cookie"); } } class Gum{ static { System.out.println("Loading Gum"); } } class Candy{ static { System.out.println("Loading Candy"); } } public class RttiD2 { public static void main(String[] args) { System.out.println("maindone"); new Candy(); System.out.println("back candy"); try{ Class.forName("Gum"); }catch (ClassNotFoundException e ){ System.out.println("Exception"); } System.out.println("back Gum"); new Cookie(); System.out.println("back cookie"); } } /* maindone Loading Candy back candy Exception back Gum Loading cookie back cookie */
其实构造器也是类的静态方法,虽然构造器前面并没有 static
关键字。所以,使用 new
操作符创建类的新对象,这个操作也算作对类的静态成员引用。
Candy、Gum 和 Cookie 这几个类都有一个 static{...} 静态初始化块,这些静态初始化块在类第一次被加载的时候就会执行。也就是说,静态初始化块会打印出相应的信息,
告诉我们这些类分别是什么时候被加载了 所有 Class 对象都属于 Class 类,而且它跟其他普通对象一样,我们可以获取和操控它的引用(这也是类加载器的工作)。forName() 是 Class 类的一个静态方法,我们可以使用 forName()
根据目标类的类名(String)得到该类的 Class 对象。 果 Class.forName() 找不到要加载的类,它就会抛出异常 ClassNotFoundException。
标签:java,String,类型信息,System,Shape,println,class,out 来源: https://www.cnblogs.com/java-quan/p/13031234.html