zoukankan      html  css  js  c++  java
  • Java中的反射

    反射,曾经听说过,一致觉得,须要什么样的类,就写什么样的类,不就成了,何必去探究别人类中元素。所以一直没学习关于反射的东西。直到前几天看到改动ListView的高速滑块图像。看到须要用到反射

    昨天也就看了看反射

    先说概念

    反射就是载入一个执行时才得知名称的类,获悉其完整构造,并生成对象尸体。或对其变量设置或调用方法

    通俗地说就是了解类改动类

    了解类就是

    从构造方法 、成员变量、方法、各元素的修饰符了解类

    測试类:

    package test;
    
    public class MyObject {
    	public int a ,b;
    	public MyObject(){
    		
    	}
    	public MyObject(int a, int b) {
    		super();
    		this.a = a;
    		this.b = b;
    	}
    	
    	public int sum(){
    		return a+b;
    		
    	}
    	public int minus(){
    		return a-b;
    	}
    	public int multiply(){
    		return a*b;
    	}
    	public int divide(){
    		return a/b;
    	}
    
    }
    

    Class c = Class.forName("test.MyObject");

    从构造方法

    Constructor[] constructors = c.getConstructors();
    			for(int i = 0;i<constructors.length;i++){
    				System.out.println("------第"+i+"个方法----->>>"+constructors[i].toString());
    				System.out.println("----->>方法名:"+constructors[i].getName());
    				System.out.println("----->>修饰符:"+constructors[i].getModifiers());
    				
    				
    				Class p[]= constructors[i].getParameterTypes();
    				for(int j=0;j<p.length;j++){
    					System.out.println("參数j:"+p[j]);
    				}
    			}
    成员变量

    Field[] fields = c.getDeclaredFields();
    			for(int i = 0 ;i<fields.length;i++){
    				Field f =fields[i];
    				System.out.println("------->>变量名:"+f.getName());
    				System.out.println("------->>变量类型:"+f.getModifiers());
    				System.out.println("----->>修饰符:"+f.getType());
    			}

    方法:

    Method m[] = c.getDeclaredMethods();
    			for(int i = 0;i<m.length;i++){
    				System.out.println("------第"+i+"个方法----->>>"+m[i].toString());
    				System.out.println("----->>方法名:"+m[i].getName());
    				System.out.println("----->>修饰符:"+m[i].getModifiers());
    				System.out.println("------>>返回值 :"+m[i].getReturnType());
    				Class p[]= m[i].getParameterTypes();
    				for(int j=0;j<p.length;j++){
    					System.out.println("參数j:"+p[j]);
    				}
    			}
    从上述几个方面去了解类

    以下就是通过反射去应用类

    //创建类的对象
    			
    			Class[]p = new Class[2];
    			p[0]=int.class;
    			p[1]=int.class;
    			Constructor constructor =c.getConstructor(p);
    			Object object = constructor.newInstance(34 ,90);
    		 //改动成员变量
    			Field fielda= c.getField("a");
    			System.out.println("----->>改变前:"+fielda.get(object));
    			fielda.setInt(object, 190);
    			System.out.println("----->>改变后:"+fielda.get(object));
    			//调用类的方法
    			Method method1 = c.getMethod("sum");
    			Object sum = method1.invoke(object);
    			System.out.println("--->>加=="+sum);









  • 相关阅读:
    Notepad++64插件安装方法
    lucene、solr、nutch三者的关系
    更改MySQL数据库的编码为utf8mb4
    对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
    登录页面的表单验证(登录+密码 )
    MSYS2 环境搭建,并整合Qt
    QAbstractItemView为截断的项显示ToolTip(使用事件过滤)
    TraceTool 跟踪工具的瑞士军刀(C++版使用)
    Indy9的TIdFTPServer封装类
    Delphi 7学习开发控件(继承TGraphicControl只画一条线)
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6704763.html
Copyright © 2011-2022 走看看