Java 反射 class类

本文介绍了Java反射机制的基本概念及其核心功能,包括如何通过反射获取运行时对象的信息、创建对象及调用方法等。同时,文章提供了详细的代码示例,展示了如何使用Class、Constructor等类实现反射操作。

构造函数跟创建对象的同时执行,构造函数可以重载,如果在建类的同时没有创建构造函数,系统会自动创建一个没有参数的构造函数。

通过反射创建对象

package wm_io;



import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;



/*/

 *在java中可以通过以下两种方式通过反射创建对象

 *1.使用class类的newInstance()

 * 调用某个类的Class对象的newInstance()方法,可以获得与Class对象对应类的实例

 * 注意:使用Class类的newInstance()方法,要求与之对应的类必须提供无参的构造函数。

 * 

 * 2.使用Constructor类实现

 * javalang.reflect.Constructor类

 * 注意:使用Constror创建对象时,应首先获得类的Class对象,然后通过Class类获得Constructor类的实例

 */

public class test2 {

private String classroom;

public String getClassroom() {

return classroom;

}

public void setClassroom(String classroom) {

this.classroom = classroom;

}



private String nameString;



public String getNameString() {

return nameString;

}

public void setNameString(String nameString) {

this.nameString = nameString;

}

public test2(){

nameString="wm";

classroom="卓越软件";

}

public test2(String classroom,String nameString){

this.classroom=classroom;

   this.nameString=nameString;

}



public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{





/*1.使用class类的newInstance()

* 调用某个类的Class对象的newInstance()方法,可以获得与Class对象对应类的实例

* 注意:使用Class类的newInstance()方法,要求与之对应的类必须提供无参的构造函数。

* //使用构造方法创建类的实例

test2 test2=new test2();

//通过test2获得类的Class对象

Class c = test2.getClass();

//通过调用Class对象调用newInstance()方法,创建对象test22

test2 test22 =(wm_io.test2) c.newInstance();

//通过反射创建对象,获得类的信息

String name=test22.getNameString();

System.out.println(name);*/



/*

* 2.使用Constructor类实现

* javalang.reflect.Constructor类

* 注意:使用Constror创建对象时,应首先获得类的Class对象,然后通过Class类获得Constructor类的实例

* 通过有参数的构造方法创建对象时,使用Constructor

* 通过无参数的构造方法创建对象时,使用class类的newInstance()

*/

//获得类的class对象

 Class c=test2.class;

 //通过Class对象获得构造器对象

 Constructor constructor=c.getConstructor();

 //创建类的实例

 test2 test2=(wm_io.test2) constructor.newInstance();

 System.out.println("姓名和班级分别是:"+test2.getNameString()+test2.getClassroom());

 //下面使用有参的构造方法创建对象

 //获得类的构造器对象

 Constructor constructor2= c.getConstructor(String.class,String.class);

 //创建类的实例

 test2 test22=(wm_io.test2) constructor2.newInstance("wm","卓越软件1301");

 System.out.println("姓名和班级分别是:"+test22.getNameString()+test22.getClassroom());



/**

  * 通过反射获得类的接口

  

 Class c2= Class.forName("wm_io.test2");

 Class[] inte=c2.getInterfaces();

 for(int i=0;i<inte.length;i++){

 System.out.println(inte[i].getName());

 }*/



 /**

  * 通过反射获得其他类中的父类

  

  Class c2=Class.forName("wm_io.test2");

  Class su=c2.getSuperclass();

  System.out.println(su.getName());*/



  /**

   * 通过反射调用其它类中的方法

   



   Class c2=Class.forName("wm_io.test2");

   //调用sum方法

   Method method = c2.getMethod("sum");

   method.invoke(c2.newInstance());

  */

}

}

 

Java反射的概念
  反射含义:可以获取正在运行的Java对象。
  2、Java反射的功能
  1)可以判断运行时对象所属的类
  2)可以判断运行时对象所具有的成员变量和方法
  3)通过反射甚至可以调用到private的方法
  4)生成动态代理
  3、实现Java反射的类
  1)Class:它表示正在运行的Java应用程序中的类和接口
  2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限
  3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
  4)Method:提供关于类或接口中某个方法信息
注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)都需要它来实现

转载于:https://my.oschina.net/u/2265027/blog/472960

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值