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).静态 ...
随机推荐
- jq批量与表单赋值
function loadData(obj) { var key, value, tagName, type, arr; for (x in obj) { key = x; value = obj[x ...
- [CDH] New project for ML pipeline
启动后台服务: [CDH] Cloudera's Distribution including Apache Hadoop 这里只介绍一些基本的流程,具体操作还是需要实践代码. 一.开发环境配置 JD ...
- MongoDB 有关实体映射具体应用及对查询的影响
1 创建实体的时候,可以用注解@Document 对实体进行设置,指定集合名字 /** * */ package com.cfj.ceshi.entity; import org.springfram ...
- SAP JCO3配置
windows 环境设置 1.sapjco3.dll 需要与 sapjco3.jar 在同一目录 2.设置系统环境变量,将sapjco3所在目录加入系统环境变量 例如: 新建环境变量 变量名: JAV ...
- mysql 严重锁表解决方案
转自 http://blog.csdn.net/miltonzhong/article/details/20562587 http://wangwei3.iteye.com/blog/784435
- [Http] Difference between POST and GET?
What is the difference between POST and GET HTTP requests? GET and POST are two different types of H ...
- idea 中的new file 没有jsp
idea 的new file中没有你需要的文件,原因是IDEA认为当前包下不应该创建该文件,以就没有创建该文件的选项. 以jsp 文件为例.其他文件类似. 解决方法: File ---> pro ...
- .NET中的简单的并行
https://www.cnblogs.com/hdwgxz/p/6129419.html https://www.cnblogs.com/hueychan/p/10575907.html
- strcpy函数内存分析
void strcpy(char* strDest, char* strSrc) { while((*strDest++ = *strSrc++) != '\0'); } 看上面这段代码,只有一条语句 ...
- 安装horizon
在控制节点上安装 controllerHost='controller' ADMIN_PASSWD='Ideal123!' 1.安装dashboard组件 yum -y install opensta ...