Java小题精炼训练营(篇八)

构造方法在创建对象时调用,其他地方不能显式地直接调用

每一个类只能有一个构造方法

D 选项描述错误,一个类可以有多个构造方法,形成重载关系。

D

2、下列哪些语句关于内存回收的说明是正确的? ( )

程序员必须创建一个线程来释放内存

内存回收程序负责释放无用内存

内存回收程序允许程序员直接释放内存

内存回收程序可以在指定的时间释放内存对象

A、JVM一旦启动,就会创建一个守护线程来监测是否需要有对象内存被释放。

C、无法直接释放。

D、不可以指定时间,System.gc(),只是提醒JVM可以进行一次Full GC,但是什么时候真正执行,还是不知道的。

B

3、如果要导入一个java.scut.computer的包,叙述正确的是?  ( )

只需在代码中加入“package java.scut.computer;”一个语句,并且必须放在代码非注释的第一行

只需在代码中加入“package java.scut;”一个语句

必须在代码中加入“package java.scut;”和“package java.scut.computer;”两个语句

在代码中,不一定是第一句,只要是类定义前,加入package语句即可

实际上在Java语言规范中,不允许package name以“java”开头,不然会报一个java.lang.SecurityException 的错误。因为假如我们允许包名以java开头,那么我们完全可以编写和jdk标准包下一模一样的类,如Java.lang.Integer。因此在虚拟机进行类或接口解析时可能会发生冲突。一句话总结就是:假如允许包名以java开头,可能会导致命名空间污染的问题。

A

4、对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。

正确

错误

运行异常,可以通过java虚拟机来自行处理。非运行异常,我们应该捕获或者抛出

B

5、以下代码执行后输出结果为( )

public class ClassTest{

String str = new String(“hello”);

char[] ch = {‘a’,‘b’,‘c’};

public void fun(String str, char ch[]){

str=“world”;

ch[0]=‘d’;

}

public static void main(String[] args) {

ClassTest test1 = new ClassTest();

test1.fun(test1.str,test1.ch);

System.out.print(test1.str + " and ");

System.out.print(test1.ch);

}

}

hello and dbc

world and abc

hello and abc

world and dbc

java中都是按栈中的值传递,基本数据类型栈中的值就是实际存储的值,引用类型栈中的值就是指向堆中的地址

1)String和char[ ]都是引用类型,所以在方法中传递的都是指向真实数据的地址

2)假设String str指向的hello的地址为d1,str传递到fun函数中的也是地址d1,成员变量str和fun的形参str不是同一个变量,把fun型中的str赋值为world只是修改了该str指向的地址,该地址由d1更改成了world的地址,并没有改变成员变量str指向的地址及堆中的数据,所以str还是hello。

3)假设char[ ] ch指向的abc的地址是d2,传递到fun函数中的地址也是d2,同上成员变量ch和fun的形参ch不是同一个变量,(1)如果把fun中的ch[0]='d’更改为ch = new ch[3];ch[0]=‘d’,那么成员变量ch的值是没有变化的,还是abc,原理同上String,只是改变了引用ch指向的堆数据的地址,并没有改变成员变量ch指向的地址以及堆中的数据。(2)改变了堆中的数据,所以最终结果编程dbc,此ch只是形参而不是成成员变量ch,如果对ch变化对成员变量ch没有影响,但是ch[i]指向了堆数据的地址,直接修改堆数据,所以成员变量变了。

A

6、下列代码执行结果为()

public static void main(String args[])throws InterruptedException{

Thread t=new Thread(new Runnable() {

public void run() {

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

throw new RuntimeException(e);

}

System.out.print(“2”);

}

});

t.start();

t.join();

System.out.print(“1”);

}

21

12

可能为12,也可能为21

以上答案都不对

因为子线程的休眠时间太长,因此主线程很有可能在子线程之前结束也就是输出结果是12,但是子线程用了join函数,因此主线程必须等待子线程执行完毕才结束因此输出结果只能是21

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

t.join();      //使调用线程 t 在此之前执行完毕。

t.join(1000);  //等待 t 线程,等待时间是1000毫秒

A

7、下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。

java

javadoc

jdb

javaprof

ava,exe是java虚拟机

javadoc.exe用来制作java文档

jdb.exe是java的调试器

javaprof,exe是剖析工具

C

8、下面为true的是

Integer i = 42;

Long l = 42l;

Double d = 42.0;

(i == l)

(i == d)

(l == d)

i.equals(d)

d.equals(l)

i.equals(l)

l.equals(42L)

包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱

包装类的equals()方法不处理数据转型

1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;

int a = 220;

Integer b = 220;

System.out.println(a==b);//true

2、两个Integer类型进行“==”比较, 如果其值在-128至127  ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。

Integer c=3;

Integer h=3;

Integer e=321;

Integer f=321;

System.out.println(c==h);//true

System.out.println(e==f);//false

3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。

Integer a=1;

Integer b=2;

Integer c=3;

System.out.println(c.equals(a+b));//true

4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

int i=1;

int j = 2;

Integer c=3;

System.out.println(c.equals(i+j));//true

G

9、要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )

让该类不使用任何关键字

使用private关键字

使用protected关键字

使用void关键字

包以外的类包括子类

外部包 > 子类 > 本包 > 该类内部

public> protected > default > private b.private只能同类中,c.子类不一定和父类同包

A

10、以下JAVA程序的运行结果是什么(  )

public static void main(String[] args) {

Object o1 = true ? new Integer(1) : new Double(2.0);

Object o2;

if (true) {

o2 = new Integer(1);

} else {

o2 = new Double(2.0);

}

System.out.print(o1);

System.out.print(" ");

System.out.print(o2);

}

1 1

1.0 1.0

1 1.0

1.0 1

byte b = 1;

char c = 1;

short s = 1;

int i = 1;

// 三目,一边为byte另一边为char,结果为int

// 其它情况结果为两边中范围大的。适用包装类型

i = true ? b : c; // int

b = true ? b : b; // byte

s = true ? b : s; // short

// 表达式,两边为byte,short,char,结果为int型

// 其它情况结果为两边中范围大的。适用包装类型

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
hort,char,结果为int型

// 其它情况结果为两边中范围大的。适用包装类型

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-dJqYvIZP-1715734481750)]

[外链图片转存中…(img-N4CcN4dt-1715734481751)]

[外链图片转存中…(img-w79077nt-1715734481751)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值