`
heimeiyingwang
  • 浏览: 94160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

corejava辅导(15)

阅读更多

反射

 

反射,在运行时,动态分析或使用一个类进行工作。

类对象,是一个描述这个类信息的对象,对虚拟机加载类的时候,就会创建这个类的类对象并加载该对象。Class,是类对象的类型。只有对象才会被加载到虚拟机中。一个类只会被加载一次。

 

获得类对象的三种方式:(类对象不用new的方法得到的)

 

1)也可以用 类名.Class,获得这个类的类对象。

2)用一类的对象掉用a.getClass(),得到这个对象的类型的类对象。

3)也可以使用Class.forName(类名)Class类中的静态方法),也可以得到这个类的类对象,(注意,这里写的类名必须是全限定名(全名),是包名加类名,XXX.XXX.XXXX)。强制类加载,这种方法是经常使用的。

 

注意:一个类的类对象是唯一的。

在使用Class.forName(类名)时,如果使用时写的类名的类,还没有被加载,则会加载这个类。

Class cc.getSuperclass()这个方法是获得这个类的父类的类对象。c.getInterfaces()会获得这个类所实现的接口,这个方法返回是一个类对象的数组。

 

Object newInstance()方法是Class类的方法,他可以经调用默认构造方法生成类对象所淼书的类的对象

 

注意:一个接口也会对应一个类对象

 

类对象所包含的描述类的信息

 

方法对象

 

方法对象是类中的方法的信息的描述。java.lang.reflect.Method,方法类的对象可以通过类对象的Method[] getMethods() 方法获得,获得的是一个方法对象的数组Method[],获得类中的定义的所有方法对象,也可以通过Method getMethod(String name, Class... parameterTypes),可以获得指定方法名和参数类型的方法对象,构造方法除外。

 

构造方法对象

 

构造方法对象,是用来描述构造方法的信息。java.lang.reflect.Constructor构造方法类的对象可以通过类对象的Constructor[] getConstructors()方法获得,获得这个类的所有构造方法对象Constructor[],也可以使用Constructor getConstructor(Class... parameterTypes)  方法可以获得参数类型的构造方法,getConstructor(null)这样就可以获得无参的构造方法。我们可以通过构造方法对象来获得类对象描述的类的对象,Object newInstance(Object[] initargs) 方法可以生成类对象描述的类的对象,且可以调用带参的构造方法升成类对象描述的类的对象Object[]数组,就是用来存放参数的。

属性对象

 

属性对象,使用来描述属性的信息。java.lang.reflect.Field属性类的对象对象可以通过类对象Field[] getFields() 这个方法是获得所有属性的属性对象Field[],可以通过Field getField(String name) 方法来获得指定的属性。

 

反射可以获取这个类中定义的方法和属性的信息,简单数据类型在使用反射时要转换成封装类。

反射可以通过类对象操纵类,生成这个类的对象,调用方法等等。

 

使用反射构造一个类的对象的步骤

 

1,获得类对象(类对象是对类的信息的描述)

2,获得构造方法对象(方法对象是类中的方法的信息的描述)

3,获得对象(用构造方法对象掉用构造方法,如果是使用无参构造方法,可以跳过第2部,直接使用类对象.newInstance() 方法来获得这个类的对象)

4,获得方法对象。

5,用方法对象调用方法(用这个类的对象作为第一参数)。

这里在调用方法时,方法的参数表,是用用类对象数组表示参数类型的。

其他有关于反射的方法可以查阅API文档。java.lang.Class,java.lang.reflce 

反射提供了最大的通用性,反射可以绕过编译器,反射可以访问对象的私有属性和方法。

 

import java.lang.reflect.*;

public class TestReflect {

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

        

         //1.获得类对象

         Class c=Class.forName("Student");

         //2.获得构造方法对象

         Class[] cs={String.class};

         Constructor con=c.getConstructor(cs);//按照参数表来调用制定构造方法。

         //3.创建类对象描述的类的对象

         Object[] os={"liucy"};

         Object o=con.newInstance(os);//为构造方法传参,并获得对象。

         //4.获得准备调用的方法对象

         String methodName="study";

         Class[] pcs={String.class};

         Method m=c.getMethod(methodName,pcs);//按照参数表来获得制定的方法对象

         //5.对对象调用方法

         Object[] ocs={"EJB"};

         m.invoke(o,ocs);

        

     }

 

}

class Student{

     private String name;

     public Student(String n){

         this.name=n;

     }

     public void study(String course){

         System.out.println(name+" studies "+course);

     }

     public void eat(String food){

         System.out.println(name+" eats "+food);

     }

}

 

class Teacher{

     String name;

     public Teacher(String n){

         this.name=n;

     }

     public void teach(String course){

         System.out.println(name+" teaches "+course);

     }

}

分享到:
评论

相关推荐

    CoreJava全套详细笔记资料.pdf

    CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了Java语言的基础知识和高级应用。以下是对给定文件的详细解读和知识点总结: 一、原码、反码、补码 * 原码是指一个数的二进制表示形式,...

    达内 CoreJava老师笔记汇总

    CoreJava DAY15 异常、断言 98 CoreJava DAY16 反射、注释 108 CoreJava DAY17 GUI 120 CoreJava DAY18 awt event 146 CoreJava DAY19-20 多线程 154 CoreJava DAY21-22 IO 174 CoreJava DAY23 网络编程 197

    Core Java

    【Core Java】是Java编程的基础教程,主要涵盖了Java语言的核心概念和使用方法。在学习Core Java时,首先要理解以下几个关键知识点: 1. **类与对象**:类是面向对象编程的基础,是描述某一类事物共性的抽象,而...

    达内Java培训-CoreJava全程笔记(WORD唐亮版)

    CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰符 26 CoreJava DAY08 常用类 29 CoreJava DAY09 高级语言特征 30 CoreJava DAY10 主方法,...

    Core Java for the Impatient azw3

    Core Java for the Impatient 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】

    Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】内附资源: Core Java. Volume I. Fundamentals, 8th Edition.pdf ; Core Java. Volume II. Advanced Features, 8th Edition.chm ; Core Java 8th ...

    core java 复习总结

    core java 复习,简单的对core java 复习

    Core Java 学习必备PPT(CoreJava教案)

    Core Java 学习必备PPT(CoreJava教案)

    corejava核心技术

    corejava核心技术中文版包1 corejava核心技术中文版

    core java1&2

    《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...

    CoreJava面试题

    CoreJava基础及语法部分笔试题

    java--corejava学习黄金代码

    要想学习java corejava是java之旅的最重要的入门知识,本人在学习corejava中练习过的最重量级的代码! 希望对新手有所帮助!

    corejava核心技术分卷压缩2

    corejava核心技术分卷压缩2corejava核心技术分卷压缩2

    corejava(source)

    《深入解析CoreJava源码》 CoreJava是Java编程领域中的经典教材,其源码对于初学者和有经验的开发者来说都是宝贵的资源。通过研究CoreJava的源码,我们可以更深入地理解Java语言的底层机制,提升编程技能,并且能够...

    Core Java Professional For First Time Learner's(2nd) mobi

    Core Java Professional For First Time Learner's(2nd) 英文mobi 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    CoreJava CoreJava

    《CoreJava CoreJava CoreJava 基础学习》 在Java编程领域,"CoreJava"通常指的是Java语言的核心部分,不涉及高级特性如Java EE(企业版)或Android开发。这个概念涵盖了Java语言的基础语法、类库以及面向对象编程...

    core java 示例代码

    新手们可通过示例代码学习core java

    Core Java Volume II Advanced Features__10th edition

    Core Java® has long been recognized as the leading, no-nonsense tutorial and reference for experienced programmers who want to write robust Java code for real-world applications. Now, Core Java®, ...

Global site tag (gtag.js) - Google Analytics