我是靠谱客的博主 开心嚓茶,最近开发中收集的这篇文章主要介绍java反射 class_Class类与java反射,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.什么是反射?

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;

2.Class类对象:在类加载时创建的对象,存储在堆中,通过这个对象可以获取类的信息

获取Class类对象的方法:

//1、通过对象调用 getClass() 方法来获取,通常应用在:比如你传过来一个 Object//类型的对象,而我不知道你具体是什么类,用这种方法

Person p1 = newPerson();

Class c1=p1.getClass();//2、直接通过 类名.class 的方式得到,该方法最为安全可靠,程序性能更高//这说明任何一个类都有一个隐含的静态成员变量 class

Class c2 = Person.class;//3、通过 Class 对象的 forName() 静态方法来获取,用的最多,//但可能抛出 ClassNotFoundException 异常

Class c3 = Class.forName("com.ys.reflex.Person");

//需要注意的是:一个类在 JVM 中只会有一个 Class 实例,即我们对上面获取的 c1,c2,c3进行 equals 比较,发现都是true

3.通过 Class 类获取成员变量、成员方法、接口、超类、构造方法等

getPackage():获取该类的存放路径             Package对象

getSuperclass():获取继承的类                  Class对象

getInterfaces():获取接口                            Class型数组

getName():获得类的完整名字。                        String对象

getFields():获得类的public类型的属性。        Field型数组

getFields(String name):获得类的public类型的指定属性    Field型对象

getDeclaredFields():获得类的所有属性。包括private 声明的和继承类

getMethods():获得类的public类型的方法。

getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类

getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。

getConstructors():获得类的public类型的构造方法。

getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。(ex:int.class)

newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

4.动态操作构造器,方法,属性

构造对象:

1.User u= (User)clazz.newInstance()//创建对象,调用了无参构造器

2.//通过构造器创建对象

Constructor c =clazz.getConstructor()

c.newInstance(参数)//调用有参的构造器创建对象

反射弊端:影响性能,做访问检查,可以通过setAcessable(true),然后可以直接方法私有属性及方法,不再检查

5.操作泛型:java中的泛型是针对编译器说的,确保数据的类型安全,和免除强制类型转换的麻烦,但是一旦编译完成,泛型都会擦除,

6.操作注解

拓展:

类之父:Object,所有的类不声明继承某一个类,默认都继承Object类

Object类的常用方法:

euqals():比较两个对象的实际内容是否相等      ==:比较两个对象的引用,即地址是否相同

getClass():返回对象执行的Class实例   getClass().getname()可以获取类的名称,在一个类中可以直接使用这个方法,毕竟继承了父类,就有了这个方法

toString():将一个对象返回为字符串形式,会返回一个字符串实例,因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”,  它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法

Object类中的getClass,notify,notifyall,wait等方法不能被重写,因为这些方法被定义为final类型

最后

以上就是开心嚓茶为你收集整理的java反射 class_Class类与java反射的全部内容,希望文章能够帮你解决java反射 class_Class类与java反射所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部