Java常用类:Class类

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

Class

1.Class和.class文件

Class是一个类,所有的Java类在项目启动后都会被jvm加载生成一个Class的实例对象,该对象保存在.class文件中,每个类只有一个Class对象,jvm通过该对象获取类的所有信息,通过new关键字创建对象实际上是通过Class反射得到的。

Java是解释型语言,启动后会把.java文件编译成.class文件,每个类都对应一个.class文件,使用反编译工具打开.class文件可以看到自己手动编写的类的所有信息,下图是我使用反编译工具打开一个jar包,打开其中一个.class文件的结果:
在这里插入图片描述
可以看出,jar包中是一些基础类和自己编写的类的.class文件的集合,有了.class文件,就可以实现一次编译,到处运行,因为jvm虚拟机会通过.class文件获取到类信息,通过反射可以执行类中方法。

2.三种方式获取Class实例对象

Class.forName(“类的全路径名”);
类名.class;
对象.getClass();

Class clazz1 = Class.forName("java.lang.String");
Class clazz2 = Object.class;
Object object = new Object();
Class clazz3 = object.getClass();

3.Class的常用方法

//获取指定方法名的方法
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
//获取所有的方法数组
public Method[] getDeclaredMethods()
//获取所有的公共方法
public Method[] getMethods()
//获取类的全路径名
public String getName()
//获取类名
public String getSimpleName()
//获取所有的属性数组
public Field[] getDeclaredFields()
//获取指定属性名的属性
public Field getDeclaredField(String name)
...还有很多get方法,不一一列举

//判断是否是接口
public native boolean isInterface()
//判断是否是注解类
public boolean isAnnotation()

接下来以下面这个StringDemo类为例子,说明各个方法的使用

public class StringDemo {
    private String name;

    public static void testIsEmpty(){
        String str = "fr";
        System.out.println(str.isEmpty());
    }

    public static void testCompare(){
        String str = "1ABc23";
        System.out.println("123".equals(str));
        System.out.println(str.startsWith("1"));
        System.out.println(str.endsWith("23"));
        System.out.println(str.equalsIgnoreCase("1abc23"));
    }

    public void judgeUserIdentity(String type){
        switch (EnumDemo.getValue(type)){
            case COPPER:
                doSomething0();break;
            case SILVER:
                doSomething1();break;
            case GOLD:
                doSomething2();break;
            case PLATINUM:
                doSomething3();break;
            case DIAMOND:
                doSomething4();break;
        }
    }
    public void doSomething0(){
        System.out.println("COPPER");
    }
    public void doSomething1(){
        System.out.println("SILVER");
    }
    public void doSomething2(){
        System.out.println("GOLD");
    }
    public void doSomething3(){
        System.out.println("PLATINUM");
    }
    public void doSomething4(){
        System.out.println("DIAMOND");
    }
    
}
Class clazz =Class.forName("com.jdk_source_code.demo.util.StringDemo");
System.out.println(clazz.getName());//com.jdk_source_code.demo.util.StringDemo
System.out.println(clazz.getSimpleName());//StringDemo
Method method = clazz.getDeclaredMethod("judgeUserIdentity", String.class);
method.invoke(clazz.newInstance(),"COPPER");//COPPER
System.out.println(clazz.isInterface());//false
System.out.println(clazz.isAnnotation());//false
Method[] methods = clazz.getDeclaredMethods();
for(Method item:methods){
	System.out.println(item);
	}
/**
* public void com.jdk_source_code.demo.util.StringDemo.judgeUserIdentity(java.lang.String)
* public static void com.jdk_source_code.demo.util.StringDemo.testIsEmpty()
* public void com.jdk_source_code.demo.util.StringDemo.doSomething0()
* public void com.jdk_source_code.demo.util.StringDemo.doSomething1()
* public void com.jdk_source_code.demo.util.StringDemo.doSomething2()
* public static void com.jdk_source_code.demo.util.StringDemo.testCompare()
* public void com.jdk_source_code.demo.util.StringDemo.doSomething3()
* public void com.jdk_source_code.demo.util.StringDemo.doSomething4()
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值