反射 类加载

初学反射,学习内容做了一些笔记,比较杂乱:

1、类是java.lang.Class类的实例对象

2、new 创建对象,是静态加载类,在编译时刻就需要加载可能使用到的类。

3、Class c = user.getClass(); //已知该类的对象,可通过getClass方法获取该类的类类型

   Class c = Class.forName("类的全称"); //不仅表示了该类的类类型,还代表了动态加载类,运行时加载类是动态加载

   Word w = (Word)c.newInstance(); //通过类类型,创建该类的对象

4、基本数据类型、void关键字等都存在类类型

 1 package com.reflect;
 2
 3 /**
 4 * @author 作者:方o丈
 5 * @version 创建时间:2018年6月9日 下午2:20:24
 6 * 类说明:
 7 */
 8 public class Test {
 9
10     public static void main(String[] args) {
11         Class c1 = int.class;
12         Class c2 = double.class;
13         Class c3 = Double.class;
14         Class c4 = String.class;
15         Class c5 = void.class;
16
17         System.out.println(c1.getName());
18         System.out.println(c2.getName());
19         System.out.println(c3.getName());
20         System.out.println(c3.getSimpleName());
21         System.out.println(c4.getName());
22         System.out.println(c4.getSimpleName());
23         System.out.println(c5.getName());
24     }
25
26 }

程序运行结果:

5、Class类的API操作:获取类的信息

 1 package com.reflect;
 2
 3 import java.lang.reflect.Method;
 4
 5 /**
 6  * @author 作者:方o丈
 7  * @version 创建时间:2018年6月9日 下午9:55:59 类说明:
 8  */
 9 public class Demo {
10
11     /**
12      * 获取类的信息,包括类的成员函数、成员变量
13      * @param obj 该对象所属类的信息
14      */
15     public static void getClassMessage(Object obj) {
16         // 首先获取类的类类型
17         Class c = obj.getClass();
18         // 获取类的名称
19         String className = c.getName();
20         System.out.println("类的名称:" + className);
21
22         /**
23          * Method类,方法对象
24          *
25          * 获取类的方法 getMethods()获取该类所有的public方法,包括从父类继承来的
26          * 官网注释:返回一个数组,该数组包含反映由该Class对象表示的类或接口的所有公共方法的方法对象,
27          * 包括由类或接口声明的方法以及从超类和超接口继承的方法。如果这个Class对象表示具有多个公共方法的类型,这些方法具有相同的名称和参数类型,
28          * 但返回类型不同,则返回的数组对于每个此类方法都有一个方法对象。如果这个Class对象表示类初始化方法
29          * <clinit>的类型,则返回的数组没有相应的方法对象。如果这个Class对象表示数组类型,
30          * 则返回的数组对于数组类型从对象继承的每个公共方法都有一个方法对象。它不包含克隆()的方法对象。如果这个Class对象表示一个接口,
31          * 则返回的数组不包含任何来自Object的隐式声明方法。因此,如果在此接口或其任何超接口中没有显式声明任何方法,则返回的数组的长度为0。(
32          * 请注意,表示类的Class对象总是具有从Object继承的公共方法。)如果这个Class对象表示一个基本类型或void,
33          * 那么返回的数组的长度为0。在类或由这个Class对象表示的接口的超级接口中声明的静态方法不被视为类或接口的成员。返回数组中的元素没有排序,
34          * 也没有按任何特定顺序排序。
35          *
36          * getDeclaredMethods() 获取该类所有的自己声明的方法,不管是什么什么访问权限。但不包含从父类继承来的
37          * 官方注释:如果这个Class对象表示具有多个声明方法的类型,这些方法具有相同的名称和参数类型,但返回类型不同,
38          * 则返回的数组对于每个此类方法都有一个方法对象。如果这个Class对象表示具有类初始化方法
39          * <clinit>的类型,则返回的数组没有相应的方法对象。如果这个Class对象表示没有声明方法的类或接口,则返回的数组长度为0。
40          * 如果这个Class对象表示数组类型、基元类型或空类型,则返回的数组长度为0。返回数组中的元素没有排序,也没有按任何特定顺序排序。
41          *
42          */
43         Method[] method = c.getMethods();
44         for (int i = 0; i < method.length; i++) {
45             //获取方法的返回值的类类型
46             Class returnTyepe = method[i].getReturnType();
47             //获取方法返回值类型名
48             System.out.print(returnTyepe.getName()+" ");
49
50             //获取方法的名称
51             System.out.print(method[i].getName()+"(");
52
53             //获取参数列表的类型的类类型
54             Class[] paramTypes = method[i].getParameterTypes();
55             for (Class paramType : paramTypes) {
56                 System.out.print(paramType.getName()+",");
57             }
58             System.out.println(")");
59         }
60     }
61
62     public static void main(String[] args) {
63         Test test = new Test();
64         getClassMessage(test);
65     }
66 }

