一、反射出如下类中的方法->属性->对象
public class Preson { public String name; private int age; public void setName(String name) { this.name = name; } private String getName() { return name; } public Preson() { } public Preson(String name, int age) { this.name = name; this.age = age; } }
二、在mainAcivity中做 具体操作
package com.bwei.lenovo.day02relfect; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射: * 类-------class * 属性-------Field * 方法-------Method * 构造-------Constroctor */ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取控件 Button start = (Button) findViewById(R.id.start); // 点击事件 start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { //根据类名(全称)获取字节码文件对象 Class<?> clz = Class.forName("com.bwei.lenovo.day02relfect.Preson"); //获取无参构造器(参数根据你要获取的构造方法填)------无参构造不用填写参数 Constructor<?> constructor = clz.getConstructor(); //通过构造器获取实例 Preson p = (Preson) constructor.newInstance(); Log.d("MainActivity", "onCreate无参构造------" + p); // 获取有参构造器 Constructor<?> constructor1 = clz.getConstructor(String.class, int.class); Preson p1 = (Preson) constructor1.newInstance("小公举", 18); Log.d("MainActivity", "onCreate有参构造---"+p1); /**--------------属性-----------------------------*/ Field name = clz.getField("name");//获取公有变量 Field age = clz.getDeclaredField("age");//获取私有的 //使用私有变量时记得(打开权限) age.setAccessible(true); Log.d("MainActivity", "onClick:" + name + "----" + age); /**----------------方法---------------------------------*/ //公有的方法 Method setName = clz.getMethod("setName", String.class); // 调用 setName.invoke(p, "小宝贝i,小仙女"); Log.d("MainActivity", "onClick====" + p.name); // Declared 忽略 Method getName = clz.getDeclaredMethod("getName"); //非法访问异常,拒绝访问 //java.lang.IllegalAccessException: access to method denied getName.setAccessible(true);//不加会报错(如上:) String s = (String) getName.invoke(p); Log.d("MainActivity", "---------------------"+s); } catch (Exception e) { e.printStackTrace(); } } }); } }