RICH-ATONE

java中getClass()方法详解

 

Class也是个对象,实例对象也是对象。他们是不同的东西。不是站在不同角度描述的同一种东西。
需要理解java的本质。这篇文章和天圆地方说一样,只是自圆其说的解决了你当前的疑惑,但你只能局部角落里,但你永远不会知道从一个点出发可以回到原点。
当你有能力参与到OpenJDK贡献中之后,你才会发现原来地球是"圆的"。Class是对类抽象出来的对象,实例对象是对事物抽象出来的对象。

  

 

 示例:

一个是对象user(user是Object对象  )   一个是User (User是class对象);一个是从Object对象的角度去观察对象,一个是从Class对象的角度观察对象

package javase.opp_one;

import java.lang.reflect.Field;

public class User {
    public int age ;
    public String name ;


    public static void main(String[] args) throws NoSuchFieldException {

//        try {
//            Field age = User.class.getClass().getDeclaredField("age");
//            age.setAccessible(true);
//        } catch (NoSuchFieldException e) {
//            e.printStackTrace();
//        }

//        try {
//            Field age = User.class.getDeclaredField("age");
//            age.setAccessible(true);
//            System.out.println(age);
//        } catch (NoSuchFieldException e) {
//            e.printStackTrace();
//        }

        Class<User> userClass = User.class;
        User user = new User();

        Class<? extends Class> aClass = userClass.getClass();
        Class<? extends User> aClass1 = user.getClass();


        System.out.println(userClass);
        System.out.println(aClass1);
        System.out.println(aClass);

        aClass1.getDeclaredField("age") ;
//        aClass.getDeclaredField("age") ; //此处报错执行不成功

        Field age1 = user.getClass().getDeclaredField("age");

        Field age = User.class.getDeclaredField("age");
//age.setAccessible(true);
//        System.out.println(age);

    }

}

  

结果示例:

class javase.opp_one.User
class javase.opp_one.User
class java.lang.Class

Process finished with exit code 0

  

参考:java中getClass()方法简介

posted on 2022-04-21 20:01  RICH-ATONE  阅读(3610)  评论(0编辑  收藏  举报

导航