「java反射取值」java通过反射获取字段的值

博主:adminadmin 2023-01-11 08:39:09 61

本篇文章给大家谈谈java反射取值,以及java通过反射获取字段的值对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA中反射是什么

JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。

Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。

扩展资料:

JAVA中反射实例:

1、Class superClass=clazz.getSuperclass();//获取父类。

System.out.println("getSuperclass:"+superClass)。   

2、Class[] interfaces=clazz.getInterfaces();//获取实现接口。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors();//构造方法。

System.out.println("getConstructors:"+cons.length)。

参考资料来源:百度百科: JAVA反射机制

在JAVA中,怎么利用反射获取一个方法?

java的反射用法:(异常请自行处理)

①找到类:Class cl = Class.forName("java.util.Date");

②创建对象(要求这个类中含有空参数的构造方法):Object obj = cl.newInstence();

③根据名称和参数找方法:Method method1 = cl.getMethod("getTime");//如果没有参数不用写第二个参数如果有参数的如:Method method2 = cl.getMethod("setTime",long.class);

④在某个对象上面执行方法,Object result = method1.invoke(obj);//如果有参数的Object result = method2.invoke(obj,21317362721);

执行的方如果有返回值,将返回值返回,否则返回null

java开发工程师岗位职责:

1、负责公司网站开发和维护;

2、负责对网站进行实施,测试;

3、负责现有网站的维护和升级;

4、负责解决开发过程中的技术问题;

5、负责网站开发文档编写工作;

6、统一代码风格、监督团队开发、落实测试、验收代码质量;

7、参与软件系统设计,能编写代码。

java反射给字段赋值就是给实体类的set赋值,怎么做?

亲,以下是我写的例子,你可以参考:

import java.lang.reflect.Field;

import java.util.Arrays;

import static java.lang.System.out;

enum Tweedle { DEE, DUM }

public class Book {

public long chapters = 0;

public String[] characters = { "Alice", "White Rabbit" };

public Tweedle twin = Tweedle.DEE;

public static void main(String... args) {

Book book = new Book();

String fmt = "%6S: %-12s = %s%n";

try {

Class? c = book.getClass();

Field chap = c.getDeclaredField("chapters");

out.format(fmt, "before", "chapters", book.chapters);

chap.setLong(book, 12);

out.format(fmt, "after", "chapters", chap.getLong(book));

Field chars = c.getDeclaredField("characters");

out.format(fmt, "before", "characters",

Arrays.asList(book.characters));

String[] newChars = { "Queen", "King" };

chars.set(book, newChars);

out.format(fmt, "after", "characters",

Arrays.asList(book.characters));

Field t = c.getDeclaredField("twin");

out.format(fmt, "before", "twin", book.twin);

t.set(book, Tweedle.DUM);

out.format(fmt, "after", "twin", t.get(book));

// production code should handle these exceptions more gracefully

} catch (NoSuchFieldException x) {

x.printStackTrace();

} catch (IllegalAccessException x) {

x.printStackTrace();

}

}

}

输出:

BEFORE: chapters = 0

AFTER: chapters = 12

BEFORE: characters = [Alice, White Rabbit]

AFTER: characters = [Queen, King]

BEFORE: twin = DEE

AFTER: twin = DUM

如果对你有帮助的话,请采纳一下。如果有任何问题,都可以联系我!

大佬告诉我java 反射如何获取成员变量的值

下例演示了通过反射获取 Test 类对象 t 的 iVal, strVal 成员变量的值:

import java.lang.reflect.Field;

class Test {

private int iVal;

private String strVal;

public Test(int iVal, String strVal) {

this.iVal = iVal;

this.strVal = strVal;

}

}

