复盘

本文详细介绍了Java编程中的一些核心概念,包括垃圾回收的工作原理,例如在回收对象内存时会调用finalize()方法,但其执行顺序不确定;内存区域如堆、方法区、程序计数器的特性;以及如何处理异常,如try-catch-finally语句的执行逻辑。此外,文章还涵盖了Java中的数据结构、多线程、并发、集合框架和异常处理等多个方面,帮助读者深入理解Java编程的基础知识和最佳实践。
摘要由CSDN通过智能技术生成

3.对于一个已经不被任何变量引用的对象,当垃圾回收器准备回收该对象所占用的内存时,将自动调用该对象的哪个方法()
A finalize
B notify
C notifyAll
D hashCode

A

就在移除一个对象并回收它的内存空间之前,Java垃圾回收器将会调用各个实例的finalize()方法,这样实例对象就有机会可以释放掉它占用的资源。尽管finalize()方法是保证在回收内存空间之前执行的,但是对具体的执行时间和执行顺序是没有任何保证的。多个实例之间的finalize()执行顺序是不能提前预知的,甚至有可能它们是并行执行的。程序不应该预先假设实例执行finalize()的方法,也不应该使用finalize()方法来回收资源。

在finalize过程中抛出的任何异常都默认被忽略掉了,同时对象的销毁过程被取消
JVM规范并没有讨论关于弱引用的垃圾回收,这是明确声明的。具体的细节留给实现者决定。
垃圾回收是由守护进程执行的


8.以下描述错误的一项是( )?

A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
B.原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
C.方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
D.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

C

程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的


下面代码执行后的结果为( )
int main()
{
int sum=0;
int i=0,j=0;

for(j=0;j<6;j++)
{
if(j%2)continue;
sum++;
}

printf(“sum=%d”,sum);

return 0;
}
A.sum=1
B.sum=2
C.sum=3
D.其他几项都不对

C

估计看错了


下面代码的输出结果是什么?
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
A.3
B.123
C.1
D.12

D

1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
2、catch捕捉异常,继续执行System.out.print(1);
3、当执行 thrownewRuntimeException(); 又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行


.能单独和finally语句一起使用的块是( )

A.try
B.catch
C.throw
D.throws

A

强行解释下throw与throws。throws是向外面抛出,与finally无关,throw可以随意使用,但是与finally结合使用的时候,必须是在try/catch/finally组合块中,所以,算不上单独使用。


(多选)下面的Java赋值语句哪些是有错误的 正确答案:BF
A. int i =1000;
B. float f = 45.0;
C. char s = ‘\u0639’;
D. Object o = ‘f’;
E. String s = “hello,world\0”;
F. Double d = 100;
解析:
B:45.0必须写成45.0f,否则会默认为double类型
F:Java是强类型语言,不能把整型直接赋值给double类型的变量,赋值前必须进行强制类型转换


(多选)关于Java中的数组,下面的一些描述,哪些描述是准确的:( )
A.数组是一个对象,不同类型的数组具有不同的类
B.数组长度是可以动态调整的
C.数组是一个连续的存储结构
D.一个固定长度的数组可类似这样定义: int array[100]
E.两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F.可以二维数组,且可以有多维数组,都是在Java中合法的

ACF

1.数组其实也是一个对象,在一个数组中,所有的数组元素都具有相同的数据类型。当然,由于java是面向对象的语言,而类与类支持继承关系,这样可能在父类类型的数组里存放了不同的子类类型元素。

2.定义一个一维数组的方式是:type[] arrayname或者type arrayname[];

3.一维数组的初始化:

(1)静态初始化

1)int[] arr = new int[]{1, 2, 3}

2)int[] arr = {1, 2, 3}

(2)动态初始化

int[] arr = new int[3];

4.没有多维数组

如果从数组底形的运行机制来看,数组其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,把之前的type换成int[],那么上面的定义数组的语法就是int [][] arrName,这样似乎就是定义了二维数组。但他的实质还是一维数组,只是数组元素也是引用。


27.abstract和final可以同时作为一个类的修饰符。( )

A.正确
B.错误
B
abstract修饰一个类,这个类肯定可以被继承,但是final类是不能继承的,所以有矛盾,肯定不能同时用


30.关于JAVA的垃圾回收机制,下面哪些结论是正确?
A.程序可以任意指定释放内存的时间
B.JAVA程序不能依赖于垃圾回收的时间或者顺序
C.程序可明确地标识某个局部变量的引用不再被使用
D.程序可以显式地立即释放对象占有的内存

B

java提供了一个系统级的线程,即垃圾回收器线程。用来对

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值