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();
相关推荐
在"chapter14"这个压缩包文件中,可能包含了关于如何获取和利用类型信息的具体示例,涵盖上述各种情况。学习这部分内容,开发者可以提升对程序内部运作的理解,编写更健壮、更易于维护的代码,并且能够更有效地利用...
Java编程思想第十四章类型信息之反射与代理.pptx
### 第二章 数据类型、变量和运算符 在计算机编程中,数据类型、变量与运算符是基础且核心的概念。本章节将围绕这些概念展开详细论述,并通过具体的例子来加深理解。 #### 数据类型 数据类型定义了变量可以存储的...
第十四章探讨了Java中的反射机制。反射允许程序在运行时获取类的信息并操纵对象的状态。本章讲解了Class对象的使用方法、如何获取类的方法和字段信息、如何动态创建对象以及调用方法等内容。通过反射,可以实现更为...
由于上传文件大小限制该资源为上下篇 本资源为下篇 ...第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面
类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...
**第十四章:ASP.NET MVC** ASP.NET MVC是一种模型-视图-控制器架构模式,为Web开发提供了更灵活的方式。会讲解MVC架构的原理,以及如何创建和路由控制器、视图和模型。 通过北大青鸟ACCP的这些章节,学生将全面...
而第四章“信息的隐藏”则转到一个相对隐蔽的领域——隐写术和密码学的应用。隐写术涉及的是如何在不引起注意的情况下隐藏信息,使得信息在传输或存储时看起来像是无害的普通数据,而实际上它包含着敏感信息。密码学...
【第四章 信息和信息化管理】 本章主要探讨了信息在管理中的重要性和处理方式,以及信息化管理的相关概念。信息是经过加工处理的数据,对于管理者而言,信息的价值体现在其高质量、及时性和完全性上。信息的采集是...
MySQL 数据类型是指 MySQL 数据库中可以存储的数据类型,包括整数类型、浮点类型、定点数类型、日期时间类型、文本字符串类型、枚举类型、集合类型、空间数据类型等。 整数类型 整数类型是 MySQL 中最基本的数据...
【UNIX环境高级编程(第十四章)】章节主要讲解了UNIX系统中进程间通信(IPC,InterProcess Communication)的各种机制,这些机制允许不同进程之间高效地交换信息,超越了简单的文件共享和进程创建。以下是对各知识...
根据IEEE语言参考手册(LRM)第14章,这些类型包括BOOLEAN、BIT、CHARACTER、REAL、INTEGER、TIME等。例如: - **BOOLEAN**:布尔类型可以取两个值FALSE和TRUE。 - **BIT**:比特类型可以取两个值'0'和'1'。 - **...
程序输出了几个客户和产品信息。在IDA中打开这样的二进制文件,我们可以看到IDA自动进行初步的反汇编,并尝试识别出程序的结构和数据。 ### 第二节:基本类型的识别与转换 IDA允许用户手动识别和转换数据类型。...
【标题】"VC开发经验技巧 共分为21章 第十四章" 提供了关键信息,这是一份关于Visual C++(简称VC)开发的综合教程,共有21个章节,而我们关注的是第14章。在VC开发中,开发者通常会涉及到Windows应用程序设计、MFC...
美国地质调查局(USGS)国家地图网站提供各种类型的地理空间数据供用户下载,这些数据包括地形、地貌、水文、人口分布等多种信息。 4. 地理信息系统在犯罪分析中的应用 美国司法研究所网站展示了GIS在犯罪分析中的...
第四章信息与信息化管理习题涉及了管理学中关于信息管理的核心概念和流程。以下是根据题目内容提炼出的相关知识点: 1. 信息被定义为管理学科中对决策和行动有意义的数据。 2. 信息评估的关键在于信息的价值评估。 ...
这一章详细阐述了从测试计划到测试总结的整个流程,涵盖了多种测试类型。 首先,测试计划是测试活动的基础,需要根据系统的特性、预算和时间表来确定测试策略。测试类型的选择至关重要,包括黑盒测试、白盒测试、...
第十四章主要讲解基本的数据分析,旨在帮助读者理解和掌握数据处理的核心技巧。以下是本章的主要学习目标: 1. 了解分析的过程:分析包括对数据的总结、重新排列、排序或操作。这是数据处理的基础,旨在从原始数据...
计算机能处理多种类型的信息,得益于信息的数字化,第十题的答案是B。 第二章的单元测试则关注因特网和信息检索的相关知识。因特网上最早的WWW资源查询服务是通过目录检索实现的,第三题答案是C。信息素养是指人们...