反射的引出和概念

问题:
对象有编译类型和运行类型:
Object obj=new Date();
编译类型:Object
运行类型(其实就是obj对象真实的类型):Date
需求:根据对象obj调用Date类中的一个方法,如toLocalString,如何来做?
obj.toLocalString();//代码在编译阶段去编译类型Object中检查是否有该方法,如没有,编译失败;——这条语句会在编译阶段报错
解决办法:
1.强制类型转换 Date d=(Date)obj; obj.toLocalString();–正确
强制类型转换的前提:必须知道对象的真实类型,否则无法强制转换
如果不知道obj的真实类型,那又如何去调用toLocalString方法?

引出:
对象:又可称为数据
类:用来描述对象,或者描述数据,又称为描述数据的数据
java中,万物皆对象——从概念上讲,那么类也是一个对象,既然类是一种对象,那么谁又来描述该对象呢?而我们又说描述对象的都是类
元数据(meta data):描述数据(类)的描述数据
java中,所有类都是由元数据描述(Class类)
反射:得到元数据的行为
Date d1 =new Date();
Date d2 =new Date();
Date d3 =new Date();

String s1=”A”;
String s2=”B”;
String s3=”C”;

ArrayList a1=new ArrayList();
ArrayList a2=new ArrayList();
ArrayList a3=new ArrayList();

Class类、类、对象的关系如图所示。

既然Class类是对一切类的共同功能和行为的抽象,一个类中一般包含有:包、类名、父类、字段、方法、构造器等,Class类中就应该有这些属性
那么Class中应该有类具备的成员:
getPackage()–表示类的包
getSuperClass()–表示类的父类
getMethods()–表示类的方法
getField()–表示类的字段

Class类没有字段和显示构造器,但是具有方法,这些方法可以得到其所描述的数据的属性。
通过反射可以得到一个对象或者类所对应的Class类的实例对象,通过该实例调用Class类中的getMethods(),可以得到所映射的类的所有方法…
使用反射的前提:要确定所要反射的是哪一个对象,或反射的是哪个类。

注意:Class与Object的区别:
Object是一切对象的父类,所有类都继承至Object,其针对的是对象
Class针对的是类
反射定义:就是得到某个类中所有成员的机制

通过反射机制就可解决上面提出的问题!
获得Class实例的方式之一:——-详细介绍见《Class类和Class实例》这一篇博客`
对象.getClass();———-每个对象都有该方法,因此该方法定义在Object类中—-返回的是该对象的真实类型,即运行时类型

泛型的产生条件 泛型是为了解决在编译期间无法确定类型而引入的,其产生条件包括: 1. 在代码中需要使用到泛型类型,但是这个泛型类型的具体类型在编译期间是不确定的; 2. 在代码中需要对泛型类型进行操作,比如调用其方法或者获取其属性值。 泛型的概念 泛型是指在编代码时,不需要指定数据类型,而是在使用时再指定具体的数据类型。这样就可以提高代码的复用性灵活性。 泛型类 泛型类是指使用泛型定义的类,其中泛型参数可以用在类的成员变量、成员方法、构造方法中。 泛型类派生类 泛型类派生类是指使用泛型定义的类的子类,其中子类可以继续使用父类中定义的泛型类型。 带泛型子类 带泛型子类是指在继承泛型类时,子类也要使用泛型类型。 不带泛型子类 不带泛型子类是指在继承泛型类时,子类不使用泛型类型。 泛型接口 泛型接口是指使用泛型定义的接口,其中泛型参数可以用在接口的方法中。 泛型方法 泛型方法是指使用泛型定义的方法,其中泛型参数可以用在方法的参数列表、返回值、方法体中。 类型通配符 类型通配符是指在定义泛型时使用的一种特殊符号,用于表示不确定的类型。 引出类型通配符 类型通配符可以用于引出泛型类型参数的上限或者下限。 类型通配符的上限 类型通配符的上限是指使用 extends 关键字限制泛型类型参数的范围,表示泛型类型参数必须是某个类型的子类或者实现类。 类型通配符的下限 类型通配符的下限是指使用 super 关键字限制泛型类型参数的范围,表示泛型类型参数必须是某个类型的父类或者超类。 类型擦除 类型擦除是指在编译期间,将泛型类型参数替换为其上限或者 Object 类型的过程。 无限制类型的擦除 无限制类型的擦除是指在泛型类型参数没有明确指定上限或者下限时,将其擦除为 Object 类型。 有限制类型擦除 有限制类型擦除是指在泛型类型参数有明确指定上限或者下限时,将其擦除为上限或者下限。 擦除泛型方法中类型定义的参数 在泛型方法中,如果定义了泛型类型参数,则在编译期间也会进行类型擦除。 桥接方法 在泛型类或者泛型接口中,如果有泛型方法,则在编译期间会自动生成桥接方法来确保类型安全。 泛型数组 泛型数组是指使用泛型定义的数组,其中数组元素的类型为泛型类型参数。 泛型与反射 泛型与反射的结合可以实现动态创建泛型类型对象、获取泛型类型信息等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值