文档章节

反射中方法介绍

zuodev
 zuodev
发布于 2016/04/20 21:25
字数 534
阅读 6
收藏 0


反射可以获得类的构造方法、一般方法、变量。依次举例演示。
关于getDeclaredMethod()、setAccessible(),见:Class 的newInstance()和Constructor的newInstance()

获取字节码对象的三种方法:

1、类名.class  例如   System.class  Person.class

2、对象.getClass()     new Date().getClass() //对象一定是字节码创建出来的   这个是Object的方法

3Class.forName("类名")  Class.forName("java.util.Date"); //用静态方法来查询或者加载字符串所对应字节码 ,常用。

反射主要用到第三种,因为在写反射时,还不知道源程序的名字。Class.forName("类名")  就是把类名设置成变量。  

package asin.asinbetter;

import java.lang.reflect.*;
import java.util.Arrays;

/**
 * 学生类
 * 有name、age、country属性
 * 有静态方法、一般方法
 */
class Student
{
	public int age;
	private String name;
	private static String country = "cn";
	
	public Student() {
		
	}
	public Student(String name,int age) {
		
		this.age = age;
		this.name = name;
	}
	
	//供演示调用静态方法
	public static void showCountry()
	{
		System.out.println("country:"+country);
	}
	
	//打印哪个对象在调用speak方法,和说的语言
	private void speak(String lan)
	{
		System.out.println(name+" speak:"+lan);
	}
	

	//为私有属性提供get set方法供外界访问
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//以String形式返回对象的信息
	public String toString() {
		
		return name+"--"+age;
	}
}

public class ReflectDemo2 {

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

		//方法1通过newInstance获得对象
		Student stu = (Student) Class.forName("asin.asinbetter.Student").newInstance();
		
		//给对象属性赋值
		stu.age=21;
		stu.setName("asin");
		
		System.out.println("stu对象:"+stu);
		
		//方法2通过Constructor来实例化对象
		Constructor<Student> con = (Constructor<Student>) Class.forName
				("asin.asinbetter.Student").getConstructor(String.class,int.class);
		
		//实例化对象
		Student stu1 = con.newInstance("zuo",22);
		
		System.out.println("stu1对象:"+stu1);
		
		
		//获取、调用一般方法 
		//speak方法是private的
		//获取已声明参数时String类型的方法speak
		Method mt1 = Student.class
				.getDeclaredMethod("speak",String.class);
		
		//setAccessible,AccessibleObject的方法,设置为可访问
		mt1.setAccessible(true);
		
		//调用方法invoke,传入参数
		mt1.invoke(stu, "chinese"); 
		
		
		
		//获取、调用静态方法
		Method mt2 = Student.class.getMethod("showCountry");
		
		//静态方法不需要对象就可以调用
		mt2.invoke(null, null);	
		
		
		
		//获取private成员变量
		Field field = Student.class.getDeclaredField("name");
		field.setAccessible(true);
		String stu1Nmae = (String) field.get(stu1);
		System.out.println("stu1对象的Name:"+stu1Nmae);
		
		//获取public变量
		int age = (int) Student.class.getField("age").get(stu);
		System.out.println("stu对象的age:"+age);	
	}
}



© 著作权归作者所有

zuodev
粉丝 0
博文 37
码字总数 18402
作品 0
静安
高级程序员
私信 提问
深度解析单例与序列化之间的爱恨情仇~

转载:原文链接:https://mp.weixin.qq.com/s/iXC47w4tMfpZzTNxS_JQOw 首先来写一个单例的类:code 1 接下来是一个测试类: code 2 输出结构为false,说明: 通过对Singleton的序列化与反序列化...

u010398771
2018/02/04
0
0
Unity C#基础之 反射反射,程序员的快乐

反射反射,程序员的快乐 这句话想必大家都经常听过,基本上在绝大多数的框架和一些设计模式中都能看到反射的身影(MVC、IOC、AOP、O/RM), 反射:是.Net Framework提供的一个帮助类库,可以...

su9257_海澜
2018/02/14
0
0
PYTHON面向对象章节深入讲解-张明阳-专题视频课程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a2011480169/article/details/83581748 PYTHON面向对象章节深入讲解—73人已学习 课程介绍 介绍了类和面向对象...

安静的技术控
2018/08/24
0
0
Java反射机制(未完成,还缺最后一个)

1、背景 1)Reflection也就是反射 是Java被视为动态(或准动态)语言的一个关键性质 2)反射机制指的是程序在运行时能够获取任何类的内部所有信息 2、实现功能概述 1)只要给定类的全名,即可...

萧小蚁
2015/05/03
256
0
kvn-wang/hp-reflect

hp-reflect (high performance reflect) 项目介绍 hp-reflect 是一个高性能的反射工具。它使用字节码技术动态生成 access class。通过不同的 access class,可以高效的获取字段的值,或者调用...

kvn-wang
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
44
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部