zoukankan      html  css  js  c++  java
  • 反射机制

    反射的基本作用:运行期,根据对象名就能获得该对象的:类型方法属性

    基本的类定义如下:

    1 class Person {
    2 String name;
    3 int age;
    4
    5 public String toString(){
    6 return"name="+name+" age="+age;
    7 }
    8 }

    一、反射的作用 

      反射的作用1:根据“字符串类型的类名”创建“实例”

    String driverName="com.mysql.jdbc.Driver"; 
    try{
           Class.forName(driverName);
           System.out.println("Mysql驱动加载成功!\n");
       }catch(ClassNotFoundException e){
           System.out.println("未能找到Mysql驱动!");
       }catch(Exception e){
           e.printStackTrace();
           System.out.println("Mysql驱动加载失败!");
       }

      反射的作用2:根据“引用”获取“类名”

    1 System.out.println("开始测试反射机制。。。。");
    2 Person person_A=new Person();
    3
    4 //反射的作用一:根据对象名获取其类名
    5 Class c1=person_A.getClass();//会返回一个Class类型的实例
    6 System.out.println("person_A的类名为:"+c1.getName());

            运行结果如下:

           

     

    二、关于Class类

         a)两个常用方法:

             1)static Class forName(String className)

                 返回类名为className的Class对象

             2)Object newInstance()

                 返回当前类的一个新实例

          b)判断某个对象是否为某个类型

               理论依据:虚拟机为每个类型管理唯一 的一个Class对象

    1 if (person_A.getClass()==Person.class){
    2 System.out.println("类型相同!");
    3 }else{
    4 System.out.println("类型不同!");
    5 }

         c)创建一个类型相同的实例

    1 try {
    2 person_A.getClass().newInstance();
    3 } catch (Exception e) {
    4 e.printStackTrace();
    5 }

          d)类型名以字符串形式给出,创建其对象

    1 String s="com.reflection.Person";
    2 try { //若要在创建对象时传递参数,必须使用Constructor类中的
    3 Object o=Class.forName(s).newInstance(); //newInstance方法
    4 } catch (Exception e) {
    5 e.printStackTrace();
    6 }
  • 相关阅读:
    git整理
    oracle中utl_raw
    mysqltest语法整理
    oracle存储过程中拼接字符串及转义逗号
    oracle存储过程中循环游标,变量的引用
    oracle触发器
    oracle序列相关
    编译1
    面向对象的脚本语言的类的实现
    词法分析器
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2130007.html
Copyright © 2011-2022 走看看