java 反射类 实例化_java学习笔记之反射—Class类实例化和对象的反射实例化

反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类的实例化对象,

可以采用三种方式完成。

java.lang.Class类的定义:

public final class Class

extends Object

implements Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField>, Constable

1.Object类支持:

Object类可以根据实例化对象获取Class对象:public final Class> getClass()

这种方式有一个缺点:如果现在只是想获得Class类对象,则必须产生指定类对象后才可以获得,会造成一个无用的对象产生

代码:

Person per = new Person();//已经存在有指定类的实例化对象

Class extends Person> cls = per.getClass();

2.JVM直接支持:

采用“类.class”的形式实例化

代码:

Class extends Person> cls2 = Person.class;

3.Class类支持:

在Class类里面提供有一个static方法:

加载类:public static Class> forName​(String className) throws ClassNotFoundException

这种模式最大的特点是可以直接采用字符串的形式定义要使用的类型,并且程序不需要编写任何的import程序

注意:使用该方法时参数必须是完整类名,如以下代码中IOtest为包名,InputUtil是类名

Class> cls3 = Class.forName("IOtest.InputUtil");

完整代码:

48304ba5e6f9fe08f3fa1abda7d326ab.png

package Reflect;

public class ReflectDemo {

public static void main(String[] args) throws ClassNotFoundException {

// TODO Auto-generated method stub

// 1、Object类支持

Person per = new Person();//已经存在有指定类的实例化对象

Class extends Person> cls = per.getClass();

System.out.println(per);

System.out.println(cls.getName());//获取的是类的完整名称

// 2、JVM直接支持

Class extends Person> cls2 = Person.class;

System.out.println(cls2.getName());

// 3、Class类支持

Class> cls3 = Class.forName("IOtest.InputUtil");//不需要用import导入IOtest包

System.out.println(cls3.getName());

}

}

class Person{}

48304ba5e6f9fe08f3fa1abda7d326ab.png

获取Class对象之后最大的意义实际上并不是在于这是一个对象,更重要的是Class类里面提供有一个对象的

反射实例化方法(代替了关键字new):

在jdk1.9以前的实例化:public T newInstance() throws InstantiationException,IllegalAccessException

jdk1.9之后:clazz.getDeclaredConstructor().newInstance()

通过反射实现的对象实例化处理,依然要调用类中的无参构造方法,其本质等价于“类 对象 = new 类()”,也就是说相当于隐藏了关键

字new,而直接使用字符串进行了替代

代码实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

/*

* 通过newInstance()方法实例化Student类对象

*/

package Reflect;

public class ReflectDemo2 {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

Class> cls = Class.forName("mldn.Student");

Object obj = cls.newInstance();//实例化对象,jdk1.9后被废除

System.out.println(obj);

//jdk1.9之后:被clazz.getDeclaredConstructor().newInstance()替代

Object o = cls.getDeclaredConstructor().newInstance();

System.out.println(o);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基础学习笔记 # 一、Java简介 Java是一种面向对象的编程语言,由Sun Microsystems(现在是Oracle)于1995年首次发布。它具有跨平台的特性,可以在不同的操作系统上运行。Java语言被广泛应用于开发各种型的应用程序,包括桌面应用、Web应用、移动应用等。 # 二、Java基本语法 ## 1. 变量与数据Java是强型语言,每个变量必须先声明后使用。Java提供了多种数据型,包括基本数据型(整数、浮点数、字符、布尔值)和引用数据型(、接口、数组)。 ## 2. 运算符 Java提供了多种运算符,包括算术运算符、关系运算符、逻辑运算符等,用于进行各种数学或逻辑运算。 ## 3. 控制流程 Java提供了多种控制流程语句,包括条件语句(if-else语句、switch语句)、循环语句(for循环、while循环)、跳转语句(break语句、continue语句)等,用于控制程序的执行流程。 ## 4. 方法和 Java中的方法用于封装一段可重复使用的代码,可以带有参数和返回值。Java程序的基本组织单位,包含了属性和方法。可以使用关键字class定义一个,通过实例化对象来调用其方法。 # 三、面向对象编程 Java是一种面向对象的编程语言,面向对象编程的核心概念包括封装、继承和多态。 ## 1. 封装 封装是将数据和行为打包成一个,通过访问修饰符(public、private等)控制对的成员的访问权限。 ## 2. 继承 继承允许一个继承另一个的属性和方法,并且可以通过重写来修改或扩展继承的方法。 ## 3. 多态 多态允许通过父型的引用来引用子对象,实现对不同子对象的统一调用。 # 四、异常处理 Java提供了异常处理机制,用于处理程序中的错误情况。异常分为可检查异常(checked exception)和不可检查异常(unchecked exception),可以使用try-catch语句来捕获和处理异常。 # 五、Java标准库 Java标准库提供了大量的和接口,用于完成各种常见的任务。其中包括输入输出、集合、多线程、网络编程等功能,可以大大简化开发过程。 以上是我学习Java基础的笔记总结,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值