class对象中有什么方法?该怎么使用?

TheDisguiser 2020-06-24 16:37:14 java常见问答 8321

Class对象相信大家都是知道的,不然java就白学了,那小伙伴们知道class对象中有哪些方法吗?它们又该如何使用呢?下面一起来看看吧。

class方法

class对象中有什么方法

class对象中有什么方法

方法实例:

package com.cry;
import java.lang.reflect.Field;
interface I1
{}
interface I2
{}
class Cell
{
    public int mCellPublic;
}
class Animal extends Cell
{
    private int mAnimalPrivate;
    protected int mAnimalProtected;
    int mAnimalDefault;
    public int mAnimalPublic;
    private static int sAnimalPrivate;
    protected static int sAnimalProtected;
    static int sAnimalDefault;
    public static int sAnimalPublic;
}
class Dog extends Animal implements I1, I2
{
    private int mDogPrivate;
    public int mDogPublic;
    protected int mDogProtected;
    private int mDogDefault;
    private static int sDogPrivate;
    protected static int sDogProtected;
    static int sDogDefault;
    public static int sDogPublic;
}
public class Test
{
    public static void main(String[] args) throws IllegalAccessException, InstantiationException
    {
        Class < Dog > dog = Dog.class;
        //类名打印
        System.out.println(dog.getName()); //com.cry.Dog
        System.out.println(dog.getSimpleName()); //Dog
        System.out.println(dog.getCanonicalName()); //com.cry.Dog
        //接口
        System.out.println(dog.isInterface()); //false
        for (Class iI: dog.getInterfaces())
        {
            System.out.println(iI);
        }
        /*
         interface com.cry.I1
         interface com.cry.I2
        */
        //父类
        System.out.println(dog.getSuperclass()); //class com.cry.Animal
        //创建对象
        Dog d = dog.newInstance();
        //字段
        for (Field f: dog.getFields())
        {
            System.out.println(f.getName());
        }
        /*
            mDogPublic
            sDogPublic
            mAnimalPublic
            sAnimalPublic
            mCellPublic  //父类的父类的公共字段也打印出来了
         */
        System.out.println("---------");
        for (Field f: dog.getDeclaredFields())
        {
            System.out.println(f.getName());
        }
        /** 只有自己类声明的字段
         mDogPrivate
         mDogPublic
         mDogProtected
         mDogDefault
         sDogPrivate
         sDogProtected
         sDogDefault
         sDogPublic
         */
    }
}

getSimpleName:只获取类名

getName:类的全限定名,jvm中Class的表示,可以用于动态加载Class对象,如Class.forName。

getCanonicalName:返回更容易理解的表示,主要用于输出(toString)或log打印,大多数情况下和getName一样,但是在内部类、数组等类型的表示形式就不同了。

例:

package com.cry;
public class Test
{
    private class inner
    {}
    public static void main(String[] args) throws ClassNotFoundException
    {
        //普通类
        System.out.println(Test.class.getSimpleName()); //Test
        System.out.println(Test.class.getName()); //com.cry.Test
        System.out.println(Test.class.getCanonicalName()); //com.cry.Test
        //内部类
        System.out.println(inner.class.getSimpleName()); //inner
        System.out.println(inner.class.getName()); //com.cry.Test$inner
        System.out.println(inner.class.getCanonicalName()); //com.cry.Test.inner
        //数组
        System.out.println(args.getClass()
            .getSimpleName()); //String[]
        System.out.println(args.getClass()
            .getName()); //[Ljava.lang.String;
        System.out.println(args.getClass()
            .getCanonicalName()); //java.lang.String[]
        //我们不能用getCanonicalName去加载类对象,必须用getName
        //Class.forName(inner.class.getCanonicalName()); 报错
        Class.forName(inner.class.getName());
    }
}

以上就是关于class对象中方法的全部内容,小伙伴们如果还需要了解更多java常见问题及答案就请记得关注我们网站啊。