泛微java面试题,java中,关于泛型说法不正确的是
如何解决写爬虫IP受阻的问题?立即使用。
39.Java中的泛型是什么?使用泛型有什么好处?
(更多相关面试问题推荐:java面试问答)
泛型是Java SE 1.5的新特性。泛型的本质是参数化类型,即被操作的数据类型被指定为参数。
好处:
1.类型安全,在编译期间提供类型检测。
2、前后兼容
3.将代码一般化,代码可以被更多地重用。
4.在高性能的情况下,用GJ (Generic java)编写的代码可以给JAVA编译器和虚拟机带来更多的类型信息,为JAVA程序的进一步优化提供了条件。
10.Java的泛型是如何工作的?擦除的类型是什么?如何工作?
1.类型检查:在字节码生成之前提供类型检查。
2.类型擦除:所有类型参数都被替换为它们的限定类型,包括类、变量和方法(类型擦除)。
3.如果类型擦除和多态之间有冲突,子类中会产生一个桥接方法来解决。
4.如果调用泛型方法的返回类型被清除,则在调用该方法时插入强制类型转换。
擦除类型:
所有类型参数都被替换为它们的限定类型:
例如
t型物体?扩展基类-基类-基类如何工作:
泛型是通过类型擦除实现的。编译器在编译时清除所有与类型相关的信息,所以在运行时没有与类型相关的信息。例如,ListString在运行时只由一个列表表示。这样做的目的是确保与Java 5之前开发的二进制类库兼容。您不能在运行时访问类型参数,因为编译器已经将泛型类型转换为原始类型。根据你对这个泛型问题的回答,你会得到一些后续问题,比如为什么泛型是通过类型擦除实现的,或者给你看一些错误的泛型代码会导致编译器错误。
11、能否将ListString传递给一个接受ListObject参数的方法?
对于不熟悉泛型的人来说,Java泛型这个话题看起来很混乱,因为乍一看,String是一个对象,所以ListString应该可以用在需要ListObject的地方,但实际上不是。这样做会导致编译错误。如果你进一步思考,你会发现Java这样做是有意义的,因为ListObject可以存储任何类型的对象,包括String、Integer等。而ListString只能用于存储字符串s。
listobjectobjectlist;
ListString stringList
objectList=stringList//CompilationError不可比类型142、如何防止Java中未检查类型的警告?
如果您将泛型与基本类型混合使用,例如下面的代码,java 5的javac编译器将生成一个未检查的类型警告,例如
注意:Hello.java使用了未经检查或不安全的操作;
这种警告可以由@ @SuppressWarnings("unchecked ")批注屏蔽。
13、Java中ListObject和原始类型列表的区别?
原始类型和带参数的对象类型的主要区别在于,编译器在编译时不会检查原始类型的类型安全,但会检查带参数的类型。通过使用Object作为类型,可以告诉编译器该方法可以接受任何类型的对象,比如字符串或整数。
这个问题的焦点在于对泛型中原始类型的正确理解。两者的第二个区别是,可以把任何带参数的类型传递给原始类型列表,但是不能把ListString传递给接受ListObject的方法,因为会有编译错误。
14.写一个通用程序来实现LRU缓存?
对于喜欢Java编程的人来说,这相当于一次练习。这里有一个提示,LinkedHashMap可用于实现固定大小的LRU缓存。当LRU缓存满时,它会将最旧的键值对移出缓存。
LinkedHashMap提供了一个名为removeEldestEntry()的方法,put()和putAll()将调用该方法来删除最旧的键值对。当然,如果你已经编写了一个可运行的JUnit测试,你也可以随意编写自己的实现代码。
(推荐课程:java课程)
15.数组中可以使用泛型吗?
这可能是Java泛型最简单的面试问题,当然前提是你知道Array实际上并不支持泛型,这也是Joshua Bloch在《有效的Java》一书中建议用List代替Array的原因,因为List可以在编译时提供类型安全保证,而Array不能。
16.如何编写一个泛型方法,使其可以接受泛型参数并返回泛型类型?
编写泛型方法并不难。您需要用泛型类型替换原始类型,例如使用广泛认可的类型占位符,如T、E或K、V等。在最简单的情况下,泛型方法可能如下所示:
公共V put(K键,V值){
return cahe.put(键,值);
}147、C模板和java泛型有什么区别?
Java实现根植于“类型消除”的概念。当源代码被转换成Java虚拟机字节码时,这种技术将消除参数化类型。有了Java泛型,我们能做的事情并没有真正改变多少;他只是把代码做得很漂亮。鉴于此,Java泛型有时被称为“语法糖”。
这和C模板完全不同。在C中,模板本质上是一组宏指令集,只是名字变了。编译器将为每种类型创建模板代码的副本。
由于架构设计的不同,Java泛型和C模板之间有许多不同之处:
c #模板可以使用基本的数据类型,比如int。Java不行,你得用Integer代替。
在Java中,模板的参数类型可以限制为特定的类型。
在C中,类型参数可以实例化,但java不支持。
在Java中,类型参数不能用于静态方法(?)和变量,因为它们将由不同类型的参数指定的实例共享。在C中,这些类是不同的,因此类型参数可以用于静态方法和静态变量。
在Java中,不管类型参数是什么,所有的实例变量都是相同的类型。该类型将在运行时被删除。在C中,类型参数不同,实例变量也不同。
推荐:java入门。以上是java基础面试题3354通用版的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。