zoukankan      html  css  js  c++  java
  • Java基础篇(JVM)——Class对象

    Class对象

    这篇文章算是补充的一点东西,主要看一看Class对象的相关知识。
    主要关心的有以下几个点:

    1. Class对象是什么?
    2. Class对象和反射
    3. Class对象如何使用

    Class对象是什么

    可以简单这么说:Class对象就是字节码文件存储的内容。所以将字节码加载进入内存中时,即在内存中生成了Class对象(Class对象和普通对象一样,也是存放在堆中;尽管加载进来的类信息是放在方法区当中的,这点要注意!)。

    有Class对象,就有Class类。Class类、Class对象,普通类、普通对象的关系如图:

    Class对象的作用是:在运行时期提供或者获得某个对象的类型信息,这对于反射比较重要。

    Class对象与反射

    反射是指在运行时,对于任意一个类,都能够动态地获得并使用其成员属性和方法。

    语言的动态性是指,在运行时能够改变结构或变量类型。Java语言是静态语言,正是通过反射,才实现了动态性。Spring等框架也是基于反射才有了实现的可能。

    如何获得Class对象

    三种方法:

    1. Class.forName("xxx"); ——Class的静态方法
    2. obj.getClass(); ——继承自Object类的普通方法
    3. Object.class(); ——类字面量

    Class对象如何使用

    主要可通过Class对象获得构造器,静态/普通变量,静态/普通方法,需要用到下面三个类。

    Constructor类:

    首先获得类构造器,再用Constructor类中的方法来使用构造器。

    1. 获得Constructor对象:

    • getConstructor(Class<?>... parameterTypes):返回指定参数类型、public访问权限的构造器

    • getDeclaredConstructor(Class<?>... parameterTypes):返回指定参数类型、所有访问权限的构造器

    • getDeclaredConstructor():返回所有访问权限的构造器

    2. 使用构造器

    获得类的构造器后,可以用cons.newInstance(xx,xxx);来使用构造器来传入参数,创建对象。

    Filed类

    常见方法:

    1. 获得Filed对象:

    • getFields:获取public修饰的所有属性,返回一个Field数组(包括父类的)

    • getDeclaredFields:获取所有属性,返回一个Field数组

    • getField:传入一个参数(属性名),获取单个属性,返回一个Field对象,只能获取public修饰的

    • getDeclaredField:传入一个参数(属性名),获取单个属性,返回一个Field对象

    2. 操作属性:

    myFiled.set(Object obj, Object value):设置指定对象中某个属性的值;

    get(Object obj):获得指定对象中某个属性的值;

    Method类

    常见方法:

    1. 获得Method对象:

    • getMethods:获取所有的public修饰的方法,包括父类的,返回Method数组

    • getDeclaredMethods:获取所有的返回,不包括父类,返回Method数组

    • getMethod:传入一个参数(方法名),返回一个Method对象,只能获取到public修饰的

    • getDeclared:传入一个参数(方法名),返回一个Method对象

    2. 调用方法:

    method.invoke(Object obj,Object... args):调用指定对象的指定参数的方法。

  • 相关阅读:
    C#生成满足特定要求的密码
    抽象方法(abstract method) 和 虚方法 (virtual method), 重载(overload) 和 重写(override)的区别于联系
    面试问题 ---C#中的委托
    面试问题
    如何用DOS命令,获取一个目录下的文件数目
    vim怎么把一个写的代码文件另存到任意文件夹里?
    WIN7 不用格式化磁盘怎么把FAT32系统改成NTFS系统
    rhel6 中安装使用finger命令
    Redhat enterpise6 安装unix2dos/dos2unix
    阐述Linux操作系统之rpm五种基本操作
  • 原文地址:https://www.cnblogs.com/lilei94/p/10091898.html
Copyright © 2011-2022 走看看