【ThinkingInJava】27、关于class对象引用的各种关于class的方法

/**
* 书本:《Thinking In Java》
* 功能:关于class对象引用的各种关于class的方法
* 文件:ToyTest.java
* 时间:2015年4月12日19:21:32
* 作者:cutter_point
*/
package Lesson14TypeInformation.toys;

import static net.mindview.util.Print.*;

interface HasBatteries {}
interface Waterproof {}
interface Shoots {}

class Toy
{
	Toy() {}
	Toy(int i) {}
}

class FancyToy extends Toy implements HasBatteries, Waterproof, Shoots
{
	FancyToy() { super(1); }
}

class A
{
	public String aa = " wuwuwwu";
	public A() {System.out.println("========================");}
	public A(String a) { this.aa = a; }

	public void get()
	{
		System.out.println("=====" + aa);
	}
}

public class ToyTest
{
	static void printInfo(Class cc)
	{
		print("Class name: " + cc.getName() + " is interface? [" + cc.isInterface() +"]");
		print("Simple name: " + cc.getSimpleName());
		print("Canonical name : " + cc.getCanonicalName());		//经典名,就是全名包括包
	}

	public static void main(String[] args)
	{
		Class c = null;

		try
		{
			c = Class.forName("Lesson14TypeInformation.toys.FancyToy");
		}
		catch (ClassNotFoundException e)
		{
			print("Cant`t find FancyToy");
			System.exit(1);
		}

		printInfo(c);

		for(Class face : c.getInterfaces())
		{
			printInfo(face);		//输出这个类型的每一个接口
		}

		Class up = c.getSuperclass();	//得到父类
		Object obj = null;

		try
		{
			obj = up.newInstance();
		}
		catch (InstantiationException e)
		{
			print("Cannot instantiate");
			System.exit(1);
		}
		catch (IllegalAccessException e)
		{
			print("Cannot access");
			System.exit(1);
		}	//实例化一个对象

		printInfo(obj.getClass());

		Class b = null;
		A a1 = new A("a111111111111111111111");
//		A a2 = new A("a222222222222222222222");
		Object a3 = null;
		A a4 = null;

		try {
			b = Class.forName("Lesson14TypeInformation.toys.A");
//			Class th = b.getClass();
			a4	= (A) b.newInstance();		//得到类的对象,但是没有实例化
//			a4 = (A) a3;
			a4.get();

		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

输出:

Class name: Lesson14TypeInformation.toys.FancyToy is interface? [false]  obj1

Simple name: FancyToy  obj1

Canonical name : Lesson14TypeInformation.toys.FancyToy  obj1

Class name: Lesson14TypeInformation.toys.HasBatteries is interface? [true]  obj1

Simple name: HasBatteries  obj1

Canonical name : Lesson14TypeInformation.toys.HasBatteries  obj1

Class name: Lesson14TypeInformation.toys.Waterproof is interface? [true]  obj1

Simple name: Waterproof  obj1

Canonical name : Lesson14TypeInformation.toys.Waterproof  obj1

Class name: Lesson14TypeInformation.toys.Shoots is interface? [true]  obj1

Simple name: Shoots  obj1

Canonical name : Lesson14TypeInformation.toys.Shoots  obj1

Class name: Lesson14TypeInformation.toys.Toy is interface? [false]  obj1

Simple name: Toy  obj1

Canonical name : Lesson14TypeInformation.toys.Toy  obj1

========================

===== wuwuwwu

时间: 2024-11-04 17:42:37

【ThinkingInJava】27、关于class对象引用的各种关于class的方法的相关文章

2014年5月27日中国大陆封锁Google事件解决的方法

2014年5月27日中国大陆封锁Google事件指自2014年5月27日后,Google公司的各项服务遭到疑似来自防火长城的恶意干扰,导致中国大陆地区的用户无法正常使用其服务的事件.自当天起,来自中国大陆的用户发现Google旗下的各个分站以及Google的其它服务(Google Play.Gmail.Google Docs等)均无法正常訪问与使用,甚至无法登陆Google账户.谷歌中国旗下的谷歌地图.谷歌翻译依然能够使用,但部分地区仍有连接被重置.连接超时等情况 最新谷歌镜像git网址:htt

python(27)requests 爬取网页乱码,解决方法

最近遇到爬取网页乱码的情况,找了好久找到了种解决的办法: html = requests.get(url,headers = head) html.apparent_encoding html.encoding = html.apparent_encoding print html.text 头文件中添加: import sys reload(sys) sys.setdefaultencoding("utf-8")

安装vs 2015 x新建项目 显示(未将对象引用设置到对象实例) 处理方法

Jvm(27.14.2),理解升级---堆,栈,方法区

看完GC的回收策略之后,我们再来看一下堆,栈,方法区的交互. 首先我们必须牢记一句话,栈是堆和方法区的引用,学的越多对这句话的理解要越深. 1,这里的堆主要是对局部变量表来说的. 2,栈的内存地址是远远小于堆得,因为在栈中只是对象的引用. 3,gc回收只是回收堆内存,不用考虑栈的内存,因为栈的数据结构就是一旦出栈就会释放的. 栈也是JAVA虚拟机自动管理的,(不是由gc)栈类似一个集合(不过是有固定的容量),是由很多元素(专业术语:栈帧)组合起来的,在我们码代码的时候,每调用一个方法,在运行的时

27 isinstance与issubclass、反射、内置方法

isinstance与issubclass issubclass:判断子类是否属于父类,是则返回True,否则返回False isinstance:判断对象是否属于类,是则返回True,否则返回False class Bar: pass class Foo(Bar): pass print(issubclass(Foo,Bar))#输出一个True obj=Foo() print(isinstance(obj,Foo))#输出一个True 反射 反射:通过字符串来反射/映射到对象/类的属性上 c

2017年8月27日 反射的初步认识

反射原理主要是为了做框架用的,但是了解底层原理对以后深入理解框架概念还是蛮有帮助的. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着

Mz学院ES6视频教程 ES6基础教程 共27课包含源码课件

1.ES6简介.mp42.let基本用法.mp43.let不存在变量提升.mp44.let暂时性死区.mp45.let不允许重复声明.mp46.为什么需要块级作用域.mp47.块级作用域.mp48.const命令.mp49.const对象.mp410.const对象冻结.mp411.跨模块常量.mp412.全局对象属性.mp413.Destructuring.mp414.不完全解构.mp415.制定默认值.mp416.let和const命令.mp417.对象的解构赋值.mp418.对象解构赋值的

JVM 指令集合

1 指令码 助记符 说明 2 0x00 nop 什么都不做 3 0x01 aconst_null 将null推送至栈顶 4 0x02 iconst_m1 将int型-1推送至栈顶 5 0x03 iconst_0 将int型0推送至栈顶 6 0x04 iconst_1 将int型1推送至栈顶 7 0x05 iconst_2 将int型2推送至栈顶 8 0x06 iconst_3 将int型3推送至栈顶 9 0x07 iconst_4 将int型4推送至栈顶 10 0x08 iconst_5 将in

十三、C# 事件

1.多播委托 2.事件 3.自定义事件 在上一章中,所有委托都只支持单一回调. 然而,一个委托变量可以引用一系列委托,在这一系列委托中,每个委托都顺序指向一个后续的委托, 从而形成了一个委托链,或者称为多播委托*multicast delegate). 使用多播委托,可以通过一个方法对象来调用一个方法链,创建变量来引用方法链,并将那些数据类型用 作参数传递给方法. 在C#中,多播委托的实现是一个通用的模式,目的是避免大量的手工编码.这个模式称为 observer(观察者)或者publish-su