7.21总结——反射的用法

今天一天就讲了一个反射,其实反射本身很简单,只是运用起来相对复杂;

先说说反射是干嘛的吧!反射的强大之处就在于他可以通过.class的文件,调用原生Java文件中的任何属性,方法,不管是私有还是公共的。

注意:反射调用的类一定要有一个无参的构造器

  现在介绍一下获取反射模板的三种方式:

    1)类名.class

      eg:Class clazz1=Reflect01.class;

    2)先new对象,在用对象.getClass获取

      eg:Reflect01 reflecto1=new Reflect01();
        Class clazz2=reflecto1.getClass();

    3)Class.forName(包名+类名)

      eg:Class clazz3=Class.forName("com.cdsxt.test.vo.User");这里会抛异常,是因为路径可能不对,需要trycatch

反射几个常用的API:

  getSimpleName:获取类名;

  getName:1)Class类中的getName方法:获取包名+类名,即全类名

        2)Field类中的getName方法:获取属性的名字

  getPackage:获取包名,即从src下的全部包路径

  getType:Field类中的getType方法:获取属性的类型

  getField:获取所传参数的属性对象

  getFields:获取该类中的所有属性对象

  getDeclaredField和getDeclaredFields:获取私有的属性对象,只要有Declared都可以获取私有的方法,属于。。。。

  newInstance:获取类对象

/*
* 设置属性值的方法
* 1)a) 获取属性对象:clazz.getField("属性名")
* b) 获取类对象:clazz.newInstance();
* c) 通过set方法赋值:获取到的属性对象.set(获取到的类对象, 值);
* d) 通过get方法的到值:获取到的属性对象.get(获取到的类对象)
*/

/*
* 通过反射模板获取方法的方式 和调用方法的方式
* 1)三种方式获取类,类名.class,Class.forName("包名+类名"),先new对象,在用对象.getClass
* 2)clazz.getMethods()返回方法数组,clazz.getMethod(方法名 ,参数列表【类型.calss】 );私有的就加Declared
* 3)getName()获取方法名,getReturnType()获取返回值类型
*/
/*
* 通过方法对象 调用方法1
* 1)a)获取模板上的方法:getDeclaredMethod("方法名字")
* b)invoke方法:method.invoke(obj);无参不传,有参传方法对应的参数,另外,静态传null,非静态传obj
* c)最后达到调用该方法的目的
*
*/

反射的应用:利用反射来封装数据库的增删改查方法,好处在于,可以查询任何类型表

在用反射封装时,还用到了泛型参数,泛型简单点说就是不确定类型,你传什么类型的参数,泛型就代表什么类型。

  

  

时间: 2024-09-30 10:06:02

7.21总结——反射的用法的相关文章

c# 反射简单用法例子

闲来无事,看了下反射的实现,写了个小例子. 新建一个类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WfmReflection { class MyClass { public string m; public void test() { } public int MyProperty { get; set; } } } 建一个类库 using S

java反射的用法

反射(运行时的类信息),在java里面得到了大量的使用,尤其是在一些框架里面(注解等等),多多少少都会用到反射,了解java的反射,对我们以后学习框架和写框架都会起到非常的重要! Class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包括了FieId.Method以及Constructor类.这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员.这样你就可以使用Constructor创建新的对象,用get()和set()方法读取和修改与FieId对象

反射的用法之二

1.采用配置文件使用反射 2. 配置文件 App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <appS

Java 反射经常用法演示样例

<pre name="code" class="java">import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; class Point{ int x; private int y; public Point(){ x = 1; y = 2; } public void setX(int x) { thi

反射的用法

1.加载dll Assembly ass = Assembly.LoadFile(dllPath); 2.取public的方法Type Type[] types = ass.GetExportedTypes(); 3.继承接口Ixx types = type.Where(p=>typeof(Ixx).IsAssignableFrom(type)); 4.创建实例 Ixx xx = (Ixx)Activator.CreateInstance(type);

Java 反射的用法 有关Class类的解释

package com.imooc.test; public class ClassDemo1 { public static void main(String[] args) { Foo fool = new Foo();//foo1就表示出来了 //Foo 这个类也是一个实例对象,Class类的实例对象,如何表示呢 //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式---> 实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class cl =

java反射--Field用法实践

Field是一个位于java.lang.reflect包下的类,用来描述类的属性信息,功能主要包括: 获取哦大年对象的成员变量类型 对成员变量重新设值 Field类对象: Class.getFields(): 获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段getDeclaredFields(): 获取类中所有的属性(public.protected.default.private),但不包括继承的属性,

C# 反射基础用法

1.引用命名空间 using System.Reflection; 2.Type t = Type.GetType("Class"); 获取类 3.MethodInfo Method = t.GetMethod(MethodName); 获取方法 方法名为MethodName string类型 4.Method.Invoke(this,obj); 调用 obj为object类型数组,是调用方法的参数 原文地址:https://www.cnblogs.com/nimayax/p/1059

Java基础之反射

Java反射是指运行时获取类信息,进而在运行时动态构造对象.调用对象方法及修改对象属性的机制.百度百科的定义:“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 一.反射的用途 Java的反射机制可以做3件事:运行时创建对象.运行时调用方法.运行时读写属性.进而实现以下功能:调用一些私有方法,实现黑科技.比如双卡短信发送.设置状态栏颜色.自动挂电