Java错题集(九)

目录

在java中,无论在何处调用,使用静态属性必须以类名做前缀。

socket编程中,以下哪个socket的操作是不属于服务端操作的()?

在jdk1.5之后,下列 java 程序输出结果为______。

输出结果为:

 

ResultSet中记录行的第一列索引为?

下面有关java classloader说法正确的是()?

jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些


在java中,无论在何处调用,使用静态属性必须以类名做前缀。

正确答案: B   你的答案: B (正确)

正确
错误

来源:https://www.nowcoder.com/questionTerminal/051e95648e724c0da32bb835788fe439
1.如果是本类使用,可以直接就用静态变量名。

2.如果是其他类使用,可以使用类名来调用,也可以创建一个实例对象来调用。

3.如果静态变量所在的类是静态类,那么不管在本类里或者在其他外部类,都可以直接使用静态变量名。

 

socket编程中,以下哪个socket的操作是不属于服务端操作的()?

正确答案: C   你的答案: C (正确)

accept
listen
connect
close

来源:https://www.nowcoder.com/questionTerminal/38fb0886232b42b6a542c288d256eee1

 

在jdk1.5之后,下列 java 程序输出结果为______。

int i=0;

Integer j = new Integer(0);

System.out.println(i==j);

System.out.println(j.equals(i));

正确答案: B   你的答案: B (正确)

true,false
true,true
false,true
false,false
对于不同的环境结果不同
程序无法执行

来源:https://www.nowcoder.com/questionTerminal/643b145a860f457d8a150869e1a17eba

本题是一个自动拆装箱的考题(自动拆装箱JDK需在1.5上),下面的讨论都不针对新开辟对象的情况:


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


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


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


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

int a=257;
Integer b=257;
Integer c=257;
Integer b2=57;
Integer c2=57;
System.out.println(a==b);
//System.out.println(a.equals(b));  编译出错,基本型不能调用equals()
System.out.println(b.equals(257.0));
System.out.println(b==c);
System.out.println(b2==c2);

true, false, false, true

 

String str =

"";

System.out.print(str.split(",").length);

输出结果为:

正确答案: B   你的答案: B (正确)

0
1
出现异常

来源:https://www.nowcoder.com/questionTerminal/29498beafbcc440f972644ddf1c1f9ed

String split 这个方法默认返回一个数组, 

* 如果没有找到分隔符,会把整个字符串当成一个长度为1的字符串数组  返回到结果,所以此处结果就是1  

 

ResultSet中记录行的第一列索引为?

正确答案: C   你的答案: B (错误)

-1
0
1
以上都不是

来源:https://www.nowcoder.com/questionTerminal/0df1f90997014eb98fcf02dbcc61e0d9

ResultSet结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名。

 

下面有关java classloader说法正确的是()?

正确答案: A C D   你的答案: A C D (正确)

ClassLoader就是用来动态加载class文件到内存当中用的
JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
ClassLoader使用的是双亲委托模型来搜索类的
Java默认提供的三个ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader
以上都不正确

来源:https://www.nowcoder.com/questionTerminal/7b4477d776b743fda6697ca5654fb2bc

JDK中提供了三个ClassLoader,根据层级从高到低为:

  1. Bootstrap ClassLoader,主要加载JVM自身工作需要的类
  2. Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类
  3. Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath)

 

JVM加载类的实现方式,我们称为 双亲委托模型

如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载

 

双亲委托模型的重要用途是为了解决类载入过程中的安全性问题

假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它

 

jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些

正确答案: C D E   你的答案: A C (错误)

栈空间满
年轻代空间满
老年代满
持久代满
System.gc()

来源:https://www.nowcoder.com/questionTerminal/6e9fadc9f3234551bd92d6331a14607d

垃圾收集机制:新生代、老年代、持久代

1,新生代:

(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor GC,将Eden区和非空闲Survivor区存活的对象复制到另外一个空闲的Survivor区中。

(2)保证一个Survivor区是空的,新生代Minor GC就是在两个Survivor区之间相互复制存活对象,直到Survivor区满为止。

 

2,老年代:

  当Survivor区也满了之后就通过Minor GC将对象复制到老年代。老年代也满了的话,就将触发Full GC,针对整个堆(包括新生代、老年代、持久代)进行垃圾回收。

 

3,持久代:

  持久代如果满了,将触发Full GC。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值