获得Class类对象的几种方法
2个回答
展开全部
每一个class都有一个Class对象。一个java文件经过编译,再生成的.class文件中,就会创建一个Class对象。只有一个。他表示整个类的类型信息。
那么通常我们创建对象的方式又有几种呢?
五种:
1.通过new 语句创建对象。
2.通过静态工厂方法创建,比如A.getNewInstance();
3.通过反射技术来实现。可以调用Class类或Constructor类的newInstance()方法。
4.通过调用对象的clone()方法
5.利用I/O流技术的反序列化来实现。
回归正题获取Class对象(实例)有三种方法:
1.通过class的方式创建Class实例:类名.class
2.通过对象的getClass()方法获得。
3.通过Class类的forName()方法来获得。
反射:可以说是一中技术手段,利用反射可以访问,检测,修改本身行为状态的一种方式。利用反射我们可以创建实例。
其实质就是:反编译:.class---反编译成.java文件。
所以说他是一个强大的工具,他可以创建更加灵活的代码,在运行期装配。使我们可以在运行期,动态的访问对象有哪些方法,动态,并可以为修改对象的属性,在运行期动态的访问任何对象的任何方法。
而且他降低了代码的耦合度,提高了可扩展性。
但是反射使用不当会成本很高。而且反射本身比直接硬编码更加复杂,所以一般性小程序尽量不要用,他适合一些对灵活度和可扩展性比较强的框架中。
而且他会模糊程序结构,不利于理解程序流程。可维护性不好。
那么通常我们创建对象的方式又有几种呢?
五种:
1.通过new 语句创建对象。
2.通过静态工厂方法创建,比如A.getNewInstance();
3.通过反射技术来实现。可以调用Class类或Constructor类的newInstance()方法。
4.通过调用对象的clone()方法
5.利用I/O流技术的反序列化来实现。
回归正题获取Class对象(实例)有三种方法:
1.通过class的方式创建Class实例:类名.class
2.通过对象的getClass()方法获得。
3.通过Class类的forName()方法来获得。
反射:可以说是一中技术手段,利用反射可以访问,检测,修改本身行为状态的一种方式。利用反射我们可以创建实例。
其实质就是:反编译:.class---反编译成.java文件。
所以说他是一个强大的工具,他可以创建更加灵活的代码,在运行期装配。使我们可以在运行期,动态的访问对象有哪些方法,动态,并可以为修改对象的属性,在运行期动态的访问任何对象的任何方法。
而且他降低了代码的耦合度,提高了可扩展性。
但是反射使用不当会成本很高。而且反射本身比直接硬编码更加复杂,所以一般性小程序尽量不要用,他适合一些对灵活度和可扩展性比较强的框架中。
而且他会模糊程序结构,不利于理解程序流程。可维护性不好。
展开全部
有四种方法:
方法1:调用运行时类的属性(.class)
Class clazz = Person.class;
方法2:通过运行时类的对象,调用getClass()
Person p = new Person();
Class clazz = p.getClass();
方法3:调用Class的静态方法forName(String classPath)
Class clazz = Class.forName("java.lang.String");
方法4:使用类的加载器(ClassLoader)
ClassLoader classLoader = Person.class.getClassLoader();
Class clazz = classloader.loadClass("java.lang.String");
方法1:调用运行时类的属性(.class)
Class clazz = Person.class;
方法2:通过运行时类的对象,调用getClass()
Person p = new Person();
Class clazz = p.getClass();
方法3:调用Class的静态方法forName(String classPath)
Class clazz = Class.forName("java.lang.String");
方法4:使用类的加载器(ClassLoader)
ClassLoader classLoader = Person.class.getClassLoader();
Class clazz = classloader.loadClass("java.lang.String");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询