文档章节

14章类型信息

 我的梦想fly
发布于 2014/12/06 19:40
字数 722
阅读 3
收藏 0
1、初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行
 01、static final int staticFinal = 47;这样直接引用class就可以不用初始化,因为这个是编译期常量,这个值不需要对Initable类进行初始化就可以被读取。

 02、 static final int staticFinal2 =ClassInitialization.rand.nextInt(1000);

这个是不确定的,所以要初始化后,才能引用(对于像这里的staticFinal2进行访问的时候,就会强制进行类的初始化,因为它不是一个编译期常量)

03、static int staticNonFinal = 74;这个不是final的,所以也是会有更改的可能,所以要等到对这个变量引用的时候,才会初始化

总结:

如果一个static域不是final的,那么在对它访问时,要先进行链接(为这个域分配存储空间)和
初始化(初始化该存储空间)

(如果一个域只设置为static或者final的话,这不足以确保这种行为)

2、class泛化知识要点:

01、Class<Integer> genericIntClass = int.class;
这个已经规定是Integer类型了,所以是限制死了,再给它赋予 genericIntClass = double.class;这个值的话,编译就会出错。

02、放松限制:
用通配符?像: Class<?> intClass2 = int.class;这样的话就不会出错了
然后还有如果要用T,Z什么的做泛型的话,要在class就声明T,然后成员变量和方法里面就可以声明用T了,但是成员变量和方法都要
不是static的,如果是static的话,那就会在编译时出错。例子:
public class GenericClassReferences<T>{
private Class<T> classs;
private void test() {
// TODO Auto-generated method stub
 Class<T> to ;
}
}
这样可以,
但是如果:
public class GenericClassReferences<T>{
private static Class<T> classs;
public static void main(String[] args) {

   
      Class<T> intClass2 ;
     
      
  }
}
这样就会报错

03、Class<Number> genericNumber = Integer.class,像这样的话,就会报错
虽然Integer是Number的子类,但是我的理解是,在这里就是不能向上转型为他的父类,所以编译时就会报错,解决方法是:
 Class<? extends Number> bounded = int.class;这样写就没问题了

04、class Toy {
  // Comment out the following default constructor
  // to see NoSuchMethodError from (*1*)
  Toy() {}
  Toy(int i) {}
}
class FancyToy extends Toy
implements HasBatteries, Waterproof, Shoots {
  FancyToy() { super(1); }
}
如果是这样的话就会报错:
Class<Toy> up2 = ftClass.getSuperclass();
解决办法:
 Class<? super FancyToy> up = ftClass.getSuperclass();
这样就没问题了哦
解释:因为getSuperclass()方法返回的是基类,它代表的不仅仅只是某个类,而是指FancyToy超类,并不是具体的某个类,所以正是这种含糊行,这里的
Object obj = up.newInstance();才会是object,不是那个具体类
具体比较

  Class<FancyToy> ftClass = FancyToy.class;
  FancyToy fancyToy = ftClass.newInstance();
这样就不需要转型了,直接就是这个对象
但是像这个的话,就要转型:如下:
Class<? super FancyToy> up = ftClass.getSuperclass();
  Object obj = up.newInstance();



© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 43
码字总数 20377
作品 0
西城
私信 提问
关东升的《从零开始学Swift》第2版已经出版

关东升的《从零开始学Swift》第2版已经出版 大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》 《从零开始学Swift》将在《...

tony关东升
2016/02/24
0
0
《Linux应用大全 基础与管理》一书,讲述日常系统管理内容

《Linux应用大全 基础与管理》介绍了Linux基础与管理等方面的知识,主要内容包括Linux的安装,使用Linux图形界面,Linux应用程序,使用Linux字符界面,Linux文本编辑器,目录和文件管理,Lin...

airfish2000
2015/12/22
0
0
每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

本周为大家送出的书是《Oracle 12 c PL(SQL)程序设计终极指南》,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著。 内容简介: 《Oracle 12c PL/SQL程序设计终极指南》志在打造PL/SQL领...

zting科技
2017/12/11
0
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

智捷课堂
2016/03/11
43
0
每周一书-《模糊测试-强制发掘安全漏洞的利器》

首先说明,本周活动有效时间为2016年9月26日到2016年10月9日。本周为大家送出的书是由电子工业出版社出版,段念,赵勇翻译的《模糊测试-强制发掘安全漏洞的利器》。 目在介绍这本书之前,首先...

zting科技
2017/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

https://www.jianshu.com/p/dbffae16ba0b

https://www.jianshu.com/p/dbffae16ba0b

张宏亮1982
9分钟前
0
0
linux基本命令

linux常用shell命令=命令+选项+参数 cd (change directory)切换目录 cd #root根目录 cd / #系统根目录 cd ../../ #返回上上一层目录 ls/dir (list)列出目录下文件 ls -a (--all) #列出所...

陈刚生
15分钟前
0
0
30分钟学会如何使用Shiro

本篇内容大多总结自张开涛的《跟我学Shiro》原文地址:http://jinnianshilongnian.iteye.com/blog/2018936 我并没有全部看完,只是选择了一部分对我来说急需在项目中使用的知识加以学习。并且...

群星纪元
16分钟前
0
0
常用算法之快速排序python&php

python(快速排序): # -*- UTF-8 -*- def quicksort(arr): if (len(arr)) < 2: return arr; mark = arr[0] #递归条件 #第一种方式 # left = [i for i in arr[1:] if i < mark]; # right = [i ......

山人有妙计
20分钟前
0
0
synchronized关键字

synchronized关键字可分为对象锁和类锁,修饰对象可分为代码块和方法 。 修饰代码块: 1.对象锁:synchronized (this) 或 synchronized (object) : 如果是同一个实例,则代码块的执行有先后;...

某只小强
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部