您的位置:首页 > 编程语言 > Java开发

Java 反射 class类

2015-07-01 00:00 381 查看
构造函数跟创建对象的同时执行,构造函数可以重载,如果在建类的同时没有创建构造函数,系统会自动创建一个没有参数的构造函数。

通过反射创建对象

[code=language-java]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反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)都需要它来实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: