(反射)类的加载(33)

1、类的加载过程:加载、连接、初始化。

2、类的加载:将.class文件加载到内存中,并为之生成对应的class对象。

3、JRE System Librarys :运行时期 系统的类库。

4、java的反射机制:动态获取类的信息和动态调用类的方法的功能。

5、接口是个好东西,因为他可以约束实现接口的类的方法。

6、获取Class文件对象的三种方式(三种方式获取的Class都是同一个,也就是唯一性的):对象获取,类名获取,Class类的静态方法获取(Class = Class.forName("com.taobao.demo.Person"))。 // 注意Stirng 参数是带着包名走  =>即:包名.类名

7、Constructor:是 描述构造方法的对象类,返回值是类的构造器数组 Contructor[]   //注意:带private的方法不会返回。

8、关键字权限 ===》public : 外包都能用(最高权限)   default:本包内能用。 protected :子类专用。    private :只能自己用。

import java.lang.reflect.Constructor;

public class ReflectDemo {

    public static void main(String[] args) throws Exception{
        Class c1 = Class.forName("cn.itcast.demo1.Person");
//        Constructor[] c = c1.getConstructors();
//        for(Constructor con : c){
//            System.out.println(con);
//        }
        //运行空参构造方法
        Constructor c = c1.getConstructor();
        Object obj = c.newInstance();
        Person p = (Person)obj;
//        System.out.println(obj.toString());
//        p.eat();

        //通过反射,获取有参数的构造方法并运行
        Constructor chave = c1.getConstructor(String.class,int.class);
        Object obj_have = chave.newInstance("何",25);
        //System.out.println(obj_have);

        //反射获取构造方法并运行,有快捷点的方式
        //前提:
                //被反射的类,必须具有空参构造方法
                // 构造方法权限 必须是 public
        // 666 直接创建被反射类的对象实例。
        Class c2 = Class.forName("cn.itcast.demo1.Person");
        Object obj2 = c2.newInstance();

        //反射获取私有的构造方法运行
            //不推荐,因为破坏了程序的封装性、安全性
        Class c3 = Class.forName("cn.itcast.demo1.Person");
        Constructor con3 = c3.getDeclaredConstructor(int.class, String.class);
        //暴力反射技术:打破封装性。即运行时期,取消java访问权限检查
        con3.setAccessible(true);
        Object obj3 = con3.newInstance(18,"里斯");
        System.out.println(obj3);

    }

}

原文地址:https://www.cnblogs.com/ivan5277/p/10140926.html

时间: 2024-11-24 06:50:46

(反射)类的加载(33)的相关文章

类的加载和反射

一.类的加载 类的加载一共分为三步: 1.加载 就是将类加载进内存,并同时创建一个Class对象(就是描述一个 .class 文件的对象) 而且任何类被使用前都会先创建一个 Class对象 2.连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 3.初始化 见前面的初始化笔记. 初始化的时机: 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类

类的加载到反射reflect

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

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

java 27 - 1 反射之 类的加载器

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

java 类的加载及反射机制

一,类的加载,连接,初始化 一个类被加载到JVM需要三个步骤:加载,链接,初始化 1,先说下加载过程 2,连接 注意连接过程分为三个阶段,验证,准备,解析 3,初始化 这里注意:类的加载过程,先加载静态代码块,其次是代码块,然后是构造函数 静态成员之间级别一样,因此谁在前,谁最先被加载 二,反射机制 1,先理解下反射 2,为什么要使用反射 可能以上叙述依然很抽象,下面我们用具题代码说明 在开始代码之前我们要先,明白一个对象 java.lang.Class 我们可以这样想,java程序在运行前,会

类的加载机制和反射——一、类的加载、连接和初始化

类的加载.连接和初始化 1.JVM和类 (1)当调用java命令运行某个Java程序时,该命令会启动一个Java虚拟机进程,不管该Java程序有多么复杂,该程序启动了多少线程,他们都处于该Java虚拟机进程里. (2)同一个JVM的所有线程.所有变量都处于同一个进程里,他们都使用该JVM进程的内存区. 下面的ATast1和ATest2的输出结果分别是7和6,因为这两个不是位于同一个JVM中的. public class A { //定义该类的类变量 public static int a = 6

Java 学习 类的加载及反射

类加载机制与反射 (一)类的加载,连接和初始化 1,一个main函数相当于调用一个jvm进程,main函数结束其内存数据清除 2,类加载(类初始化)三个步骤:   1:类的加载: 2,类的连接: 3,类的初始化:                     (二)类加载器 1,Bootstrap ClassLoader:根类加载器(非ClassLoder子类,jvm提供) 2,Extension ClassLoader:扩展类加载器 负责加载JRE中的类 3,System ClassLoader:系

类的加载、时机、反射、模板设计、jdk7/jdk8新特性(二十六)

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

类的加载器和反射

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