package rock.lee.thinkinjava.c14.typeinfo; import java.util.Arrays; import java.util.List; abstract class Shape{ void draw(){ System.out.println(this+".daw()"); } abstract public String toString(); } class Circle extends Shape{ @Override public String toString() { return "Circle"; } } class Square extends Shape{ @Override public String toString() { return "Square"; } } class Triangle extends Shape{ @Override public String toString() { return "Triangle"; } } public class Shapes { public static void main(String[] args) { //如果没有泛型,默认都会是Object List<Shape> shapeList = Arrays.asList(new Circle(),new Square(),new Triangle()); for (Shape shape : shapeList) { shape.draw();//间接调用了toString() Class<? extends Shape> c = shape.getClass(); System.out.println(c.getSuperclass()); System.out.println(c.getSimpleName()); System.out.println(c.getCanonicalName()); System.out.println(c.isInterface()); } } } /** Circle.daw() Square.daw() Triangle.daw() **/
package rock.lee.thinkinjava.c14.typeinfo; import java.util.Random; class Initable1{ //编译期常量 static final int staticFinal1 = 47; //非编译期常量,访问时类要被初始化 static final int staticFinal2 = ClassInitialization.random.nextInt(1000); static{ System.out.println("Initable1"); } } class Initable2{ //访问时类要被初始化,只有访问static final声明的常量才不会初始化 static int staticNonFinal = 147; static{ System.out.println("Initable2"); } } class Initable3{ static int staticNonFinal = 74; static{ System.out.println("Initable3"); } } public class ClassInitialization { static{ System.out.println("ClassInitialization"); } public static Random random = new Random(47); public static void main(String[] args) { //does not trigger Initialization Class initable1Class = Initable1.class; System.out.println("After Creating Initable1 "); //does not trigger Initialization System.out.println(Initable1.staticFinal1); //does trigger Initialization System.out.println(Initable1.staticFinal2); //does trigger Initialization System.out.println(Initable2.staticNonFinal); try { //does trigger Initialization Class initable3Class = Class.forName("rock.lee.thinkinjava.c14.Initable3"); System.out.println("After Creating Initable3 "); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(Initable3.staticNonFinal); } } /** ClassInitialization After Creating Initable1 47 Initable1 258 Initable2 147 Initable3 After Creating Initable3 74 */