JAVA中的泛型类型不可以直接初始化

1     class Para<CLS>{
2         private CLS class1;
3         public Para(CLS class1) {

4             // TODO Auto-generated constructor stub
5             this.class1 = class1;
6                         //class1 = new CLS(),这会导致编译错误
7         }

8     }

第六行注释掉的,如果不注释掉,就会导致编译错误。

原因如下:

JAVA是一门“编译->执行”的安全性语言,对类型的检测非常严格。在泛型中,会在编译阶段进行一些转化,比如ArrayList<String>,ArrayList<Integer>会在编译阶段转变为ArrayList<Object>,同理,Item类型也会在编译阶段转变。

那么对于泛型类型及数组,就编译阶段转变后,所有的初始化都会变成new
Object(Parameters),但是无法确保具有这样参数的构造函数,所以JAVA不提供泛型类型和数组的初始化操作。但是提供引用传递操作,比如上面的第五行。

JAVA中的泛型类型不可以直接初始化,布布扣,bubuko.com

时间: 2024-10-20 16:09:28

JAVA中的泛型类型不可以直接初始化的相关文章

Java 中的 static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量. 而普通初始化块只要有创建一个实例(即new一次),就执行一次. 我们来看一段代码: 运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行

对Java中使用两个大括号进行初始化的理解

最近重读Java 编程思想,读到有关实例化代码块儿 的内容,使我对于使用两个大括号进行初始化有了更深的理解. 实例化代码块儿: 和静态代码块儿的概念相对应,静态代码块儿是static 关键字 + 大括号,把静态代码块儿的static关键字去掉就是实例化代码块儿,静态代码块儿在类初始化的时候执行一次 而实例化代码块儿在每次生成对象的时候都会执行(实例化代码块儿会先于构造方法执行). 使用匿名内部类进行初始化:在new 一个对象的时候,小括号后边跟一个大括号 使用匿名内部类 + 实例化代码块儿 =

java中一个类的成员变量初始化过程

Student s = new Student(); 1.加载Student.class文件进内存 2.在栈内存为s开辟空间 3.在堆内存为学生对象开辟空间 4.对学生对象的成员变量进行默认初始化 5.对学生对象的成员变量进行显示初始化 6.通过构造方法对学生对象的成员变量赋值 7.学生对象初始化完毕,把对象地址赋值给s变量 原文地址:https://blog.51cto.com/14651315/2464214

Java中堆内存和栈内存详解

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中

Java中堆内存与栈内存分配浅析

Java把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用. 堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理.在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数

Java中堆栈的区别

简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用. 堆内存用来存放由new创建的对象和数组. 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理. 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C+

java中的堆和栈

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组以及包装类.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象

Java中堆内存和栈内存详解【转】

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中

Java中堆内存和栈内存详解2

Java中堆内存和栈内存详解 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的