首页 > 其他分享 >调用运行时类的指定结构:属性、方法、构造器

调用运行时类的指定结构:属性、方法、构造器

时间:2022-11-30 17:58:10浏览次数:41  
标签:调用 name Person age String c1 时类 public 属性

package day3;

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

//调用运行时类的指定结构:属性、方法、构造器
public class ReflectionDemo2 {
@Test
public void testField() throws Exception {
Class c1= Person.class;
Person p1=(Person)c1.newInstance();
//get,获取运行时类及其父类的public的属性
Field age = c1.getField("age");
age.set(p1,123);
System.out.println((int)age.get(p1));

    //getDeclared,获取运行时类任意权限的属性
    Field name = c1.getDeclaredField("name");
    //把非public的属性设置为可访问
    name.setAccessible(true);
    name.set(p1,"Tom");
    System.out.println((String)name.get(p1));
}

@Test
public void testMethod() throws Exception {
    Class c1= Person.class;
    Person p1=(Person)c1.newInstance();
    //通过方法名和形参列表,获取方法
    Method show = c1.getDeclaredMethod("showNation", String.class);
    show.setAccessible(true);
    System.out.println((String) show.invoke(p1,"China"));

    //调用静态方法
    Method showDetail = c1.getDeclaredMethod("showDetail");
    showDetail.setAccessible(true);
    //调用者为运行时类
    showDetail.invoke(c1);
    showDetail.invoke(null);
}

}

class Person {
private String name;
public int age;

public Person(){
}
public Person(String name, int age) {
    this.name = name;
    this.age = age;
}
private Person(String name) {
    this.name = name;
}
public String getName() {
    return name;
}

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

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}
@Override
public String toString() {
    return "姓名:"+ name + ",年龄:" + age;
}
public String show(){
    return this.name+" , "+this.age;
}
private String showNation(String nation){
    return "我来自"+nation;
}
private static void showDetail(){
    System.out.println("谁是最可爱的人");
}

}

标签:调用,name,Person,age,String,c1,时类,public,属性
From: https://www.cnblogs.com/fighterk/p/16939252.html

相关文章

  • BGP 路径属性
    BGP的路径属性是BGP路由传递所携带的特定描述,用来比较路由优先级的,因为BGP是属于跨自治系统的,所以自治系统内部的各种不同情况所产生的的路由条目较多,比较路由最优的特......
  • ant design分页中 v-model属性页数没有双向绑定效果
    1.antdesign版本号为:1.7.82.场景:total为100,10条/页,总共为10页;当点击第5页后,选择50条/页时默认将v-model值为1,即返回第一页(此时在@showSizeChange对v-model值进行更改不生......
  • python-面向对象-类的封装-私有方法私有属性
    1.封装,就是把客观事物封装成抽象的类,并规定类中的数据和方法只让可信的类或对象操作。封装可分为两个层面:(1)第一层面的封装,创建类和对象时,分别创建两者的名称,只能通过类名或......
  • Selenium中怎样解决输入框带有readonly属性或存在日历框问题
    1、js='document.getElementById("train_date").removeAttribute("readonly");driver.execute_script(js)2、pag=driver.find_element_by_xpath('//*[@id="pane......
  • WCF调https时调用失败的问题
    最近做项目的时候,发现wcf调http可以正常,https就调用失败,但是那项目布在http,就可以正常调,布在https,就调失败了。红框位置为建立安全通道,不管是http还是https都可以正常调......
  • 模拟SoapUI发送XML,返回并处理逻辑(Webservice调用)
    importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.Outp......
  • QT+VS 调用基于Google Breakpad的跨平台Qt崩溃异常捕获调用方案
    方案一、基于GoogleBreakpad的跨平台Qt崩溃异常捕获调用方案首先上博客:Windows下Qt生成dump文件并定位bug(基于qBreakpad)这个地方使用的是一个叫qBreakPad的方案,这个之前......
  • 关于如何在C#中调用C++的DLL,以及如何在C++中调用C#的DLL
    一、关于如何在C#中调用C++的DLL,以及如何在C++中调用C#的DLL注:clr指公共语言运行库CLR是一门非常恶搞的语言,就好像是在C++里面写C#的文件一样,也就是一种所谓的“托管模式......
  • 调用第三方接口实现呼叫台功能 -WebRTC
    调用第三方接口实现呼叫台功能WebRTCWebRTC学习笔记——建立连接-简书(jianshu.com)(4条消息)webRTC(八):查看offer/answer的SDP_晓果博客的博客-CSDN博客(4条消息)......
  • 类和对象之构造函数调用规则
    4.2.4构造函数调用规则默认情况下,C++编译至少给一个类添加3个函数默认构造函数(无参,函数体为文默认析构函数(无参,函数体为空)默认拷贝构造函数,对属性进行值传递构造函数调......