第一范文网 - 专业文章范例文档资料分享平台

【黑马程序员】Java试题、50道Java面试题集(2019最新版)21-30

来源:用户分享 时间:2025/5/28 21:35:12 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

2 //何问起 hovertree.com 3 import java.util.Arrays;

4 import java.util.EmptyStackException; 5

6 public class MyStack { 7 private T[] elements; 8 private int size = 0; 9

10 private static final int INIT_CAPACITY = 16; 11

12 public MyStack() {

13 elements = (T[]) new Object[INIT_CAPACITY]; 14 } 15

16 public void push(T elem) { 17 ensureCapacity(); 18 elements[size++] = elem; 19 } 20

21 public T pop() { 22 if(size == 0)

23 throw new EmptyStackException();

视频库网址:http://yun.itheima.com 资料领取:3285264708

24 return elements[--size]; 25 } 26

27 private void ensureCapacity() { 28 if(elements.length == size) {

29 elements = Arrays.copyOf(elements, 2 * size + 1); 30 } 31 } 32 }

上面的代码实现了一个栈(先进后出(FILO))结构,乍看之下似乎没有什么明显的问题,它甚至可以通过你编写的各种单元测试。然而其中的pop方法却存在内存泄露的问题,当我们用pop方法弹出栈中的对象时,该对象不会被当作垃圾回收,即使使用栈的程序不再引用这些对象,因为栈内部维护着对这些对象的过期引用(obsolete reference)。在支持垃圾回收的语言中,内存泄露是很隐蔽的,这种内存泄露其实就是无意识的对象保持。如果一个对象引用被无意识的保留起来了,那么垃圾回收器不会处理这个对象,也不会处理该对象引用的其他对象,即使这样的对象只有少数几个,也可能会导致很多的对象被排除在垃圾回收之外,从而对性能造成重大影响,极端情况下会引发Disk Paging(物理内存与硬盘的虚拟内存交换数据),甚至造成OutOfMemoryError。

26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

视频库网址:http://yun.itheima.com 资料领取:3285264708

答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

27、静态变量和实例变量的区别?

答:静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。在Java开发中,上下文类和工具类中通常会有大量的静态成员。

28、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,因此在调用静态方法时可能对象并没有被初始化。

29、如何实现对象克隆? 答:有两种方式:

1.实现Cloneable接口并重写Object类中的clone()方法;

2.实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下。

视频库网址:http://yun.itheima.com 资料领取:3285264708

1 package com.lovo; 2

3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7

8 public class MyUtil { 9

10 private MyUtil() {

11 throw new AssertionError(); 12 } 13

14 public static T clone(T obj) throws Exception {

15 ByteArrayOutputStream bout = new ByteArrayOutputStream(); 16 ObjectOutputStream oos = new ObjectOutputStream(bout); 17 oos.writeObject(obj); 18

19 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());

20 ObjectInputStream ois = new ObjectInputStream(bin); 21 return (T) ois.readObject();

视频库网址:http://yun.itheima.com 资料领取:3285264708

【黑马程序员】Java试题、50道Java面试题集(2019最新版)21-30.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9tp2c11wqo7g2499ip734mu7526k9200fnr_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top