java class

作者:原创时间:2022-03-25
文档

java class是什么,让我们一起了解一下?

CLASS是在网络工程中的一种协议,在java中有两种对象:实例对象和Class对象。每个类运行时的类型信息就是用Class对象表示的,它包含了与类有关的信息,其实实例对象就是通过Class对象来创建的。

那我们如何获得Class对象?

1、Class.forName(“类的全限定名”)

2、实例对象.getClass()

3、类名.class (类字面常量)

实战操作:如何获得一个实例的类型类?

Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型,所有的类型类都是Class类的实例。getClass()会看到返回Class

JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型,但是使用泛型的Class,Class.newInstance()方法具有一个特定的返回类型。

代码如下:

public class Main2 {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        System.out.println("1-----------");
        Dog dog1 = creatNew1(Dog.class);
        System.out.println(dog1.name + " is " + dog1.type+ "\n");
        System.out.println("2-----------");
        Animal ani1 = creatNew2(Cat.class);
        Cat cat1 = (Cat) ani1;
        System.out.println(cat1.name + " is " + cat1.type + "\n");
        System.out.println("3-----------");
        Object obj = creatNew3(Dog.class);
        Dog dog2 = (Dog) obj;
        System.out.println(dog1.name + " is " + dog2.type + "\n");
        System.out.println("4-----------");
        Object obj2 = creatNew4(Cat.class);
        Cat cat2 = (Cat) obj2;
        System.out.println(cat2.name + " is " + cat2.type + "\n");
        System.out.println("5-----------");
        Object obj3 = creatNew5(new Cat());
        Cat cat3 = (Cat) obj3;
        System.out.println(cat3.name + " is " + cat3.type + "\n");
    }
    /**
     * 此方法是一个非泛型类中的泛型方法,参数为Class类型,可以传入任何类,但是Class将参数在函数内部的类型固定为 T类,使用clazz.newInstance(),返回的类型也为固定的 T 类型。
     * 如: 传入Dog.class, 函数中的 T 固定为Dog.class,函数返回的是Dog类型,不需要强制转换为Dog类型
     * (当然,函数返回类型也可以是Object类型,但是没必要)
     */
    public static  T creatNew1(Class clazz) throws IllegalAccessException, InstantiationException {
        System.out.println(clazz);//打印具体传入的类型。
        return clazz.newInstance();
    }
    /**
     * 此方法参数是Class,只能传入Animal及其子类的类型,函数返回类型只能声明为Animal或Object类型,
     * 如:传入Cat.class,函数返回一个Animal的子类对象,需将此子类对象强制转换为具体的子类(即Cat类)。
     */
    public static Animal creatNew2(Class clazz) throws IllegalAccessException, InstantiationException {
        System.out.println(clazz);//打印具体传入的类型。
        return clazz.newInstance();
    }
    /**
     * 此方法参数是Class,可传入任何类,其返回只能声明为Object类对象。
     * 如:传入Dog.class, 返回的是Object类型的对象,需强制转换为Dog类型的对象。
     */
    public static Object creatNew3(Class clazz) throws IllegalAccessException, InstantiationException {
        System.out.println(clazz);//打印具体传入的类型。
        return clazz.newInstance();
    }
    /**
     * 传入参数Class 和 上一个方法传入 Class 的区别还不是很清楚,其返回只能声明为Object类对象。
     * 如:Cat.class, 返回的是Object类型的对象,需强制转换为Cat类型的对象。
     */
    public static Object creatNew4(Class clazz) throws IllegalAccessException, InstantiationException {
        System.out.println(clazz);//打印具体传入的类型。
        return clazz.newInstance();
    }
    /**
     * 传入Object类型的对象,返回也声明为Object类型。
     */
    public static Object creatNew5(Object object) {
        System.out.println(object.getClass());//打印具体传入的类型。
        return object;
    }
}
abstract class Animal {
    public String type = "type = animal ";
}
class Dog extends Animal {
    public String name = "name = gou";
}
class Cat extends Animal {
    public String name = "name = mao";
}
/**
 * 这些方法,传的参数声明不同,其返回的声明也必然要随之不同。
 */

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java class.forname java classloader java clob java clone() java collect java collections java color java combobox java comet 山楂干泡水最佳搭配 java commandline java comparable接口 java compiler java config java console java console.log 复活节的由来 java const java consumer接口 统一和康师傅是哪国的 java cipher java charset java charsequence java charat java channel iPad怎么重启 java cglib 平板如何录屏 java ceiling java callback java calendar获取当前时间 苹果13怎么开机 java calculate java byte取值范围 java bytebuffer java bundle java build.gradle java bufferedoutputstream java bufferedimage wps怎么求和