编程语言
首页 > 编程语言> > java-类型信息

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