类名.class 就是字面常量,代表的就是该类的Class对象引用。常量需要赋值给变量

    1. 简单,安全。 编译期接受检查,不需要像forName一样置于try/catch块中。
    2. 加载后不会进行初始化,初始化被延迟到静态方法静态域首次使用时。
    3. 类字面常量可用于类 接口 数组 基本数据类型
    4. 基本数据类型也有类字面常量如int.class, 对应的包装器的 Integer.TYPE。
              System.out.println(int.class); //int
      System.out.println(Integer.TYPE); //int
      System.out.println(Integer.class); //class java.lang.Integer
    5. Integer继承自Number 但 Integer Class 对象不是 Number Class对象的子对象,也就是说Class<Number> cn  = int.class; 是错误的。

二.泛化的Class引用

1.普通的类引用可以重新指向任何其它的Class对象,使用泛型类引用只能赋值为指向其声明的类型,除外使用通配符?

  Class intClass = int.class;
Class<Integer> genericIntClass = int.class;
Class<?> i = int.class;
i = double.class;
genericIntClass = Integer.class; // Same thing
intClass = double.class;

2.Class<?> 优于Class 因为Class在编译期不会产生警告,而Class<?>当指向一个非具体的类引用时会产生警告

3.a.newInstance()如果Class引用a不是泛型引用,在编译期就不知道它会返回什么类型那么只能返回Object。

        Class a = A.class;
Object t = a.newInstance();
//A t = (A) a.newInstance();//无法确定类型需要强制转换
System.out.println(t.getClass().getName());//thinking14class.A

4.a.newInstance()  a 是泛型引用并且能确定类型则会返回确切的类型。

        Class <A> a= A.class;
Class <? extends C> c= C.class; //上界
Class <? super A> d= A.class;
A ta = a.newInstance(); // 可以确定
A tc = c.newInstance(); // 上界至少它是一个C可以确定

5. a.newInstance()  a 是泛型引用但不能确定类型则只能返回Object。

        Class <A> a= A.class;
Class <? extends C> c= C.class; //上界
Class <? super A> d= A.class; //下界
//A ta = a.newInstance(); // 通配符无法确定 A tc = c.newInstance(); // 上界至少它是一个C可以确定 //A td = d.newInstance();// 下界无法确定

6. 利用Class类的cast()方法来转换类型

class Building {}
class House extends Building {}

public class ClassCasts {
public static void main(String[] args) {
Building b = new House();
Class<House> houseType = House.class;
House h = houseType.cast(b);
h = (House)b; // ... or just do this.
}
} ///:~

fd

java 类字面常量,泛化的Class引用的更多相关文章

  1. JAVA类和对象创建

    面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...

  2. Java类的设计----关键字super

    关键字super 在Java类中使用super来引用父类的成分 super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造方法中调用父类的构造方法 su ...

  3. Jython引用Java类

    Ubuntu下如下指令安装Jython:$ sudo apt-get install jython下面的指令用于查看Jython版本:$ jython --version下面的代码是一个简单的Java ...

  4. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  5. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  6. 深入研究Java类装载机制

    目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...

  7. 第9章 Java类的三大特性之一:继承

    1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{…………}第9章 Ja ...

  8. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  9. Java Native Interfce三在JNI中使用Java类的普通方法与变量

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 前面我们学习了如何在JNI中通过参数来使用J ...

随机推荐

  1. 类的内置方法__attr__介绍

    1.hasattr  getaddr  setaddr delattr 这四个函数同样也适用于类 class BlackMedium: feture="Ugly" def __in ...

  2. CentOS6.8下查看yum及rpm安装后的软件位置

    参考资料:http://blog.csdn.net/ngvjai/article/details/7997743   http://blog.sina.com.cn/s/blog_976e495701 ...

  3. hive vs hbase

    HIVE和HBASE区别 两者分别是什么? Apache Hive是一个构建在Hadoop基础设施之上的数据仓库.通过Hive可以使用HQL语言查询存放在HDFS上的数据.HQL是一种类SQL语言,这 ...

  4. 转--python之正则入门

    原文地址 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法 ...

  5. 10-SQL Server 2008 R2安装步骤

    一.  软件和环境 1.  软件 : SQL Server 2008 R2 企业版     软件下载地址:XXXX 2.  环境要求: .Net FrameWork 3.5 以上 (windows 7 ...

  6. Javaweb学习笔记——(五)——————DOM&XML目录

    1.表单提交方式 *使用submit提交 <form> <input type="submit" /> </form> *使用button提交表 ...

  7. 四、移植 JZ2440 开发板

    4.1 移植第一步 前面已经分析过了 .config 的过程,可以知道移植需要用到的文件: .config 文件 arch/arm/cpu 下的文件 board 目录  .config 文件是根据后面 ...

  8. 三、内存管理单元---MMU

    3.1 MMU介绍 3.1.1 MMU 特性 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...

  9. ubuntu12.04+cuda6.0+caffe(新版)的安装

    参照两位的博客 http://caffe.berkeleyvision.org/    官网 http://blog.csdn.net/u013476464/article/details/38071 ...

  10. CSS如何进行图文并茂布局怎么破

    上下结构 左右结构 右边左边的结构