Java 反射理解(一)-- Class 类的使用
Java 反射理解(一)-- Class 类的使用
概念
这里阐述几个基本概念:
在面向对象的世界里,万事万物皆对象。(在 Java 语言中,静态的成员、普通数据类型除外)
类也是对象,类是
java.lang.Class的实例对象。类类型是什么?
类类型可以简单理解为类的类型。在万物皆对象的 Java 中,我们定义的每个类都是
java.lang.Class类的一个对象,该对象就是该类的类类型,即 Class 对象。得到 Class对象有三种方法:
- 已知类名 (
类名.class) - 已知类对象(
对象.getClass()) - Class 类(类类型)中提供一个叫做 forName 的方法(
Class.forName("类名"))
- 已知类名 (
演示
我们通过具体的演示来描述得到 Class 对象的三种方法:
import com.demo.reflect;
/** 创建一个 Foo 类 **/
class Foo{
void print(){
System.out.println("foo");
}
}
/** 演示类 ClassDemo1 **/
public class ClassDemo1 {
public static void main(String[] args) {
//Foo的实例对象用 fool 表示
Foo foo1 = new Foo();
//Foo 这个类 也是一个实例对象
//任何一个类都是Class的实例对象,这个实例对象有三种表示方式
// c1, c2, c3 表示了 Foo 类的类类型(class type),一个类只可能是Class类的一个实例对象,即 c1 = c2 = c3,三次得到的Class对象都是同一个
//第一种表示方式 ---> 实际在告诉我们任何一个类都有一个隐含的静态成员变量class
Class c1 = Foo.class;
//第二中表达方式 ---> 已经知道该类的对象通过getClass方法获取
Class c2 = foo1.getClass();
System.out.println(c1 == c2);
//第三种表达方式
Class c3 = null;
try {
c3 = Class.forName("com.demo.reflect.Foo");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(c2==c3);
//我们完全可以通过类的类类型创建该类的对象实例 ---> 通过c1 or c2 or c3 创建 Foo 的实例对象
try {
Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
foo.print();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果为:
true
true
foo
完。
Java 反射理解(一)-- Class 类的使用的更多相关文章
- Java 反射理解(二)-- 动态加载类
Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...
- Java反射理解(五)-- 方法反射的基本操作
Java反射理解(五)-- 方法反射的基本操作 方法的反射 1. 如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2. 方法反射的操作 method.invoke(对象,参数列表) ...
- Java反射理解(四)-- 获取成员变量构造函数信息
Java反射理解(四)-- 获取成员变量构造函数信息 步骤 获取成员变量信息: obj.getClass() 获取类类型对象 成员变量也是对象,java.lang.reflect.Field 类中封装 ...
- Java 反射理解(三)-- Java获取方法信息
Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- java反射技术主要实现类有哪些,作用分别是什么
Java反射技术主要实现类有哪些,作用分别是什么? 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中 1)Class类:代表一个类 2)Field 类 ...
- [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...
- 如何防止JAVA反射对单例类的攻击?
在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...
随机推荐
- 追本溯源:substr与substring历史漫话
引子: 很多时候,当我要字符串截取时,我会想到substr和substring的方法,但是具体要怎么传参数时,我总是记不住.哪个应该传个字符串长度,哪个又应该传个开始和结尾的下标,如果我不去查查这两个 ...
- pytorch-Alexnet 网络
Alexnet网络结构, 相比于LeNet,Alexnet加入了激活层Relu, 以及dropout层 第一层网络结构: 11x11x3x96, 步长为4, padding=2 第二层网络结构: 5x ...
- shell 脚本基础与条件判断
#!shell脚本格式决定专业性 #!/bin/bash #filename:脚本名 #author:作者 #date:时间 #脚本作用 脚本的执行方式 #脚本名为wk.sh 绝对路径 /root/ ...
- nginx不间断服务平滑升级
(1)备份旧的nginx和配置文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx #备份旧版程序 cp /usr/loc ...
- 【Makefile】Makefile中的赋值符号=、:=、?=、+=
Makefile中主要有四个赋值符号: = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” “=”赋值:make会将整个makefil ...
- Python3+RobotFramewok 快速入门(二)
1. 原理 首先解释一下RF的工作原理,官方文档介绍就不赘述了,笔者就框架架构做出一个更加具体的描述 测试套及测试用例集(Test Data即需要用户编写的脚本)通过RF特定的语法解析,然后知道用户要 ...
- PHP yii2.0框架利用mpdf导出pdf
安装: composer require mpdf/mpdf 使用: use Mpdf\Mpdf;//(php7以前) //获取页面内容 $res = $this->controller-> ...
- 连接服务器VNC
1,启动vnc vncserver 2,提示输入密码 3,Would you like to enter a view-only password (y/n)? 选择n 4,会生成一个端口号 5, ...
- C#规范整理·资源管理和序列化
资源管理(尤其是内存回收)曾经是程序员的噩梦,不过在.NET平台上这个噩梦似乎已经不复存在.CLR在后台为垃圾回收做了很多事情,使得我们现在谈起在.NET上进行开发时,都会说还是new一个对象吧!回收 ...
- alertmanager + federate - Prometheus outside k8s cluster + 总体架构图 对接企业微信告警 + curl alertmanager to send alert
1.实验的架构 2.k8s 集群外的Prometheus的配置文件 [root@do1cloud03 prometheus]# cat prometheus.yml |egrep -v '#' glo ...