java中的getClass()方法的用法

java中的getClass()方法的用法getClass的定义以及使用方法getClass()的作用getClass()使用方式简单代码演示其他相关用法1.getName()和getCanonicalName()2.getDeclaredMethod()3.还有很多对class对象进行操作的方法getClass()的作用getClass()返回此Object的运行时该对象的类.该方法返回一个Class对象,可以通过该对象可…

大家好,又见面了,我是你们的朋友全栈君。

getClass()的作用

getClass() 返回此 Object 的运行时该对象的类. 该方法返回一个Class对象, 可以通过该对象可以获取某个类的相关信息, 如构造方法 属性 方法 等.

getClass()使用方式

1.首先new一个新对象 如 a
2.再通过 a.getClass() 来获取该对象

简单代码演示

  • Car.java
package main;

public class Car { 
   
    private String name;
    private int seat;

    private void showCar(){ 
   
        System.out.println(name + '有' + seat + "个座位");
    }
}
  • UseGetClass.java
package main;

public interface UseGetClass { 
   
    public static void main(String[] args) { 
   
        Car car = new Car();
        Class carClass = car.getClass(); // 使用getClass获取该对象的类

        System.out.println(carClass);
    }
}
  • 运行结果
class main.Car

其他相关用法

1.getName()和getCanonicalName()

getName()获取类名, getCanonicalName(): 返回权威的类名, 当为匿名类时, 返回输出的是null

代码示例:

  • Car.java
package main;

public class Car { 
   
    private String name;
    private int seat;

    private void showCar(){ 
   
        System.out.println(name + '有' + seat + "个座位");
    }

    // 内部类
    class TestCar { 
   
        private String testName;

        public void runTestCar(){ 
   
            System.out.println("测试车辆" + testName);
        }
    }

}
  • Tyre.java 抽象类 用于等会儿创建匿名内部类
package main;

public abstract class Tyre { 
   
    public String size;

    public void setSize(String size){ 
   
        this.size = size;
    }

    public String getSize(){ 
   
        return size;
    }
}
  • UseGetClass.java
package main;

public interface UseGetClass { 
   
    public static void main(String[] args) { 
   
        Car car = new Car();
        Class carClass = car.getClass();  // 使用getClass获取该对象的类

        System.out.println("获取对象的类Class" + carClass);

        // 创建内部类对象
        Car.TestCar testCar = car.new TestCar();
        System.out.println("内部类getName():" + testCar.getClass().getName());  // 获取类名
        System.out.println("内部类getCanonicalName():" + testCar.getClass().getCanonicalName());  // 获取权威类名

        // 创建匿名内部类
        Tyre tyre = new Tyre() { 
   
            @Override
            public void setSize(String size) { 
   
                super.setSize(size);
            }

            @Override
            public String getSize() { 
   
                return super.getSize();
            }
        };
        System.out.println("匿名内部类getName():" + tyre.getClass().getName());  // 获取类名
        System.out.println("匿名内部类getCanonicalName():" + tyre.getClass().getCanonicalName());  // 获取权威类名

    }
}

运行结果 :
获取对象的类Classclass main.Car
内部类getName():main.Car$TestCar
内部类getCanonicalName():main.Car.TestCar
匿名内部类getName():main.UseGetClass$1
匿名内部类getCanonicalName():null

2.getDeclaredMethod()

返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法
定义:

public Method getDeclaredMethod(String name, Class... parameterTypes) throws NoSuchMethodException,SecurityException

该方法有两个参数
name: 是一个字符串,指定所需的方法的名称
parameterTypes: 可选参数,是一个数组的Class对象识别方法的形参类型,在声明的顺序

返回值
匹配指定名称和参数的类的方法,此方法返回的Method对象

异常
NoSuchMethodException – 如果匹配方法未找到

NullPointerException – 如果name 为 null.

注意
getDeclaredMethod() 获取的是类自身声明的所有方法,包含public、protected和private方法。

getMethod () 获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。

代码示例

import java.lang.reflect.Method;

public class UseGetClass { 
   
  public static void main(String[] args) { 
   
      Car car = new Car();
      Class carClass = car.getClass();  // 使用getClass获取该对象的类
      try { 
   
          Method carMethod = carClass.getDeclaredMethod("showCar");  // 获取该类中的showCar方法
          System.out.println("method:" + carMethod);
      } catch (NoSuchMethodException e) { 
   
          e.printStackTrace();
      }
  }
}

3.还有很多对class对象进行操作的方法

常用的有如下:

  • getFields:获取public修饰的所有属性,返回一个Field数组(包括父类的)
  • getDeclaredFields:获取所有属性,返回一个Field数组
  • getField:传入一个参数(属性名),获取单个属性,返回一个Field对象,只能获取public修饰的
  • getDeclaredField:传入一个参数(属性名),获取单个属性,返回一个Field对象
  • getMethods:获取所有的public修饰的方法,包括父类的,返回Method
  • getDeclaredMethods:获取所有的返回,不包括父类,返回Method数组
  • getMethod:传入一个参数(方法名),返回一个Method对象,只能获取到public修饰的
  • getDeclared:传入一个参数(方法名),返回一个Method对象
  • newInstance:创建该类型的一个实例
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149190.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#WinForm窗体美化(IrisSkin皮肤插件的使用)

    C#WinForm窗体美化(IrisSkin皮肤插件的使用)C#皮肤美化插件

    2022年5月20日
    54
  • 离散系统的变换域

    离散系统的变换域

    2022年1月4日
    74
  • 新的Visual C++代码优化器

    微软在5月4日发布了新的高级代码优化器,服务于VisualC++的后端编译器。提高了代码性能,可以压缩代码体积,将编译器带入了一个新的境界。VisualC++的团队在博客上称,这将

    2021年12月23日
    47
  • http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]

    http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]前言:最近写http接口时,有了很多关于接口取参方式的疑问,大家都知道Servlet常用的取参方式有getParameter、getParameterValues、getInputStream(读流形式)。SpringMvc常用的有封装好的@RequestParam,RequestBody。这些取参方式都有什么特点,我都写了测试接口,利用postman做了测试…

    2022年7月22日
    20
  • 面试官,不要再问我“Java虚拟机类加载机制”了

    面试官,不要再问我“Java虚拟机类加载机制”了关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程。其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解。面试题试水现在有这样一道判断程序输出结果的面试题,先看看打印的结果是什么?publicclassSuperClass{static{System.out.println(“SuperCla…

    2022年5月24日
    34
  • pcep协议什么意思_SDN学习笔记

    pcep协议什么意思_SDN学习笔记SDN什么是SDNSDN是一种框架和思想,核心诉求是通过软件控制网络,实现业务的自动化部署,为方便软件来控制网络,希望控制面和转发面是分离的。例如,传统的交换机内部,由交换机负责具体的网络流量往哪里转发,在SDN中,有一个控制器进行流量转发的计算,然后将结果发送给交换机,交换机只进行简单的转发,从分布式的控制转发过程称为集中式的控制,使得控制和转发平面相分离。SDN的特点网络开放可编程、数控分离(…

    2025年9月29日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号