package reflex;

/*
* 反射:就是通过class文件对象 去使用该文件中的成员
* 变量,构造方法,成员方法。
*
* Person p = new Person(); p.使用
*
* 要想这样使用,首先必须得到class文件对象,其实也
* 就是得到Class类的对象。
* Class类:
* 成员变量 Field
* 构造方法 Construtor
* 成员方法 Method
*
* @author mzy
*
* 获取class类的对象的方式:
* A:Object类的getClass()方法
* B:数据类型的静态class
* C:Class类中的静态方法
* public static Class<?> forName(String className)
*
*
* 我们写的话:
* 获得Class对象,三种都可以;第二种最方便
*
* 开发:
* 第三种最好:因为第三种是一个字符串,
* 而不是一个具体的类名,这样我们就可
* 以把这样的字符串配置到配置文件中。
*
*
*
*
*/
public class ReflectDemo01_visit_three_methods {
public static void main(String[] args) throws ClassNotFoundException {
// 获得Class的方法(感叹号问题为泛型)
// 方式1:
Person p = new Person();
Class c = p.getClass(); Person p2 = new Person();
Class c2 = p2.getClass(); System.out.println(p == p2); // false
System.out.println(c == c2); // true // 方式2: 通过类名直接获得class对象
Class c3 = Person.class;
// 所有的数据类型都有它的class对象
// int.class;
// String.class;
System.out.println(c == c3); // true // 方式3:
/*
* 抛出ClassNotFoundException 6+ * 找不到
* 以后涉及到通过类的名称来找的
* 一定要写全路径(带包名的全路径)
* Class c4 = Class.forName("Perosn");
*
*
* 打开.java文件上的箭头,右键点 Copy Qualified Name
*/
Class c4 = Class.forName("reflex.Person");
System.out.println(c == c4); // true
}
}

其中的person类:

package reflex;

public class Person {
// 成员变量
private String name;
int age;
public String address; // 构造方法
public Person() {
} Person(String name, int age) {
this.name = name;
this.age = age;
}
private Person(String name) {
this.name = name;
}
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
} // 成员方法
public void show() {
System.out.println("show");
} public void method(String s) {
System.out.println("method" + s);
} public String getString(String s, int i) {
return s + "---" + i;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
} private void function() {
System.out.println("function");
} }

回忆(一):反射中获得class对象的三种方法的更多相关文章

  1. spring中创建bean对象的三种方式以及作用范围

    时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

  2. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  3. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  4. javascript生成对象的三种方法

    /** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohai ...

  5. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  6. 获取class对象的三种方法以及通过Class对象获取某个类中变量,方法,访问成员

    public class ReflexAndClass { public static void main(String[] args) throws Exception { /** * 获取Clas ...

  7. Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)

    通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...

  8. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  9. 反射:获取Class对象的三种方式

    获取Class对象的三种方式 package lianxiApril18; /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型( ...

随机推荐

  1. 龙芯 loongnix20 rc2 初体验

    2021-07-24 v0.0.1 版权声明:原创文章,未经博主允许不得转载 3A5000 昨天发布啦,历史上的昨天是中共一大的第一天. 3A5000 的团购还没开始(大概还是3999左右整机的样子) ...

  2. @classmethod和@staticmethod修饰符

    @classmethod和@staticmethod 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直 ...

  3. Java 加载、操作和保存WPS文字文档

    本文通过Java程序代码来展示如何来加载.操作及保存WPS格式的文字文档. 一.基本步骤:加载时,通过流加载WPS文字文档,完成相关文字操作后,再将结果文档保存到流,将流写入WPS文档,闭关闭流. 二 ...

  4. Lambda 表达式的基础语法

    1.基础语法 java8引入新的操作符"->"箭头操作符,箭头操作符将Lambda表达式分成两部分 左侧:Lambda 表达式的参数列表,对应抽象方法的参数列表 右侧:需要执 ...

  5. Windows Server创建域控制器

    推荐选择系统镜像为windows server2016(2019有诡异的bug不能安装域控.) 1.本地域安装设置 (1)连接到windows server2016 打开服务器管理器(Server M ...

  6. C++ 定义默认值void locals_index(int reg, int offset = 1);

    看jvm源码的时候怎么也看不懂,来回看了几次了就是关于iload 6 指令的解析 def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, ll ...

  7. JVM参数模版

    首先需要自己根据机器的配置设置JVM中各区域的初步大小,如下: -Xms4096M-Xmx4096M-Xmn3072M-Xss1M-XX:MetaspaceSize=256M-XX:MaxMetasp ...

  8. SpringCloud升级之路2020.0.x版-5.所有项目的parent与spring-framework-common说明

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 源代码文件:htt ...

  9. CVE-2018-12613总结

    1.漏洞基础介绍 1.1漏洞背景 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此We ...

  10. 6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?

    一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级 + 1轮Android用人部门leader + 1轮Android ...