反射:

Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。

Java反射机制主要提供了以下功能:

    1. 在运行时判断任意一个对象所属的类;
    2. 在运行时构造任意一个类的对象;
    3. 在运行时判断任意一个类所具有的成员变量和方法;
    4. 在运行时调用任意一个对象的方法。

Class类中存在以下几个重要的方法:

    • getName():

一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。

    • newInstance()

该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。

    • getClassLoader()

返回该Class对象对应的类的类加载器。

    • .getComponentType()

该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:

int[] ints = new int[]{1,2,3};

Class class1 = ints.getClass();

Class class2 = class1.getComponentType();

而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。

    • getSuperClass()

返回某子类所对应的直接父类所对应的Class对象。

    • isArray()

判定此Class对象所对应的是否是一个数组对象。

小实例:

运行时输入类名创建对象,然后输入方法名,该对象调用该方法;

    1. 利用Scanner来获取输入的类的名字

注意:要调用的类写在包内的话,输入时的格式为:包名.类名

Scanner sc = new Scanner(System.in);

System.out.println("请输入类名:");

String classname = sc.nextLine();// 获取类名;

2..根据获取到的类名,创建类( 调用Class.forName(className)方法),该过程会抛出一个没有找到类的一个异常;

		Class c;
//要调用的类class写在包内的话,要加上包.类;
try {
c = Class.forName(classname);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

3.根据我们创建的类,创建构造器(调用getConstructo()方法);

Constructor con = c.getConstructor(int.class);

getConstructor方法里面需要的参数类型,是你要调用的构造方法的参数类型。如果是String型的参数的话,那么该方法写的就是 c.getConstructor(String.class)

4. 获取要传给需要调用的构造方法的参数值

System.out.println("请输入构造的参数");
String cna=sc.nextLine();

5.根据构造器创建对象;

Object o=con.newInstance(Integer.parseInt(cna));
//Integer.parseInt(cna),把string类型的数据,转换为int型

6.对象创建好之后,就可以调用方法了,首先是输入我们的方法名

System.out.println("请输入方法名:");
String name = sc.nextLine();// 获取输入的方法名;

7.得到方法名之后,获取方法。

Method me=c.getMethod(name, int.class);//getMethod(方法名, 方法的参数类型)

8.在对象上面调用方法;

me.invoke(o,14);//me.invoke(对象,方法的参数);

这样一个动态绑定的过程就完成了。当然这个过程会有很多的异常需要抛出。

Java之类的构造器(反射)的更多相关文章

  1. Java类加载和类反射回顾

    今天学习Spring,突然想重新复习一下Java类加载和类反射的.巩固一下底层原理.部分参考了李刚老师的<疯狂Java讲义>和陈雄华.林开雄的<Spring3.x企业应用开发实战&g ...

  2. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  3. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  4. Java 核心类库之反射机制

    1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...

  5. Java之注解与反射

    Java之注解与反射 注解(Annotation)简介 注解(Annotation)是从JDK5.0引入的新技术 Annotation作用:注解(Annotation)可以被其他程序如编译器等读取 A ...

  6. JAVA安全基础之反射

    JAVA安全基础之反射 在JAVA安全中,反射是一个经常使用的技术,所以熟悉使用反射是非常必要的.下面就简单的讲下JAVA的反射的用法 什么是反射 每个类都有对应的Class类对象,该Class类对象 ...

  7. Java高级语法之反射

    Java高级语法之反射 什么是反射 java.lang包提供java语言程序设计的基础类,在lang包下存在一个子包:reflect,与反射相关的APIs均在此处: 官方对reflect包的介绍如下: ...

  8. 【GoLang】golang 如何像Java 一样通过类名反射对象?

    结论: golang不支持解析string然后执行. golang的反射机制只能存在于已经存在的对象上面. 不知道后续的版本有没有规划,现在只能先加载注册,然后实现类似Java工厂模式的反射. 代码示 ...

  9. java学习:用反射构造bean

    先贴一些反射的基本知识:-------------------------------------------------------------------- 一.什么是反射:反射的概念是由Smit ...

  10. 反射那些事儿——Java动态装载和反射技术

    一直以来反射都是只闻其声,却无法将之使用,近日尽心下来学习下,发现了很多精妙之处. Java动态装载和反射技术 一.类的动态装载 1.Java代码编译和执行的整个过程包含了以下三个重要的机制: ● J ...

随机推荐

  1. 细谈Slick(6)- Projection:ProvenShape,强类型的Query结果类型

    在Slick官方文档中描述:连接后台数据库后,需要通过定义Projection,即def * 来进行具体库表列column的选择和排序.通过Projection我们可以选择库表中部分列.也可以增加一些 ...

  2. Mysql性能优化一

    下一篇:Mysql性能优化二 mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包 ...

  3. linux之cp/scp命令+scp命令详解

    名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数 ...

  4. js原生跨域--用script标签实现

    刚刚从培训班学习完,总想写一下东西,自从进入了这个院子,每次出现问题,总是能找到一些答案,给我一些帮助. 作为新手,就写一下简单的吧,院子里面有很多大牛, 说句实话,他们的很多代码我都看不懂. 我就写 ...

  5. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  6. 由一个bug引发的SQLite缓存一致性探索

    问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表.后面才发现这个是SQLite在实现过程中的一个bug,而这个bug ...

  7. properties属性文件工具类

    package xxx.business.utils; import org.apache.commons.configuration.ConfigurationException; import o ...

  8. vim 中替换

    将80替换为10.0.0.19:80 :g/80/s//10.0.0.19:80/g

  9. java设计模式- (1)单例模式

    参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...

  10. [收藏] javascript keycode大全

    做了一段的小练习,没往上发了~ 继续补下js的基础知识 ------------------------------------------------------------------------ ...