天梯180406

天梯180406

1. (不定项)Which are keywords in Java?

A. null

B. true

C. sizeof

D. implements

E. instanceof

2. JAVA语言的下面几种数组复制方法中,哪个效率最高?

A. for循环逐一复制

B. System.arraycopy

C. Arrays.copyof

D. 使用clone方法

3. 代码片段: 

byte b1=1,b2=2,b3,b6;

final byte b4=4,b5=6;

b6=b4+b5;

b3=(b1+b2);

System.out.println(b3+b6);

关于上面代码片段叙述正确的是()

A. 输出结果:13

B. 语句:b6=b4+b5编译出错

C. 语句:b3=b1+b2编译出错

D. 运行期抛出异常

4. 下列语句正确的是:

A. 形式参数可被字段修饰符修饰

B. 形式参数不可以是对象

C. 形式参数为方法被调用时真正被传递的参数

D. 形式参数可被视为local variable

5. 下列说法正确的是()?

A. 对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们

B. 成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)

C. 由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的

D. 静态内部类可以访问外部类的成员变量

 

 

 

 

 

//---------------------分割线------------------------

DE

B

C

D

AB

 

答案详解:

1. DE

javatrue ,false , nulljava中不是关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符

2.  System.arraycopy()源码。可以看到是native方法:native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如CC++)实现的文件中。 可以将native方法比作Java程序同C程序的接口。

public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);

它是个native方法,测试结果表明,

当数组很小,但存是调用次数多的话。

使用它复制数组并不比for循环手工复制数组快。

但是如果是数组比较大,那么使用System.arraycopy会比较有优势,因为其使用的是内存复制,省去了大量的数组寻址访问等时间。

 

Arrays.copyOf()源码,可以看到本质上是调用的arraycopy方法。,那么其效率必然是比不上 arraycopy

public static int[] copyOf(int[] original, int newLength) {

   int[] copy = new int[newLength];

   System.arraycopy(original, 0, copy, 0,

   Math.min(original.length, newLength));

   return copy;

}

 clone()System.arraycopy只是从实验的结果来看是System.arraycopy的效率高。

 

3. Java中的byteshortchar进行计算时都会提升为int类型。

final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10

b1b2byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3b3byte类型,类型不匹配,编译不会通过,需要进行强制转换。

4. local variable 局部变量;形参只能被 final修饰,不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类.一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。职位为什么内部类必须要用final修饰的变量?因为

一.Java设计者想要匿名函数或者Lambda函数内部外部保持数据一致性(知道了目的才好理解)二. 然而Java只是实现了capture-by-value形式的闭包,也就是匿名函数内部会重新拷贝一份自由变量,然后函数外部和函数内部就有两份数据。三. 那么要想实现1中的目的,只能要求两处变量不变。JDK8之前要求使用final修饰,JDK8聪明些了,可以使用effectively final的方式。总之,两边不变就行了。

5. 局部内部类,和匿名内部类对于 形参的要求相同,第四题搞清就OK。成员内部类,即是 非静态内部类。C选项错在 怎么可能用法一致呢,匿名只能用一次,局部在自己的域内可以用多次;而且匿名类用在任何允许存在表达式的地方,而局部内部类用于在任何允许出现局部变量的地方出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值