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对象获取某个类中变量,方法,访问成员的更多相关文章

  1. Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)

    反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...

  2. 反射:获取Class对象的三种方式

    获取Class对象的三种方式 package lianxiApril18; /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型( ...

  3. Java反射获取类对象的三种方式

    package demo01; /* * 获取一个类的class文件对象的三种方式 * 1.对象获取 * 2.类名获取 * 3.Class类的静态方法获取 */ public class Reflec ...

  4. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  5. 3、获取Class对象的三种方式

    3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...

  6. Java反射学习-2 - 获取Class对象的三种方式

    package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...

  7. 回忆(一):反射中获得class对象的三种方法

    package reflex; /* * 反射:就是通过class文件对象 去使用该文件中的成员 * 变量,构造方法,成员方法. * * Person p = new Person(); p.使用 * ...

  8. 反射应用和获取Class对象的三种方式

    一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...

  9. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

随机推荐

  1. easyui的combogrid

    easyui的combogri下拉框用在项目中很多,有时会出现很多问题,当然也好解决. 1.当向后台传id值时,用户输入的与查询出来的显示值一样,但combogrid为空? 情景:输入‘李四’,和显示 ...

  2. angularJS 十六进制与字符串相互转换

    angular 将字符串数据转换为十六进制数据 /** * @Description: TODO 字符串转16进制方法 * @author wjw * @date 2019年9月18日16:35:32 ...

  3. 每天进步一点点------Allegro手工建立电路板

    手工建立电路板步骤(以某个四层板为例): (1)file---new---board/board wizard来建立.brd电路板文件.设置名称和保存路径后,要设置绘图区域的大小,setup---dr ...

  4. [Note]后缀数组

    后缀数组 代码 void rsort() { for (int i = 1; i <= m; ++i) tax[i] = 0; for (int i = 1; i <= n; ++i) + ...

  5. 莫愁前路无知己,天下谁人不识Redis

    1. 数据库小知识 1.1 什么是数据库 数据库是"按照数据结构来组织.存储和管理数据的仓库".是一个长期存储在计算机内的.有组织的.有共享的.统一管理的数据集合.数据库是以一定方 ...

  6. 第二十五篇 玩转数据结构——链表(Linked List)

          1.. 链表的重要性 我们之前实现的动态数组.栈.队列,底层都是依托静态数组,靠resize来解决固定容量的问题,而"链表"则是一种真正的动态数据结构,不需要处理固定容 ...

  7. 高内存 高CPU 劣质网络下的测试

    内存 先把系统的虚拟内存去掉 (右键我的电脑属性里有的.选择那个无分页文件 虚拟内存在任务管理器就不显示了), 然后机子本身内存不高,开几个网页就满了       CPU cpu可以用鲁大师测试cpu ...

  8. nginx.conf nginx反向代理配置文件

    nginx反向代理配置文件 nginx.conf proxy_default.conf proxy.conf vhost/*.conf upstream/*.conf cache/*.conf ngi ...

  9. 「JSOI2015」染色问题

    「JSOI2015」染色问题 传送门 虽然不是第一反应,不过还是想到了要容斥. 题意转化:需要求满足 \(N + M + C\) 个条件的方案数. 然后我们就枚举三个数 \(i, j, k\) ,表示 ...

  10. iOS 音视频播放

    播放控制切换为: ijkplayer wiki: https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-ijkplayer 播放控制切换为: ...