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. Spring Boot邮箱链接注册验证

    Spring Boot邮箱链接注册验证 简单介绍 注册流程 [1]前端提交注册信息 [2]后端接受数据 [3]后端生成一个UUID做为token,将token作为redis的key值,用户数据作为re ...

  2. 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位

    一.wxml文件 <!-- 上传.下载.打开文件一步执行 --> <view class="handle"> <button bindtap=&quo ...

  3. 微信小程序云开发-云函数-调用初始云函数获取openid

    一.调用初始云函数获取openid的两种方法 1.传统的success和fail 2.ES6的.then和.catch 3.编译结果 说明:初始云函数,是指刚创建完成的云函数.默认系统写的代码.

  4. 光学动作捕捉系统中的反光标识点(Marker点)

    动作捕捉系统本质上是一种定位系统,通常需要在目标物布置定位设备进行追踪.以红外光学为原理的动作捕捉系统,主要由由光学镜头.动作捕捉软件.反光标识点.POE交换机.和若干配件组成,其中反光标识点(Mar ...

  5. 第七篇 -- photoshop cs6 激活

    下载photoshop cs6破解版 下载amtlib.dll 破解就是将amtlib.dll替换,路径:C:\Program Files\Adobe\Adobe Photoshop CS6 (64 ...

  6. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  7. .NET同步原语Barrier简介

    Barrier(屏障)是一种自定义的同步原语(synchronization primitive),它解决了多个线程(参与者)在多个阶段之间的并发和协调问题. 1)多个参与者执行相同的几个阶段的操作 ...

  8. 如何使用SQL Server实现SignalR的横向扩展

    一般来说,Web应用的扩展有两种:scale up(纵向扩展)和scale out(横向扩展). 1.纵向扩展 使用配置高(大内存,多处理器)的服务器或者虚拟机. 2.横向扩展 使用多个服务器(Web ...

  9. 声明提前(hoist)

    程序执行前,都会先找到var声明的变量和function声明的函数. 一.var声明的变量 程序 结果 console.log(a); var a=10; console.log(a); //unde ...

  10. 开发者如何快速搭建自己的电商App?

    面向电商购物场景,HMS Core提供了创新的电商解决方案,帮助应用快速获客.提升转化率,实现业务增长.为了帮助开发者了解如何在电商购物类应用中集成HMS Core的各项能力,HMS Core开发了电 ...