美文网首页
2017-09-11学习记录

2017-09-11学习记录

作者: ahrev | 来源:发表于2017-09-12 00:18 被阅读0次

    今天学习的章节是14章;看完了部分知识。原谅我今天玩的太多了,还有复习了前面的一些知识,所以今天的学的东西就少了;下面的就是所学的知识:

    第十四章:类型信息;

    由于前面的多态的机制,即基类引用子类对象时可以调用到子类覆盖基类的方法,这代表在运行时,编译器可以准确的查找该引用指定的子类对象。所以这里就讲解了java是怎么样实现这个原理的;

    java在创建类时,他会同时生成一个class类,这个class类中保存了原有类的很多信息,类似于接口,父类,内部类之类的消息,而java编译器在使用多态时,通过类的class类查获这些信息,就可以准确的找到基类引用时要调用的函数了;

    获取类型一般是有两种方法:1.RTTI机制,这里指的是纯粹应用class类,这种方法的缺陷是一旦在可访问的空间内找不到该类的。class定义,则代表不能获取到该类的class 类,会失去效果;2.反射机制:在class类的前提下,调用java.lang.reflect类的函数获取,这种情况下,就可以通过这两个函数访问一些在可访问空间中不存在定义的类;

    class类一般在编写完成类且编译后产生,调用类的静态方法可以生成对象;而且new 操作也是隐式静态方法;

    下面是取得class引用对象的方法:1.对象.forName(全限定包);这里全限定包为包名加上类名;2.class<T> cl = T.class,这种方法叫做类字面常量;这样生成的也是引用,这里用的泛型用意在于在生成时进行类型检查,不加也没关系;3.调用对象的。getclass方法;

    在上面的三种方法中,用类字面常量则不会调用这个对象,其他的两种方法都会在使用时调用类的初始化方法;

    class类的一些方法:1.getName(全限定名);2.isInterface();3.getSimpleName()获取类名;4.getCanonicalName()获取全限定名;5.getSuperClass()获得父类的class对象;6.getInterface()获得接口class对象;7.newInstance()返回obj类型但是指向该类的对象;

    class《?ectends Shape》 t这种情况生成的class对象指的是shape的子类的class对象,这样只是规范了生成的class类的类型;

    用instanceof来判断类型;x instanceof dog,这里检查x是否从属于dog类型;和用isInstance是一样的效果,isInstance的语法是:class.isInstance(基类);这里判断括号中的类是否是class从属的对象的基类;

    除了instanceof可以判断,用class类自带的equals方法也可以调用,不过equals方法只能看两个class的从属类是否是同一类,不能判断出他们是否有父子关系;而用instanceof则可以判断父子关系,这样看来instanceof比class的equals方法更好;

    今天就看到这里了,明天看完这章并且把前面的知识总体复习一下。做个好梦!

    相关文章

      网友评论

          本文标题:2017-09-11学习记录

          本文链接:https://www.haomeiwen.com/subject/pfeqsxtx.html