每次写代码等最好是总结一些重点代码单词或自己总结的语法或自己的理解等来记忆等,别的方面等也要自己学会总结一些自己认为重要的内容等——诗书画唱

自己认为常用的,用处大等的就是我所认为重要的等等。——诗书画唱

————————————

部分自己认为重要的单词(以后会专门写在一个或几个专栏里,因为合集的话,在记忆和阅读等方面比较爽等。)

Class.forName()加载类

getDeclaredMethod

——————

自己总结的语法或重要提醒内容等:

//自己总结的语法(多记录自己总结的语法,之后用等):
//当setXXX等的方法有一个参数时
//
//setDeclaredMethod("setXXX",包装类类型名.class)

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_02

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_03

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_04

1、创建Product商品类,包含商品名称name和商品价格price两个属性以及getter和setter,通过反射调用Product的getter和setter方法,设置商品名称是卫龙辣条,价格是6.5并打印出来。

java反射执行某个方法怎么保证参数正确 java反射执行set方法_System_05

//每个类没写东西时,有一个默认的构造方法
//(当写了自己建的构造方法时,默认构造方法就没有)
package ClassfanShe;
//下面的class前不可加public等
class Product {
String name;
//下面的price等前面不可以用double,最好都用包装类Double等:
Double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_06

java反射执行某个方法怎么保证参数正确 java反射执行set方法_System_07

package ClassfanShe;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class PsetGet {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class c = Class.forName("ClassfanShe.Product");
Object nameSet = c.newInstance();
//  用getDeclaredMethod获取到setXXX方法:
Method Method1 = c.getDeclaredMethod("setName",String.class);
// 用invoke调用getXXX方法:
Method1.invoke(nameSet, "卫龙辣条");
// 用getDeclaredMethod获取getXXX方法
Method Method2 = c.getDeclaredMethod("getName");
Object nameGet = Method2.invoke(nameSet);
System.out.println((String)nameGet);
//——————————
//自己总结的语法(多记录自己总结的语法,之后用等):
//当setXXX等的方法有一个参数时
//
//setDeclaredMethod("setXXX",包装类类型名.class)
Method Method11 = c.getDeclaredMethod("setPrice", Double.class);
Object priceSet = c.newInstance();
Method11.invoke(priceSet, 6.5);
Method Method22 = c.getDeclaredMethod("getPrice");
Object priceGet = Method22.invoke(priceSet);
System.out.println(priceGet);
//——————————
System.out.println("商品名称是"+nameGet+",价格是"+priceGet+"元");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_08

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_09

2、定义一个类Person,包含属性name、age。使用反射的方式创建一个实例、使用反射方式给name和age属性赋值为小明和18岁。

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_10

package ClassfanShe;
public class Person {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_11

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_12

package ClassfanShe;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class PersonFS {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class c = Class.forName("ClassfanShe.Person");
Object nameSet = c.newInstance();
Method Method1 = c.getDeclaredMethod("setName",String.class);
Method1.invoke(nameSet, "小明");
Method Method2 = c.getDeclaredMethod("getName");
Object nameGet = Method2.invoke(nameSet);
//——————————
Method Method11 = c.getDeclaredMethod("setAge", Integer.class);
Object ageSet = c.newInstance();
Method11.invoke(ageSet, 18);
Method Method22 = c.getDeclaredMethod("getAge");
Object ageGet = Method22.invoke(ageSet);
//——————————
System.out.println("诗书画唱告诉你,此人为"+nameGet
+",年龄为"+ageGet+"岁");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_13

java反射执行某个方法怎么保证参数正确 java反射执行set方法_System_14

3、创建一个Tools类,定义一个带两个Integer类型参数的add方法,返回值是这两个参数的和,通过反射调用这个方法,并打印出结果。

上面的类中再定义一个方法,此方法可以获取obj对象中名为propertyName的属性的值(个人理解:就是属性名,取名不一定为propertyName)。

上面的类中再定义一个方法,此方法可将obj对象中名为propertyName的属性的值(个人理解:就是属性名,取名不一定为propertyName)设置为value.

下面提供参考,不一定要用:

public class Tools {
public void setProp(Student obj,String propName,Object value){
//..
}
public static void main(String[] args) {
Tools t = new Tools();
Student s = new Student();
t.setProp(s, "name","李四");
t.setProp(s, "age",12);
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_15

package ClassfanShe;
public class Student {
String propertyName;
Integer age;
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_16

java反射执行某个方法怎么保证参数正确 java反射执行set方法_System_17

package ClassfanShe;
class Tools {
Integer a;
Integer b;
private Student obj;
private String propName;
private Object value;
public int add(Integer a,Integer b) {
return a + b;
}
public  String setProp(Student obj,String propName,Object value){
return propName;
}
public  Object setProp(Student obj,Object propName,Object value){
return propName=value;
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_18

java反射执行某个方法怎么保证参数正确 java反射执行set方法_System_19

package ClassfanShe;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class ToolsFS {
public static void main(String[] args) {
try {
System.out.println("下面是调用获取属性名字的方法:");
Class c = Class.forName("ClassfanShe.Tools");
Object nameSet = c.newInstance();
Method Method1 = c.getDeclaredMethod("setProp",
Student.class,String.class,Object.class);
Tools t = new Tools();
Student s = new Student();
//t.setProp(s, "name","李四");
//
//t.setProp(s, "age",12);
System.out.println("1:"+
Method1.invoke(nameSet, s, "name","李四")+"\n");
System.out.println("2:"+
Method1.invoke(nameSet, s, "age",12)+"\n");
System.out.println("将obj对象中名为"
+ "属性名设置为value并且返回出来:");
Method Method11 = c.getDeclaredMethod("setProp",
Student.class,Object.class,Object.class);
System.out.println("1:"+
Method11.invoke(nameSet, s, "name","李四")+"\n");
System.out.println("2:"+
Method11.invoke(nameSet, s, "age",12)+"\n");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_20

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_21

java反射执行某个方法怎么保证参数正确 java反射执行set方法_包装类_22

package ClassfanShe;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class TwoFS {
public static void main(String[] args) {
try {
System.out.println("下面是调用add方法:");
Class c = Class.forName("ClassfanShe.Tools");
Object nameSet = c.newInstance();
Method Method1 = c.getDeclaredMethod("add",
Integer.class,Integer.class);
System.out.println("1+2="+ Method1.invoke(nameSet, 1,2)+"\n");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_23

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_24

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java 反射 set方法_25

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_26

java反射执行某个方法怎么保证参数正确 java反射执行set方法_java_27