Java使用反射实例化类,得到域的值,调用该类的方法

news/2024/5/19 2:43:59 标签: 反射, Java

获得类和实例

我们以汽车类型为例:


public class Car {
	private  String name = "111";
	public double salary = 12.0;

	public String getName() {
		return name;
	}

	private void setName(String name) {
		this.name = name;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Car [name=" + name + ", salary=" + salary + "]";
	}
	
	
	
}

然后利用反射获得类和他的实例:

public static void main(String[] args)  {
	try {
		Class car = Class.forName("Car");
		Car car2 = (Car) car.newInstance();
		System.out.println(car);
		System.out.println(car2);			
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

输出为:

class Car
Car [name=111, salary=12.0]

然后获得遍历获得他的所有域和值:

public static void main(String[] args)  {
	try {
		Class car = Class.forName("Car");		
		Field[] f =  car.getDeclaredFields();
			for(Field fie : f) {
				fie.setAccessible(true);
				System.out.println(fie.toString()+" : "+fie.get(car.newInstance()));
			}		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

输出为:

private java.lang.String Car.name : 111
public double Car.salary : 12.0

接下来我们尝试执行他的私有和公有方法:

public static void main(String[] args)  {
	try {
		Class car = Class.forName("Car");
		Car car2 = (Car) car.newInstance();
		Method method = car.getDeclaredMethod("setName",String.class);		
		method.setAccessible(true);
		//name值改变成5555
		method.invoke(car2,"5555");
				
		Method method2 = car.getDeclaredMethod("getName");		
		System.out.println(method2.invoke(car2));
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

输出为:

5555

 


http://www.niftyadmin.cn/n/898631.html

相关文章

用Eclipse和TomCat搭建一个网站(创建WEB项目)

首先,我们打开Eclipse,根据下图操作即可: 我们首先绑定JDK 然后我们新建一个web工程 如果没有的话 web工程就搭好了,接下来我们引入一下包 这样一个网站就搭好了

SQL常用语句(大全)

我们先看一下表的结构: -- sql语句创建表 CREATE TABLE student2 (id int(11) NOT NULL AUTO_INCREMENT,stuname varchar(10) NOT NULL,class varchar(20) NOT NULL,sex int(11) NOT NULL,major varchar(20) NOT NULL,mathstore int(11) DEFAULT NULL,yuwenstore i…

使用AJAX实现数据的增删改查

主页&#xff1a;index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script src"http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script></head><body>…

使用git创建分支并上传

首先我们简单的熟悉一下git的常用命令 git clone 地址 这是下拉命令 git config --global credential.helper store 保存密码 git config --system --unset credential.helper 清除错误登陆缓存 git status 查看修改信息 git add 文件路径/文件名 选中更新的文件准备提交到仓…

AJAX的同步和异步刷新

之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题。最近的项目用了到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载&#xff0c;页面出去假死状态&#xff0c;当这个AJAX执行完毕后才会继续运行其他代码页面假…

Java的匿名内部类

顾名思义&#xff0c;没有名字的内部类。表面上看起来它们似乎有名字&#xff0c;实际那不是它们的名字。   匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类&#xff1f;如果满足下面的一些条件&#xff0c;使用匿名内部类是比较合适的&#xff1a;   只…

Java的静态内部类

有时候&#xff0c; 使用内部类只是为了把一个类隐藏在另外一个类的内部&#xff0c;并不需要内部类引用外围类对象。为此&#xff0c;可以将内部类声明为 static, 以便取消产生的引用。下面是一个使用静态内部类的典型例子。考虑一下计算数组中最小值和最大值的问题。当然&…

JavaSSM实施文件的多上传

首先&#xff0c;我们要先用input 框的type“file”的属性进行文件的上传&#xff0c;需要注意的是&#xff0c;multiple属性可以支持多上传 <input multiple type"file" id"files" name"files" onchange"upfileactual(this,upload/…