大家好,又见面了,我是你们的朋友全栈君。
getClass的定义以及使用方法
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:创建该类型的一个实例
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149190.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...