? 运行结果:

原文地址:https://www.cnblogs.com/fangzhang/p/9161480.html

时间: 2024-09-30 22:08:53

反射 类加载的相关文章

反射类加载

java中的反射技术:运行时探究和使用编译时未知的类. 反射的核心原理:JVM在加载一个类的时候,会把该类的信息存放到一个Class对象中,该对象又被称为模板对象,JVM可以通过检索对象得到这个类的所有信息. JDK提供API,允许程序员获取到类的Class对象,导致程序员也可以检索到这个类的信息, 即使这个类不是程序或程序员所实现的. 获取Class对象又3种方法. 1,通过类型名取Class对象,所有的类型都可以获得Class对象,这种方式没有动态性,以为在编译时已知类型名. 2,通过对象或

java之反射概述

类加载器和反射  类加载器: 1 类的加载过程: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三步骤来实现对这个类进行初始化. 加载:就是指将class文件读入内存,并为之创建一个Class对象.任何类使用时系统都会建立一个Class对象 连接:验证,是否有正确的内部结构,并和其他类协调一致. 准备,负责为类的静态成员分配内存,并设置默认初始化值 解析,将类的二进制数据中的符号引用替换为直接引用 初始化:开辟栈.堆内存空间,创建对象.默认初始化.显示初始化.构

java高级之反射

--- android培训.java培训.期待与您交流! ---- java高级之反射 一 反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据

JavaEE基础(二十七)/反射、JDK新特性

1.反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载  就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化 就是我们以前讲过的初始化步骤 B:加载时机 创建类

Java-reflect(反射)初步理解_1

27.01_反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化 就是我们以前讲过的初始化步骤 B:加载时机

注解与反射-复习

目录 注解 内置注解 元注解 自定义注解 反射机制 简介 Class类 Java内存 类加载的过程 ClassLoader 反射获取运行时类的结构信息 动态创建对象 通过反射创建对象 (一般情况) 通过"构造器对象"创建对象 (不存在无参构造) 通过反射调用成员: method field 测试: 性能分析 反射获取泛型数据 反射获取注解数据 基于B站秦疆老师的课. 感谢! 注解 @since JDK1.5 不是程序本身, 可以对程序做出解释, 可以被其他程序读取(如 编译器) 内置注

2016/5/3 复习

异常处理   try  cathc  finally        Exception表示检查异常    RuntimeException运行时异常     thow抛出异常   thows声明异常 如果父类声明了异常 子类重写父类声明异常 不能比父类的异常多  也不能大余父类异常的声明 常用类  :  System类  系统类     常用方法: currentTimeMillis()返回以毫秒为单位的时间 exit(int status)  终止当前正在运行的JAVA虚拟机     getP

第二十六天笔记

黑马程序员 <a href="http://www.itheima.com" target="blank">java培训</a> 1.反射(类的加载概述和加载时机) A:类的加载概述    当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化.   1)加载          就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都     会建立一个Class

JAVAOO 11 12 15 13 章

异常处理 异常(exception) 是程序在执行过程中所产生的问题 异常分类: 1  检查异常 2  运行异常 3  错误 对异常的处理,方法有三种: 1.捕获异常,不让它沿着调用闸继续向下抛出 2.捕获异常 并让它向下抛出 3.不捕获异常 RuntimeException以及子类是运行时异常,其它都是检查异常 try没有异常时不会执行catch() try出现异常之后 其它代码不会执行 跳到对应捕获异常的catch() 语句块执行 运行时异常在运行过程中才抛出 先捕获特殊异常 后捕获一般异常