`

第十四章 类型信息

 
阅读更多

 

 

 

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
 */

 

分享到:
评论

相关推荐

    Java编程思想第十四章类型信息之反射与代理.pptx

    Java编程思想第十四章类型信息之反射与代理.pptx

    c语言课件(第一章 C语言基础、第二章 变量和数据类型、第三章 运算符...第十二章 结构)

    最后,第十二章“结构”讲解了如何定义和使用自定义数据结构——结构体,这允许将不同类型的变量组合成一个单一的实体,便于处理复杂的数据结构,如链表、树等。 总之,这个C语言课件全面覆盖了C语言的基础知识,...

    C#语言和SQL Server数据库基础-第14章上机练习.zip

    在本资源"C#语言和SQL Server数据库基础-第14章上机练习.zip"中,主要探讨了C#编程语言与SQL Server数据库的基础知识及其实际应用。这是一份由原创作者田超凡编写的教程,旨在帮助学习者通过上机实践来加深对这两个...

    C语言第一章概述

    第一章:C语言程序设计概述 2课时 第二章:基本数据类型与表达式 4课时 第三章:顺序程序设计 4课时 第四章:选择结构程序设计 4课时 第五章:循环结构程序设计 8课时 ...第十一章:文件

    S2-1-深入.NET平台和C#编程(PPT+源码)【第十四章】

    第十四章可能涵盖了.NET平台的核心概念、C#语言特性以及如何利用这些知识进行实际开发。下面将详细探讨.NET平台、C#编程语言的关键知识点,并结合可能的源码分析,给出更全面的理解。 1. **.NET平台概述**:.NET是...

    VC开发经验技巧 共分为21章 第十四章

    【标题】"VC开发经验技巧 共分为21章 第十四章" 提供了关键信息,这是一份关于Visual C++(简称VC)开发的综合教程,共有21个章节,而我们关注的是第14章。在VC开发中,开发者通常会涉及到Windows应用程序设计、MFC...

    ACCP6.0 S1 C#语言 和 数据库技术基础 第14章(共17章)

    【标题】"ACCP6.0 S1 C#语言 和 数据库技术基础 第14章(共17章)"涵盖了计算机科学中的两个关键领域,即C#编程语言和数据库技术,这些都是现代软件开发的基础。在这一部分,我们将会深入探讨C#语言的基本语法和特性...

    北大青鸟 ACCP 之 asp.net 8 - 14 章

    **第十四章:ASP.NET MVC** ASP.NET MVC是一种模型-视图-控制器架构模式,为Web开发提供了更灵活的方式。会讲解MVC架构的原理,以及如何创建和路由控制器、视图和模型。 通过北大青鸟ACCP的这些章节,学生将全面...

    Java编程思想笔记(全)

    第十四章探讨了Java中的反射机制。反射允许程序在运行时获取类的信息并操纵对象的状态。本章讲解了Class对象的使用方法、如何获取类的方法和字段信息、如何动态创建对象以及调用方法等内容。通过反射,可以实现更为...

    第十四章 Caché 定义和使用关系

    文章目录第十四章 Caché 定义和使用关系关系概述一对多关系主子关系主子关系和储存共同关系术语定义关系一般语法定义一对多关系定义父子关系父子关系和编辑。示例一对多关系示例主子关系示例连接对象方案1:更新一...

    机械课后习题答案第14章习题及解答.pdf

    描述中并未提供具体信息,但我们可以推测这可能是一个学习资源,提供了解答机械工程课程中第14章习题的答案,帮助学生理解和掌握相关知识。 标签“资料”暗示这是一个学习资料或参考资料,可能包含详细的解释和计算...

    C++Primer 第四版课后习题解答(第1~18章完整答案)完整版

    第十三章“复制控制”讲解了构造函数、析构函数、拷贝构造函数和赋值运算符,以及深拷贝和浅拷贝的概念。习题解答会涵盖自定义拷贝控制以避免常见的资源管理问题。 这份完整的习题解答不仅有助于巩固C++的基础知识...

    编程思想下篇

    由于上传文件大小限制该资源为上下篇 本资源为下篇 ...第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面

    Thinking in java4(中文高清版)-java的'圣经'

    5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第14章 类型信息 第15...

    Thinking in Java 第四版 第2章到第17章答案

    13. **第十四章:图形用户界面** - 使用Swing库创建GUI,包括组件、布局管理器、事件处理等。 15. **第十五章:网络编程** - Java提供了Socket和ServerSocket类进行网络通信,以及URL和URLConnection类用于访问网络...

    财务管理14第十四章预算管理体制.pptx

    《财务管理14第十四章预算管理体制》探讨了预算管理体制的核心概念、类型以及我国预算管理体制的演变,特别是中国的分税制改革。预算管理体制是处理中央与地方政府间财政关系的基础制度,涉及预算主体的独立性、集权...

    Python中文指南,共十三章

    Python中文指南,共十三章,分别为第一章:安装运行、第二章:数据类型、第三章:数据结构、第四章:控制流程、第五章:学习函数、第六章:错误异常、第七章:类与对象、第八章:包与模块、第九章:调试技巧、第十章...

    Java语言程序设计基础第十版第十二章课后复习题答案

    根据提供的信息,我们可以总结出以下关于《Java语言程序设计基础第十版》第十二章的一些关键知识点及解答: ### 一、异常处理基本概念 #### 12.1 **问题:** 异常处理的主要思想是什么? **解答:** 异常处理的主要...

Global site tag (gtag.js) - Google Analytics