public class App {

public static void main(String[] args) {

// 创建一个 Test 对象

Test t = new Test(123, "Hello");

// 获取对象 t 的 Class 

Class? tt = t.getClass();

try {

// 获取 Test 类的 iVal 字段 Field

Field field = tt.getDeclaredField("iVal");

// 设置可访问

field.setAccessible(true);

// 获取 iVal 的值

int val = field.getInt(t);

System.out.println(val);

Field strValField = tt.getDeclaredField("strVal");

strValField.setAccessible(true);

String strVal = (String)strValField.get(t);

System.out.println(strVal);

} catch (NoSuchFieldException | SecurityException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

java反射取对象属性值 不是通过get方法取值?

反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记

推荐《JAVA核心技术》这本书会对你有帮助的

在JAVA中,怎么利用反射获取一个方法

java中利用反射获取方法:

1.先找到方法所在类的字节码

2.找到需要被获取的方法

Class类中获取方法:

public Method[] getMethods();获取包括自身和继承(实现)过来的所有的public方法——Method不支持泛型,即后面不接

public Method[] getDeclaredMethods();获取自身所有的方法(private、public、protected,和访问权限无关),不包括继承的

public Method[] getMethod(String methodName, ClassT...parameterTypes);表示获取指定的一个公共的方法,包括继承的

参数: methodName:表示获取的方法的名字

parameterTypes:表示获取的方法的参数的Class类型

public Method[] getDeclaredMethod(String methodName, ClassT...parameterTypes);//表示获取本类中的一个指定的方法(private、protected、public,与访问权限无关),不包括继承的方法。

参数:methodName: 表示被调用方法的名字

parameterTypes:表示被调用方法的参数的Class类型如String.class只有通过方法签名才能找到唯一的方法,方法签名=方法名+参数列表(参数类型、参数个数、参数顺序)。

public Method getDeclaredMethod(String name,Class... parameterTypes):表示调用指定的一个本类中的方法(不包括继承的)

参数: methodName: 表示被调用方法的名字

parameterTypes:表示被调用方法的参数的Class类型如String.class

举例:

class P{

public void t1(){}

void t2(){}

private void t3(){}

}

class People extends P{

public void sayHi() {

    System.out.println("sayHi()");

}

public void sayHello(String name) {

    System.out.println("sayHello(String name)   " + "name = " + name);

}

private void sayGoodBye(String name, int age) {

    System.out.println("sayGoodBye(String name, int age)   " + "name = " + name + "  age = " + age);

}

}

public class MethodDemo {

public static void main(String[] args) throws Exception {

    Class clazz = People.class;

    //获取类自身及父类所有public方法

    Method ms[] = clazz.getMethods();

    for (Method m : ms) {

        System.out.println(m);

    }

    System.out.println("---------------------------");

    //获取类自身所有方法(不会获取父类方法)

    ms = clazz.getDeclaredMethods();

    for (Method m : ms) {

        System.out.println(m);

    }

    System.out.println("---------------------------");

    //只能获取父类中的public方法,无法获取到父类的默认权限和private权限方法

    Method m = clazz.getMethod("t1", null);//public void com.reflex.P.t1()

    System.out.println(m);

    m = clazz.getMethod("sayHello", String.class);

    System.out.println(m);

    //Exception in thread "main" java.lang.NoSuchMethodException: com.reflex.People.sayGoodBye(java.lang.String, int)

    //getMethod方法只能获取public的

//        m = clazz.getMethod("sayGoodBye", String.class,int.class);

//        System.out.println(m);

    m = clazz.getDeclaredMethod("sayGoodBye", String.class,int.class);

    System.out.println(m);

    //带Declared的无法获取父类中的方法

//        m = clazz.getDeclaredMethod("t1", null);//Exception in thread "main" java.lang.NoSuchMethodException:com.reflex.People.t1()

//        System.out.println(m);

}

}

java反射取值的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java通过反射获取字段的值、java反射取值的信息别忘了在本站进行查找喔。

The End

发布于:2023-01-11,除非注明,否则均为首码项目网原创文章,转载请注明出处。