1.bean
public class StudentBean {
private String name = "ZHUHUOHOU真美";
private String sex;
private int age;
public StudentBean(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public void getInfo(String name){
Log.e("啦啦啦啦",name);
}
public StudentBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "StudentBean{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
2.MainActivity
public class MainActivity extends AppCompatActivity {
@BindView(R.id.field_btn)
Button fieldBtn;
@BindView(R.id.method_btn)
Button methodBtn;
@BindView(R.id.constr_btn)
Button constrBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//首先要获得字节码对象
studentBean = new StudentBean();
aClass = studentBean.getClass();
}
@OnClick({R.id.field_btn, R.id.method_btn, R.id.constr_btn})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.field_btn:
//反射获取属性
getField();
break;
case R.id.method_btn:
getMethod();
break;
case R.id.constr_btn:
getConstr();
break;
}
}
private void getConstr() {
Constructor<?>[] constructors = aClass.getDeclaredConstructors();
for (Constructor c: constructors) {
Log.e("构造方法",c.getName());
}
try {
Constructor<? extends StudentBean> constructor = aClass.getDeclaredConstructor(String.class,String.class,int.class);
Object o = constructor.newInstance("ZHUHUOHUO","真美",18);
Log.e("获取构造",o.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
private void getMethod() {
Method[] methods = aClass.getDeclaredMethods();
for (Method m:methods) {
Log.e("方法",m.getName());
}
try {
Method method = aClass.getDeclaredMethod("getInfo", String.class);
StudentBean studentBean = aClass.newInstance();
method.invoke(studentBean,"ZHUHUOHUO");
} catch (Exception e) {
e.printStackTrace();
}
}
private void getField() {
//得到该类的所有成员变量
//所有public修饰的变量
Field[] fields = aClass.getDeclaredFields();
//所有变量包括private
//aClass.getFields();
for (Field f : fields) {
Log.e("变量",f.getName());
}
try {
Field field = aClass.getDeclaredField("name");
//暴力反射
field.setAccessible(true);
Object o = field.get(studentBean);
if(o instanceof String){
Log.e("变量",o.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}