首页 > 其他分享 >获得class对象的方式有哪些?

获得class对象的方式有哪些?

时间:2023-06-19 22:24:10浏览次数:33  
标签:哪些 对象 System class -------------- println Class out

获取class对象的方式有哪些?

方式一:通过对象获得
—— 已知某个类的实例,调用该实例的getClass()方法获得Class对象

Class aClass1 = student.getClass();

方式二:.forName获得
——已知一个类的全类名,且该类在类路径下,可以通过Class类的静态方法forName()方法获取,但需抛出异常

Class aClass2 = Class.forName("com.reflection.Student");

方式三:类名.class获得
——若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高

Class<Student> aClass3 = Student.class;

eg:

public class TestClassObject {
	public static void main(String[] args) throws ClassNotFoundException {
		
		//通过类的对象获取Class对象
		Student student = new Student();//类的对象
		Class c = student.getClass();//类对象(Class对象,保存了Student.class这个文件的所有信息)
		System.out.println(c.getName());
		
		//通过类名获取类对象
		Class c2 = Student.class;
		System.out.println(c2.getName());
		
		//通过静态方法获取类对象  		“包名.类名”
		Class c3 = Class.forName("classfanshe.Dog");
		System.out.println(c3.getName());
	}
}

class Student{
}

class Dog{
	
}

~
~

基本内置类型的包装类都有一个Type属性

Class<Integer> aClass4 = Integer.class;

获得父类类型的方式

Class superclass = aClass1.getSuperclass();

~
~
~

实例代码演示

/**
 * 测试class类的创建方式有哪些
 */
public class Demo {
    public static void main(String[] args) throws ClassNotFoundException {

        //new一个对象
        Person student = new Student();
        System.out.println("这个人是:"+student);


        /*已知某个类的实例,调用该实例的getClass()方法获得Class对象*/
        System.out.println("--------------方式一:通过对象获得  ---------------");
        Class<? extends Person> aClass1 = student.getClass();
        System.out.println(aClass1.hashCode());


        /*已知一个类的全类名,且该类在类路径下,可以通过Class类的静态方法forName()方法获取,但需抛出异常*/
        System.out.println("--------------方式二:forname获得---------------");
        Class<?> aClass2 = Class.forName("com.niuyun.reflection.Student");
        System.out.println(aClass2.hashCode());


        /*若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高*/
        System.out.println("--------------方式三:通过<类名.Class>获得--------------");
        Class<Student> aClass3 = Student.class;
        System.out.println(aClass3.hashCode());


        System.out.println("--------------方式四:基本内置类型的包装类都有一个Type属性--------------");
        Class<Integer> aClass4 = Integer.class;
        System.out.println(aClass4);
        System.out.println(aClass4.hashCode());


        System.out.println("--------------获得父类类型——方式--------------");
        Class<?> superclass = aClass1.getSuperclass();
        System.out.println(superclass);

    }
}
/**
*Person类
*/
class Person{
    String name;

    //无参构造
    public Person() {
    }

    //有参构造
    public Person(int id, String name, int age) {
        this.name = name;
    }

    //get(),set()方法
    public String getName() {
        return name;
    }

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


    //toString方法
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

//Student继承Person类
class Student extends Person{

    public Student(){
        this.name="niuyun";
    }
}

//Teacher继承Person类
class Teacher extends Person{

    public Teacher(){
        this.name="niuyun";
    }

}

运行结果:

这个人是:Person{name='niuyun'}
--------------方式一:通过对象获得  ---------------
1163157884
--------------方式二:forname获得---------------
1163157884
--------------方式三:通过<类名.Class>获得--------------
1163157884
--------------方式四:基本内置类型的包装类都有一个Type属性--------------
class java.lang.Integer
1956725890
--------------获得父类类型——方式--------------
class com.niuyun.reflection.Person

~~~感谢您的光临~~

标签:哪些,对象,System,class,--------------,println,Class,out
From: https://www.cnblogs.com/niuyun/p/17492370.html

相关文章

  • 错误:“java.lang.ClassNotFoundException: com.mysql.jdbc.Driver“ 如何解决?
    ——运行项目时遇到java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题,解决方案:错误如下:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver atorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358) atorg.......
  • 用 SmartEdit 打开 SAP Commerce Cloud Storefront 时动态在 body 标签注入的 css cla
    当我们使用SAPSmartEdit打开SAPCommerceCloudStorefront时,在商户网站中,还必须在body标签中作为CSS类名包含以下唯一标识符:smartedit-page-uid-:指定指定目录和目录版本的唯一页面标识符。这是为了支持旧版实现而必需的。smartedit-page-uuid-:指定页面的全局唯一标识符(UU......
  • this version of the Java Runtime only recognizes class file versions up to 52.0
    在SAPCommerceCloudBackoffice做fullindexing时,遇到错误消息:ERROR:Errorfromserverathttps://localhost:8983/solr:ErrorCREATEingSolrCore'master_backoffice_backoffice_product_flip':Unabletocreatecore[master_backoffice_backoffice_product......
  • Lua 面向对象
    Lua面向对象面向对象编程(ObjectOrientedProgramming,OOP)是一种非常流行的计算机编程架构。以下几种编程语言都支持面向对象编程:所谓的面向对象不过是把数据结构的组织,把零散的方法和变量封装成一个整体,组件化从而可以组建成更加庞大的体系构建世界万物。不要过度迷信面向对......
  • 在JavaScript中实现Promise对象
    classPromise2{#status='pending'constructor(fn){this.q=[]constresolve=(data)=>{this.#status='fulfilled'constf1f2=this.q.shift()if(!f1f2||!f1f2[0])returnconstx=f1f2[0].ca......
  • 正在成为组织运营标配的流程挖掘,到底有哪些商业价值?
    正在成为组织运营标配的流程挖掘,到底有哪些商业价值?作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配文/王吉伟AIGC正在影响越来越多的行业,流程挖掘领域亦不例外。Mindzie首先宣布集成生成式AI,使用户能够以提出业务问题的方式搜索流程见解。Pega紧随其后,推出了深度融合ChatGP......
  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • 原油期货平台哪家好?原油期货平台选择方法有哪些?
    想要投资理财,就得为自己找到一个适合自己的交易产品,不管是选择黄金还是原油产品,其实都是很好的选择,相比较于把钱放在银行或者是投资股票,原油类的产品更值得选择。原油期货其实也很适合普通人投资,通过基础知识的学习和经验的积累,投资者是可以做好原油期货交易的。而原油期货平台哪家......
  • 在Java中创建对象的不同方法是什么?
    在这篇快速文章中,我们将讨论在Java中创建对象的五种不同方法。我们知道,类是创建对象的模板或蓝图。让我们列出在Java中创建对象的不同方法。用Java创建对象的5种不同方法1.使用新关键字2.使用  newInstance() Class类的方法3.使用  newInstance() Constructor类的方法4.使用......
  • (十)Math对象API、数学对象、布尔对象
    一、MathAPI 二、数字对象 三、布尔对象 ......