首页 > 编程语言 >Java中获取class对象

Java中获取class对象

时间:2023-02-17 23:33:23浏览次数:37  
标签:Class Java Person class clazz 获取 com public

Java中获取class对象_Java

1、为什么要获取class对象

当我们要获取类的信息及方法,利用Java中的反射机制,便于我们更加灵活的编写代码,可以在程序运行时装配代码,还可以实现动态代理。

反射机制允许程序在运行期间,获取任何一个已知名称的class内部信息。

那么获取class对象及内容信息的获取,主要有三种方式。

2 使用 getClass() 方法

2.1 创建 Person 类

package com.clazz;

public class Person {
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

2.2 创建测试类

package com.clazz;

public class Test {
public static void main(String[] args) {
Person person = new Person();
Class clazz = person.getClass();
System.out.println(clazz.getName());
}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

需要注意的是: 当对同一个类,同时创建多个对象实例时,class对象实际只有一份。

Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.getClass() == person2.getClass());

运行的结果为 true。

3 使用 class 静态属性

这种方式不需要对类进行实例化,直接使用类的 class 静态属性即可获取到该类的 class 对象。

package com.clazz;

public class Test {
public static void main(String[] args) {
Class<Person> personClass = Person.class;
System.out.println(personClass.getName());
}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

4 使用 Class 类中的静态方法 forName()

使用这种方式获取 class 对象,需要在 forName() 方法中指定要获取 Class 对象类的全路径,即包名+类名。

package com.clazz;

public class Test {
public static void main(String[] args) {
try {
Class<?> aClass = Class.forName("com.clazz.Person");
System.out.println(aClass.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

这里有个问题需要注意,因为是我们手工指定该类的全路径信息,有可能该包未被我们引入,或者是手滑将包名、路径信息输入错误,有可能报错,所以这种方式需要向外抛出异常。

标签:Class,Java,Person,class,clazz,获取,com,public
From: https://blog.51cto.com/u_113754/6064558

相关文章

  • 用Python做一个小说下载器,从获取数据到编写GUI界面
    对于广大书虫而言,没有小说看是最痛苦的,你身边有这样的人吗?今天咱们分享一个小说下载器代码,打包成exe后,发给你的小伙伴也能直接使用…思路流程什么是爬虫?......
  • JavaScript normalize function All In One
    JavaScriptnormalizefunctionAllInOneUnicodestring/Emojistring国际化String.prototype.normalize()Thenormalize()methodreturnstheUnicodeNormaliz......
  • PAT-basic-1005 继续(3n+1)猜想 java
    一、题目卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数......
  • Java 之 Charset.defaultCharset()
     简述以一个故事^1开局。IDEA在使用Gradle时可能会输出乱码,常见的解决方式是CustomVMOptions里面增加-Dfile.encoding=UTF-8。但故事作者通过细致分析找到问题的......
  • PAT-basic-1004 成绩排名 java
    一、题目读入n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含1个测试用例,格式为第1行:正整数n第2行:第1......
  • Java的IO、NIO和Okio
    二、Java的IO、NIO和Okioio是输入输出流,作用就是对外部进行数据交互使用的,内部和外部分别表示的是内存以及内存以外的,外部包括手机文件,电脑文件和网络,服务器等都称为外部......
  • PAT-basic-1003 我要通过!java
    一、题目“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“......
  • Java面向对象基础
    Java面向对象基础什么是面向对象编程,Java类和对象有什么区别OOP(ObjectOrientedProgramming)编程是利用“类”和“对象”来创建模型实现对真实世界的描述使程序更加......
  • PAT-basic-1002 写出这个数 java
    一、题目读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。输......
  • PAT-basic-1001 害死人不偿命的(3n+1)猜想 java
    一,题目卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡......