Java基础-----反射

原创 2015年07月08日 18:02:15


什么是反射

           Java不是动态语言,但是它却有着一个非常突出的动态相关机制:Reflection 就是反射机制

       反射是java语言的一个特性,在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。

哪里用到了反射机制
        比如JDBC的一段代码Class.forName("com.mysql.jdbc.Driver.class").newInstance();

        还有主流的SSH框架都用到了反射技术

反射机制的优缺点

             反射机制的优点就是可以实现动态创建对象和编译

                                  静态编译:在编译时确定类型,绑定对象,即通过。
                                  动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,

                                                    体现了多态的应用,有以降低类之间的藕合性。

            反射机制的缺点就是对性能有影响,执行效率低

反射的具体实现

    通过反射获取类

         //第一种方式:
        Class  clazz1 = Class.forName("java.lang,String");
        //第二种方式:
        Class clazz2 = String.class;
        //第三种方式:
        String str = new String();
        Class clzz3 = str.getClass()
通过反射创建对象      
        Class c =Class.forName("java.lang,String");
        //创建实例
        Object str1 = c.newInstance();
获得类的所有属性
        Class clazz = Class.forName("java.lang.String");
        //获取所有的属性
        Field[] field = clazz.getDeclaredFields();
        //存储属性
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(Modifier.toString(clazz.getModifiers()) + " class " + clazz.getSimpleName() + "{\n");
        //每一个属性
        for(Field f:field){
            stringBuffer.append("\t");
            stringBuffer.append(Modifier.toString(f.getModifiers()) + " ");
            stringBuffer.append(f.getType().getSimpleName() + " ");
            stringBuffer.append(f.getName() + ";\n");
        }
        stringBuffer.append("}");
        System.out.println(stringBuffer);
获得类的指定属性
        //获取类
        Class clazz = Class.forName("test.Test");
        //获取hash属性
        Field field = clazz.getDeclaredField("name");
        //创建对象
        Object object = clazz.newInstance();
        //可访问
        field.setAccessible(true);
        //给field对象的hash属性赋值1
        field.set(object, "hello");
        System.out.println(field.get(object));


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java基础之—反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...
  • sinat_38259539
  • sinat_38259539
  • 2017年05月13日 13:29
  • 3366

【框架基础】:Java反射机制详解(一)

在学习框架设计之前,先来了解一下框架基础——Java反射机制。         一、什么是反射机制         反射机制是在程序运行状态时,对于任意一个类,都能够知道这个类的所有属性和方法;对...
  • erlian1992
  • erlian1992
  • 2016年11月29日 15:13
  • 1356

Java进阶之reflection(反射机制)——反射概念与基础

这里写链接内容  反射机制是Java动态性之一,而说到动态性首先得了解动态语言。那么何为动态语言?一、动态语言动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的...
  • xu__cg
  • xu__cg
  • 2016年10月20日 22:00
  • 2431

Java中的反射基础知识

1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数、属性、父类、接口等 Class 内部信息的机制。通过反射还可以让我们在运行...
  • linghu_java
  • linghu_java
  • 2016年03月28日 22:00
  • 853

(Java基础--反射)框架的概念及用反射技术开发框架的原理

框架的概念及用反射技术开发框架的原理 一、概述 1、框架:通过反射调用Java类的一种方式。         (框架与房子非常类似,使用的用户写的程序写配置文件,就相当于给房子装修)   ...
  • ZuoAnYinXiang
  • ZuoAnYinXiang
  • 2016年01月10日 21:06
  • 1387

Android插件化开发基础之Java反射机制研究

一、获得Class对象 Class c = Class.forName("classname"); 抛出ClassNotFoundException 二、获得实现接口 Class inters[...
  • u011068702
  • u011068702
  • 2015年11月16日 11:47
  • 1295

利用java的反射机制实现通用dao

java的反射机制前面已经讲过,这里不再赘述,这篇文章将会利用反射,来实现一个通用的dao层。 1 一般情况下的dao层我们先来看一下,通常,我们是如何写dao的。public class Perso...
  • qq_31655965
  • qq_31655965
  • 2016年08月15日 17:27
  • 1831

Java反射获取基本类型、包装类型、String对象类型的字段值

package com.zkn.reflect.classinfo; import java.lang.reflect.Field; import java.lang.reflect.Type; im...
  • zknxx
  • zknxx
  • 2015年05月28日 13:14
  • 11222

java面试题--java反射机制

Java反射机制的作用: 1)在运行时判断任意一个对象所属的类。 2)在运行时判断任意一个类所具有的成员变量和方法。 3)在运行时任意调用一个对象的方法 4)在运行时构造任意一个类的对象 ...
  • snn1410
  • snn1410
  • 2015年04月10日 15:04
  • 13081

JAVA reflect (反射) 分析类结构

一、数据准备Java反射用到的Human类package ReflectAnalysis;public class Human { public String name; privat...
  • tterminator
  • tterminator
  • 2016年04月26日 13:25
  • 633
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础-----反射
举报原因:
原因补充:

(最多只允许输入30个字)