栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学会取得类的方法信息,并使用 、学会取得类的属性信息,并使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学会取得类的方法信息,并使用 、学会取得类的属性信息,并使用

2021.10.1日晚
更新慢了,实在抱歉,一天改了太多bug,晚上累到不想动,然而却得知这个作业的截止时间和实验报告不同,于是立马爬起来写了这两题。其实写起来倒挺快,没花多少时间就写出了两题大致代码。但是这两题我都遇到了让我十分无语的bug,改来改去改了好久都是错。好在我没有放弃,不断的调试,最终还是解决了让我头疼的bug,不过好像还是有那么一点点小问题,但是实在不想改了,大体上题目的要求还是完成了的。(嘿嘿)

废话不多说,上题。

更新于2021.10.2日早
睡了一觉感觉第一题题目没看清,仔细一看真的写错了,特地重写了一下,实在抱歉(捂脸)

1 . 定义一个类 User,用户类
其中有 4 种访问权限限定符的成员方法, 每一个方法,输出能区分其它方法信息一种方法是 void
一种返回基本类型
一种返回 string
一种返回自定义类
参数分别个数分别是 0,1,2,还有一个是可变参数
输出全部的方法定义
写方法调用的通用方法,要至少能处理基本类型,字符串

实现代码:

package com.zhangyufan.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMethod {

	public static void main(String[] args)
			throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {

		Class c = User.class;
		Method[] ma = c.getDeclaredMethods();
		for (int i = 0; i < ma.length; i++) {
			System.out.println("-----------------------------------------------------------------------");
			System.out.println(Modifier.toString(ma[i].getModifiers()));
			System.out.println(ma[i].getReturnType());
			System.out.print(ma[i].getName() + "(");
			Class[] mparas = ma[i].getParameterTypes();
			if (!ma[i].isAccessible()) {
				ma[i].setAccessible(true);
			}
			for (int j = 0; j < mparas.length; j++) {
				System.out.print(mparas[j].getName());
				if (j < mparas.length - 1) {
					System.out.print(",");
				}
			}
			System.out.print(")");
			System.out.println("{};");
			Object[] os = new Object[mparas.length];
			for (int j = 0; j < mparas.length; j++) {
				String name = mparas[j].getName();
				if ("java.lang.String".equals(name)) {
					os[j] = "小红";
				}
				if ("int".equals(name)) {
					os[j] = 20;
				}
				if ("[Ljava.lang.String;".equals(name)) {
					os[j] = new String[] { "小李", "小王", "小陈" };
				}
			}
			User u = new User();
			ma[i].invoke(u, os);
		}

	}

}

class User {
	private String name = "小明";
	private int age = 25;

	public void method1() {
		System.out.println("调用方法1,访问权限限定符为public,该方法是void,参数个数为0");
	}

	protected int method2(int i) {
		System.out.println("调用方法2,访问权限限定符为protected,该方法返回基本类型int,参数个数为1");
		return 0;
	}

	private String method3(String s, int t) {
		System.out.println("调用方法3,访问权限限定符为private,该方法返回String,参数个数为2");
		return "";
	}

	User method4(String... names) {
		System.out.println("调用方法4,访问权限限定符为default,该方法返回自定义类,参数为可变参数");
		return new User();
	}
}

运行结果:

  1. 定义一个类,其中有 4 种访问权限限定符的成员变量, 基本类型和引用类型各二种,并置初值
    输出全部属性定义
    使用反射的方式,打印各个成员变量的初值,并重置变量的值

实现代码:

package com.zhangyufan.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Arrays;

public class TestField {

	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
		Class c = Person.class;
		Person p = new Person();
		Field[] f = c.getDeclaredFields();
		for (int i = 0; i < f.length; i++) {
			System.out.println("---------------第" + (i + 1) + "个属性---------------");
			Class t = f[i].getType();
			System.out.print(Modifier.toString(f[i].getModifiers()) + " ");
			System.out.print(t + " ");
			System.out.println(f[i].getName());
			if (!f[i].isAccessible()) {
				f[i].setAccessible(true);
			}
			Object value = f[i].get(p);
			if (value.getClass().isArray()) {
				double[] a = (double[]) value;
				System.out.println("初值:" + Arrays.toString(a));
			} else {
				System.out.println("初值:" + f[i].get(p));
			}
			switch (t.toString()) {
			case "class java.lang.String":
				f[i].set(p, "小陈");
				break;
			case "int":
				f[i].setInt(p, 35);
				break;
			case "class [D":
				f[i].set(p, null);
				break;
			case "float":
				f[i].setFloat(p, 80);
				break;
			}
			System.out.println("重置后值:" + f[i].get(p));
		}
	}

}

class Person {
	private String name = "小明";
	protected double[] d = { 1.0, 2.0, 3.0, 4.0, 5.0 };
	public int age = 20;
	float weight = 70;

}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号