黑马程序员——反射总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

什么是反射?

毕老师说“万物皆对象”,每个Java类可以构成一个对象,同时每个Java类也可以由一个Class类封装成对象,反射就是把类中的成员变量,构造函数,方法,包都封装成类,在封装的类中,操作类和类中的成员。

为什么要用反射?

在框架结构中反射用的最多,这就像生产一部汽车,我们这里有一副汽车构造图,而轮子,车身,发动机等车的部件通过不同的部门生产出来,最后装配在一起,实现了流水线高效率的生产!我们程序员开发软件,框架就像软件开发的构造图,我们每个程序员不同的功能部分,最后所有程序员开发的代码拼在这个框架中,实现了软件高效率的开发!而在这个框架做好时,不同的功能部分的实现只要通过反射调用各个类,就可以实现不同功能模块的组装!反射对高效率的开发是很关键的!

Class对象三种实现方式

Class  cls1= String.class;

Class  cls2 = new string().getClass();

Class cls3 = Class.forName("java.lang.String");

构造函数的反射

获取构造函数的Constructor对象

byte[] a = new byte[3];

Constructor constuctor1 = Class.forName("java.lang.String").getConstructor(byte[].class,int.class,int.class);

Constructor constuctor2= Class.forName("java.lang.String").getConstructors();

通过Constuctor建立对象

String str1 = constuctor.newIntance(a,0,a.length);

注意:cls1.newInstance()也是可以直接创建对象的

成员变量的反射

class Student

{

public int x;

private int y;

Student(int x,int y)

{

this,x = x;

this.y = y;

}

}

Student stu = new Student(2,3);

获取成员变量的Field类对象

Field field1 = Class.forName("java.lang.Student").getField("x");

Field field2 = Class.forName("java.lang.Student").getFields();

Field field3 = Class.forName("java.lang.Student").getDeclaredField("y");

获取Field类对象的值

field1.get(stu);

field3.setAccessible(ture);

field2.get(stu);

修改成员变量的值

field1.set(stu,3);

方法的反射

获取方法Method类对象

String str = new String("abced");

Method method1 = str1.getClass().getMethod("CharAt",int.Class);

Method method2 = str1.getClass().getMethods();

调用某个对象的方法

method1.invoke(str,2);

注意,如果method1.invoke(null,2)表示调用的是静态方法

在jdk 1.4版本中调用应该为method1.invoke(str,new Object[]{2});

数组的反射

获取数组的Class对象

int[] a = new int[3];

int[] b = new int[4];

int[] [] c = new int[3][4];

String[] d = new String[3];

Class cls1 = a.getClass();

Class cls2 = b.getClass();

Class cls3 = c.getClass();

Class cls4= d.getClass();

其中 cls1 == cls2,只要类型和维度一样,数组的Class对象即相等

创建数组对象

Object  array =Array.newInstance(cls1,10);

为数组某个位置赋值

Array.set(array,5,4)

获取数组的值

Array.get(array,5);

 1 练习:
 2 写一个程序,这个程序能够通过用户指定的类名去执行该类的main方法。
 3 package bolgtest;
 4
 5 import java.lang.reflect.Method;
 6
 7 public class BolgTest1 {
 8  public static void main(String[] args) throws Exception{
 9
10   Class cls = StudentTest.class;
11   Method method = cls.getMethod("main", String[].class);
12   method.invoke(null, new Object[]{new String[]{"abc","dgf"}});
13
14  }
15
16 }
17
18
19 package bolgtest;
20 public class StudentTest{
21  public static void main(String[] args){
22   Student stu = new Student("zhangshan",23);
23   System.out.println(stu);
24  }
25 }
26 class Student {
27  private String name;
28  private int age;
29
30  public Student(String name, int age) {
31   super();
32   this.name = name;
33   this.age = age;
34  }
35
36  public void setName(String name) {
37   this.name = name;
38  }
39
40  public String getName() {
41   return name;
42  }
43
44  public void setAge(int age) {
45   this.age = age;
46  }
47
48  public int getAge() {
49   return age;
50  }
51  public String toString()
52  {
53   return "name = " + name + "...." + "age = " + age;
54  }
55
56
57
58 }
59
60
61
62
63
64     
时间: 2024-10-01 02:20:18

黑马程序员——反射总结的相关文章

黑马程序员——反射机制

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 反射机制 下面我们一起来探讨一下java的反射机制吧!功能太强大了,哈哈!  (一).  定义 Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并

黑马程序员——反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法.我们朗朗上口

黑马程序员------反射机制

------- android培训.java培训.期待与您交流! ---------- 1.1 反射机制 * JAVA反射机制是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法: * 对于任意一个对象,都能够调用它的任意一个方法和属性: * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. * * *反射其实就是动态加载一个指定的类,并获取该类中的所有的内容. *而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操

黑马程序员——反射实战

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     public static void main(String[] args) {

黑马程序员—反射篇

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- 1:获取字节码的三种方式: Employee emp=new Employee(); Class clazz1=Employee.class; Class clazz2=Class.forName("java.util.HashSet"); Class clazz3=emp.getClass(); 2:通过字节码获取对象: Employee enp=(Employee) clazz2.newInsta

黑马程序员——高新技术---反射

黑马程序员——高新技术---反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射把Java类中的各种成分映射成相应的Java类,例如一个Java类中用一个Class类的对象表示,一个类中的组成部分:成员变量,方法,构造方

黑马程序员_Java反射机制

一切的操作都将使用Object完成,类,数组的引用都可以使用Object来接收 1,认识Class类 以前要是想知道一个类中的属性,成员变量,方法等等的信息的话,需要通过new这个类的对象才能得到这些信息,但是在Java中,也允许一个实例化对象找到一个类的完整的信息,这个类就是Class类,Class类是继承Object类的. 正常方式:  引入需要的"包.类"名称 >取得实例化对象 反射方式:  实例化对象>得到完整的"包.类"名称 getClass(

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

黑马程序员_高新技术_1_Java反射

------- android培训.java培训.期待与您交流! ---------- 0.反射知识体系 下图为反射整体的知识体系,把握住此图也就全局上掌握住反射所有内容. 1.反射概论 1)反射概念 其实字面上可以这么理解反射,平时使用类时都是由类new出对象,而反射则是通过对象"反射"出类的信息,好比一个人照镜子可以看到人类的特征,而看出机制就是镜子反射. 2)Java对象两种类型 Java程序中的许多对象在运行时会出现两种类型:编译时类型和运行时类型.如下代码: Person p