获取class对象的三种方法以及通过Class对象获取某个类中变量,方法,访问成员
public class ReflexAndClass {
    public static void main(String[] args) throws Exception {
        /**
         * 获取Class对象的三种方式
         * 1 Object ——> getClass();
         * 2 任何数据类型(包括基本数据类型)都有一个静态的class属性
         * 3 通过Class类的静态方法:forName(String  className)(常用)
         *
         *
         * 注意:在运行期间,一个类,只有一个Class对象产生。
         * 三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。
         * 一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。
         * @throws Exception
         */
        //第一種  getClass
        Student stu = new Student();
        Class stuClass1 = stu.getClass();
        System.out.println(stuClass1.getName());
        //第二種 class属性
        Class stuClass2 = Student.class;
        System.out.println(stuClass2==stuClass1);
        //第三種
        try {
            Class stuClass3 = Class.forName("reflex.Student");//student的路径
            System.out.println(stuClass3);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
       /**通过Class对象可以获取某个类中的:构造方法、成员变量、成员方法;并访问成员;
         *
         * 1.获取构造方法:
         *         1).批量的方法:
         *             public Constructor[] getConstructors():所有"公有的"构造方法
         *          public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)
         *
         *         2).获取单个的方法,并调用:
         *             public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法:
         *             public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有;
         *
         *             调用构造方法:
         *             Constructor-->newInstance(Object... initargs)
         *         获取私有的构造方法的时候需要使用setAccessible设置访问权限为true才能进行构造,否则出现异常
         */
        Class<?> clazz = Class.forName("reflex.Student");
        Constructor[] public1 = clazz.getConstructors();
        System.out.println("公有構造方法");
        for(Constructor con : public1){
            System.out.println(con);
        }
        Constructor[] public2 = clazz.getDeclaredConstructors();
        System.out.println("所有構造方法");
        for(Constructor con : public2){
            System.out.println(con);
        }
        Constructor con = clazz.getConstructor(null);
        System.out.println("公有無參:" + con);
        Constructor cons = clazz.getDeclaredConstructor(String.class);
        System.out.println("所有無參公有構造方法"+cons);
        Object name = clazz.getDeclaredConstructor(String.class).newInstance("chen");
        Student s = new Student();
        System.out.println("名稱為:" + name);
        //调用构造方法
        Object obj = con.newInstance();
//        System.out.println("obj = " + obj);
//        Student student = (Student)obj;
    }
}
public class Student {
        //---------------构造方法-------------------
        //(默认的构造方法)
        Student(String str){
            System.out.println("(默认)的构造方法 s = " + str);
        }
        //无参构造方法
        public Student(){
            System.out.println("调用了公有、无参构造方法执行了。。。");
        }
        //有一个参数的构造方法
        public Student(char name){
            System.out.println("姓名:" + name);
        }
        //有多个参数的构造方法
        public Student(String name ,int age){
            System.out.println("姓名:"+name+"年龄:"+ age);//这的执行效率有问题,以后解决。
        }
        //受保护的构造方法
        protected Student(boolean n){
            System.out.println("受保护的构造方法 n = " + n);
        }
        //私有构造方法
        private Student(int age){
            System.out.println("私有的构造方法   年龄:"+ age);
        }
}
获取class对象的三种方法以及通过Class对象获取某个类中变量,方法,访问成员的更多相关文章
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
		反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ... 
- 反射:获取Class对象的三种方式
		获取Class对象的三种方式 package lianxiApril18; /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型( ... 
- Java反射获取类对象的三种方式
		package demo01; /* * 获取一个类的class文件对象的三种方式 * 1.对象获取 * 2.类名获取 * 3.Class类的静态方法获取 */ public class Reflec ... 
- Java反射获取class对象的三种方式,反射创建对象的两种方式
		Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ... 
- 3、获取Class对象的三种方式
		3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ... 
- Java反射学习-2 - 获取Class对象的三种方式
		package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ... 
- 回忆(一):反射中获得class对象的三种方法
		package reflex; /* * 反射:就是通过class文件对象 去使用该文件中的成员 * 变量,构造方法,成员方法. * * Person p = new Person(); p.使用 * ... 
- 反射应用和获取Class对象的三种方式
		一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ... 
- Java中获取键盘输入值的三种方法
		Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ... 
随机推荐
- Spring Cloud Netflix Eureka【服务治理】
			一.简介 二.使用 一.源码分析 
- MySQL学习(五)事务隔离
			文章部分图片和总结来自参考资料,侵删 概述 MySQL的可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到 ... 
- Java开发之Redis
			简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - value 缓存产品均有以下特点: Redis 支持数据持久化 ... 
- 2019 ICPC南京站网络赛 H题 Holy Grail(BF算法最短路)
			计蒜客题目链接:https://nanti.jisuanke.com/t/41305 给定的起点是S,终点是T,反向跑一下就可以了,注意判负环以及每次查询需要添加边 AC代码: #include< ... 
- Codeforces Round #567 (Div. 2) A.Chunga-Changa
			原文链接:传送 #include"algorithm" #include"iostream" #include"cmath" using n ... 
- PHP 超全局变量之$GLOBALS
			$GLOBALS——引用全局作用域中可用的全部变量. $GLOBALS一个包含了全部变量的全局组合数组.变量的名字就是数组的键.(即所有出现过的全局变量,都可通过$GLOBALS获取到) 注释: “S ... 
- 线性筛-prime,强大O(n)
			和朴素的素数筛法一样,flag数组,记录x是否为素数 flag[x]=0,x为合数 falg[x]=1,x为素数 flag[1],无定义 其核心思想是,用x筛除与之差异最小的y,达到时间上O(n)的目 ... 
- Spring Boot框架 - 数据访问  - 整合Mybatis
			一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.b ... 
- bugku 细心
			打开链接会看到提醒404 显示不能访问 然后用御剑 扫描一下 然后会发现另一个 网址 然后打开 发现 有一个/result.php然后改一下 网址会发现 另一个网页 然后利用提示 将链接的后缀名改成? ... 
- 【笔记】Linux进程间同步和进程绑定至特定cpu
			#define _GNU_SOURCE #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ... 
