反射机制的概述和字节码对象的获取方式

1.1.1 反射介绍
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
对于任意一个对象,都能够调用它的任意一个方法
这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制.

简单来说, 就可以把.class文件比做动物的尸体, 而反射技术就是对尸体的一种解剖.
通过反射技术, 我们可以拿到该字节码文件中所有的东西, 例如成员变量, 成员方法, 构造方法, 而且还包括私有
1.1.2 字节码文件获取的三种方式

  1. 对象名.getCalss(); // 次方法来自于Object 对象已经存在的情况下, 可以使用这种方式
  2. 类名.class // 类名.class这是一个静态的属性, 只要知道类名, 就可以获取
  3. Class.forName(“com.itheima_01.Student”); // 通过Class类中的静态方法, 指定字符串, 该字符串是类的全类名(包名+类名)
    // 此处将会抛出异常都系 ClassNotFoundException 防止传入错误的类名
    1.1.3 案例代码
    
    package com.itheima_01;

/*

  • 反射:
  • 在运行时,我们可以获取任意一个类的所有方法和属性
  • 在运行时,让我们调用任意一个对象的所有方法和属性
  • 反射的前提:
  • 要获取类的对象(Class对象)
  • */

public class ReflectDemo {

public static void main(String[] args) throws ClassNotFoundException {

// 通过Object的getClass()方法获取,必须要有对象

Student s = new Student();

Class clazz = s.getClass();

// 通过类名获取字节码对象

Class clazz2 = Student.class;

// static Class<?> forName(String className)

Class clazz3 = Class.forName("com.itheima_01.Student");

System.out.println(clazz == clazz2);

System.out.println(clazz == clazz3);

System.out.println(clazz);

}

}

1.1.4 问题: 字节码对象是用来描述什么的?
用来描述.class文件的.
面向对象阶段的时候讲过java中描述事物都是通过类的形式
而字节码文件也可以看做为一种事物, 如何描述这种事物? 那就看看这个事物是由什么组成的了

        1. 成员变量
        2. 成员方法
        3. 构造方法

原文地址:https://blog.51cto.com/13587708/2372972

时间: 2024-10-12 22:49:59

反射机制的概述和字节码对象的获取方式的相关文章

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&amp;BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动

【反射之Method】如何获取字节码对象中的方法

■获取字节码对象的方法有两种 第一种:使用字节码对象获取所有的方法(只能获取公有的方法,而不能获取私有/受保护的方法) 语法: Class.getMethods() 示例: Method[] methods = personClass.getMethods(); 第二种:使用字节码对象获取对象指定的方法,其参数:1.方法名:2.传入方法的参数类型加上".class" 语法: Class.getMethod(String name, Class<?>... parameter

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.

利用JAVA反射机制将JSON数据转换成JAVA对象

net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转换, 根据需要进行扩展,  这里可以处理Long和Date类型. 只支持单个JSONObject对象的处理,   对于复杂的JSON对象, 如JSONArray数组, 可考虑先遍历, 获取JSONObject后再进行处理. package common; import java.lang.refle

获取字节码的三种方式

获取java字节码有三种方式,假设要获得的字节码的类为requireClass 1 使用类的静态方法 Class classOne = requireClass.class; 2 使用类对象的getClass方法 Class classTwo = requireClassInstance.getClass; 3 使用Class类的静态方法 Class.forName Class classThree = Class.forName("类的全路径名"); 在反射的实际应用中通常采用第三种

序列号和设备标识UDID码手机直接获取方式:

序列号和设备标识UDID码手机直接获取 1 设备标识UDID码获取:http://fir.im/udid 或者直接手机自带的浏览器输入那个网站链接也可以的. 打开链接点击右上角3点点击在Safari浏览器中打开,就是像一个指南中的图标点进去在点右上角安装 然后可能要输入密码 这个密码就是你手机的密码 安装好后就出来了一排40个字母的设备标识码 然后复制了发过来就好了. 2 序列号在手机设备上 设置  通用 关于本机 序列号 12个数字字母的  直接按住不动 复制就好了   复制  不要截图. 详

ApplicationContext对象的获取方式

本来这是一个比较简单的问题. 然而在前一段事件项目中出现了一个问题. 问题描述:数据库连接数只增不减,直到数据库链接数爆满,报了一个 too many connection异常.整个服务就挂了,需要重写启动一次才能使用. 一开始的时候,一直以为是dao层那个链接没有释放.把dao层的代码都查了一遍,也从网上搜索了很多关于数据库连接池的东西,但是也没有发现问题.于是就纠结了~~ 后台通过mysql的一个命令,status,发现在求职者简历编辑模块,每编辑一次简历,数据库连接数就会只增不减,增加三个

组件、对象的获取方式

private TweenPosition tween;//获取TweenPosition组件()ngui) public List<InventoryItemGrid> itemGridList = new List<InventoryItemGrid>();//InventoryItemGrid是放在多个UI对象上的一个脚本的名字 public UILabel coinNumberLabel;//获取UI中的Label void Awake() { tween = this.G

InetAddress对象的获取方式

简单总结一下InetAddress对象产生的几种方式 代码 package com.demo; import java.net.InetAddress; import java.net.UnknownHostException; /** * * @author Lynn * 1.getByName()和getByAddress()方法的使用: * 2.getLocalHost()方法: * 3.getLoopbackAddress()方法: * 4.注意第三种方式和第四种方式: * */ pub