反射原理以及应用.

 

     反射已经讲了几天了. 但对放射这个概念自己还是懵懵懂懂的. 现在拿来复习一下.

     何为反射?反射(Reflection)是JAVA语言开发特性之一,它允许运行中的JAVA程序对自身进行检查.并能直接操作程序的内部程序. 例如. 使用它能获得JAVA程序中各个成员的名称并显示出来.

    1.我们先从Class类开始讲起.说到Class,大家并不会陌生吧.我们用JDBC操作数据库的时候.加载数据库连接的时候用到Class.forName();当一个类进行编译加载时.JVM会自动为其生成Class对象.我们可以调用Class对象获得该对象的所有成员并操作它们. 例如:

class Demo{
   
public static void main(String[] args){
     String name
="xiaolong";
     Class 
class=name.getClass();
      System.out.println(
"getname"+class.getName);
      System.out.println(
"获得该对象是否是接口"+class.isInterface);
      
//........isArry():是否是集合    isPrimetive();
}

        
}

      2.动态加载类.class.forName()方法.  我们先来了解.动态加载有何用处.   再JAVA程序中加载类有两种方式,1自动加载.由JVM完成.对程序员是透明的. 2.手动加载.由程序员用代码完成.    自动加载的话,方便,也就是说,如果用到该类的话.JVM会自从加载这个类.  手动加载的话,则灵活性比较高,对大系统的程序部署以及版本控制都有好处.  下面我们来演示如何动态加载一个类.

package com.txl.demo

import java.lang.Package;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public final class Demo1 {
    
public static void main(String args[]) throws Exception {
        Demo1 d 
= new Demo1();
    
//    d.get("java.net.InetAddress");
        d.get("com.yd.Demo1");
    }


    
public void get(String args) throws Exception {
        Class c 
= Class.forName(args);
        Demo1 d1
=(Demo1) c.newInstance();
        System.out.println(c.isInterface());
        System.out.println(c.getName());
        System.out.println(c.getMethods().length);
        
        Package p 
= c.getPackage();
        System.out.println(p.getName());
        
        
int m=c.getModifiers();
        System.out.println(Modifier.toString(m));
        Method m1
=c.getMethod("getHello",String.class);
        String s
=(String)m1.invoke(d1, "java爱好者");
        System.out.println(s);
    }

    
public String getHello(String name){
        
return "你好:"+name+"。这个是程序运行时动态调用的方法";
    }

}

        3.动态方法调用.再程序运行中间.可以动态的调用某个方法. 可以用Methord类的invoke()方法.

        反射涉及到的知识很多. 以后还得继续摸索.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值