java 反射 set方法_Java反射:赋值,设置,通过反射调用getter和setter方法,Tools类【诗书画唱】...

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

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

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

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

Class.forName()加载类

getDeclaredMethod

——————

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

//自己总结的语法(多记录自己总结的语法,之后用等):

//当setXXX等的方法有一个参数时

//

//setDeclaredMethod("setXXX",包装类类型名.class)fd93f4ac794c1a141f932dfe4582c96e.png

098bb1276de69652658860bc14e54bb0.png

ed1794c0f5ede2b793d0fa2701742a58.png

58f2d4f0cd9dc8fdc6abc0d7f76a7c87.png

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

6d14cf3283ffc256638374e62182dee2.png

//每个类没写东西时,有一个默认的构造方法

//(当写了自己建的构造方法时,默认构造方法就没有)

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;

}

}

cfa70975d57492bf81fe9ae687e691c9.png

5ce54d8032478f0f3a7d37697110e2dd.png

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();

}

}

}

53a52fda556b45a6f3da8ff4d22fbd08.png

b9bc7fa2d154e794a411863630d8e600.png

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

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;

}

}be4edc3346eb86c4a9e920e5c2cae68d.png

255595d037698858913d0eb1b6dd478a.png

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();

}

}

}

a770f3f470d267168903ed207f94f350.png

98b11a5931065b1b54c723ea8187d521.png

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);

}

}f956663ef461d7b852a4a29b7253a5df.png

package ClassfanShe;

public class Student {

String propertyName;

Integer age;

}62943f7e1eb8efd98f4e008da47bada8.png

d62506886cdb10acc0f492958658f85c.png

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;

}

}

e0229166db1ee3b60a2adfc130bbe47b.png

6112dc008b79a1983fb5c08802073ff4.png

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();

}

}

}

02ca648e6e15fc4d9a10a35db93d60c1.png

de1499423e369c27b912fdbdaabca91d.png

467eea33f442fc752276ca326598c36f.png

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();

}

}

}cdd7539487f83a03ba4eb1422053297a.png

c5346d41bf02b59340897f786bf22886.png

20b22bc6a2be3a94cadc6f4957154bc9.png

8ecdadcaf616bb184df82a63647d3bde.png

eeff67878e5fa8281d4fd4242ff62816.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值