牛客网日常刷题错题汇总2017-09-05

JSP九大内置对象
   分别为:request/response/session/out/page/application/exception/config/pageContext;具体看博客:http://blog.csdn.net/qq_27905183/article/details/52820244


对于Integer对象来说,当一个int类型的变量直接赋给一个Integer对象,会调用Integer类的静态方法valueOf(),该方法中缓存了-128~127范围中的值,当直接将该范围中的变量赋值给Integer来创建一个对象时,两个对象=比较返回true,而如果超出了该返回,Integer会new一个新的对象,而不是通过valueOf()方法了,此时=比较返回false


执行以下程序最终输出的结果可能是C:
Thread ths[] = new Thread[3];
for(int i=0; i<3; i++){
  ths[i] = new Runnable(){
    public void run(){
      for(int j=0; j<5; j++)
        System.out.print(j);
      System.out.print(" ");
    }
  };
}
for(Thread th: ths){
  th.start();
}

A.010 2123012 3434
B.01201 340124 2334
C.0012314 01223344
D.12345 12345 12345
从run方法中可以看出,不管他们三个线程的执行结果如何,每个线程在输出空格前一定是完成了j的输出,因此也就是说输出结果中的空格前面一定有0-4;从而可以排除ABD,选C


在java中的基本数据类型分为:整数、浮点数、字符类型和布尔类型;引用数据类型分为:数组、字符串和接口;java中的那些基本数据类型属于原生类,而数组是引用类型,不属于原生类,可以看成是一种对象


java中的四个修饰符的访问权限:public公有、default默认修饰符同包下的类、protected当前类的子类、private当前类


如下代码输出结果:
public class test{
  public static void main(String[] args){
    int x = 1;
    int y = 3;
    if(x = y){
      System.out.println("not equals");
    }
    else{
      System.out.println("equals");
    }
  }
}
最终结果为:编译期便报错,这是因为java和c/c++机制不同导致的,在C中,if(x=y)是将赋值后的x值与0进行比较,最终if变成了if(x>0)…;而在java中,是直接将赋值后的x值尝试转换成boolean值,最终if变成了if(x)…,而java中的int整形数值不能直接类型转换成boolean,因此这里会报错


下面哪种情况可以终止当前运行中的线程:
A.当一个优先级高的线程进入就绪状态时
B.抛出一个异常时
C.当该线程调用sleep()方法时
D.当创建一个新线程时
最终的答案为B,A并不是终止,而是抢占,使当前运行的线程进入阻塞状态;C只是暂时停止了当前线程的执行,并不是终止线程;D创建了一个新的线程,只是该新线程也加入到了抢占资源的线程队列中来而已,最终谁能抢到仍然是随机的,而且也不会终止当前运行中的线程


String可以作为switch中的变量值,而float、double这些浮点数类型不行,boolean布尔类型不行,long类型也不行;
switch中可以做为变量的参数类型有: int、char、short整数类型和枚举类型、String类型在java7中开始支持


java中的接口可以进行多继承,也就是说接口可以extends多个接口;
static修饰符可以用来修饰接口中的方法,用作类方法


当子类不带有构造器时,在创建子类对象时会默认调用子类的无参构造器,在该无参构造器中首先会调用父类的无参构造器;当子类显式定义了构造器时,在未显示指定调用父类的那个构造器的情况下,无论该子类构造器有多少个参数,仍然是默认调用父类的无参构造器;而在子类构造器中可以显式指定调用父类的哪个构造器


在使用Math.ceil和Math.floor对一个数分别进行向上取整和向下取整时,需要注意的是:在ceil源码中有这样一段话:If the argument value is less than zero but greater than -1.0, then the result is negative zero,意思是如果参数的值在(-1.0,0.0)之间,那么结果为-0;而在ceil和floor源码中共同有这样一段话:If the argument is NaN or an infinity or positive zero or negative zero, then the result is the same as the argument,意思是如果参数是 NaN、无穷、正 0、负 0,那么结果与参数相同,如果是 -0.0,那么其结果是 -0.0;
对于一个数double d=-0.5;分别进行ceil和floor之后的结果分别为:-0.0和-1.0


如下代码段的输出结果为:
class A{}
class B extends A{}
class C extends A{}
class D extends B{}
A obj = new D();
System.out.println(obj instanceof B);
System.out.println(obj instanceof C);
System.out.println(obj instanceof D);
System.out.println(obj instanceof A);
最终的输出结果为true/false/true/true;instanceof用于判断某个对象是不是指定类的一个实例;而对于一个类,它的实例还可以通过该类的子类来创建,因此instanceof也可以说是判断一个对象是否属于指定类或者该类的子类的一个实例;


下列有关线程的说法正确的有:
A.可以获得对任何对象的互斥锁定
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C.线程通过调用对象的synchronized方法可获得对象的互斥锁定
D.线程调度算法是平台独立的
正确的有CD;A太过绝对,因为对于没有访问权限的对象,无法获得它的互斥锁定;B前半句正确,后面错误,需要线程自己抢占;C正确;D线程分为抢占式调度和协同式调度,而java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身决定(这是协同式调度),这就是平台独立的原因


下列说法正确的是:
A.类定义前面可以修饰public,protectedprivate
B.内部类前面可以修饰public,protectedprivate
C.局部内部类前面可以修饰public,protectedprivate
D.以上说法都不正确
正确结果为B;对于外部类来说,只能使用public和defualt(默认)两种修饰符修饰,因为外部类放在包中,只有两种可能,就是对包可见和对包不可见;而对于内部类来说, 他放在外部类中,就相当于外部类的成员变量,因此可以使用public/default/protected/private等修饰符修饰;而对于局部内部类来说,就相当于是在方法中定义的局部变量,只能使用final和abstract修饰


对于运行时异常,java虚拟机可以自行处理;对于非运行时异常,需要在程序中手动捕获异常;


<经典>以下哪个式子有可能在某个进制位下成立:
A.13*14=204
B.12*34=568
C.14*14=140
D.1+1=3
正确答案为A,可以设进制为X,然后对每个选项进行排除计算;例如看A,计算如下:
假设进制位为x13 = (1*x^1+3*x^0)= x+3;
14 = (1*x^1+4*x^0) = x+4;
则13*14 = (x+3)(x+4) = 204;结果算出x=8/-1,因此A满足条件,在八进制数情况下可以成立;


如何放掉一个指定占据的内存空间?
A.调用free()方法
B.代用system.gc()方法
C.赋值给该项对象的引用为null
D.程序员无法明确强制垃圾回收器运行
正确答案为D;在《java虚拟机》中明确指出,释放占据的内存空间是由gc来完成的,程序员无法明确其执行,就算使用C方法来使其空间不被引用也不一定立即被释放,这取决于gc本身,无法通过代码控制时间;


<经典>经过强制转换后的a和b分别为:(short a=128;byte b=(byte) a;)
A.128  127
B.128  -128
C.128  128
D.编译错误
正确答案为B,byte在内存中占一个字节,也就是八位,因此byte的范围是-128~127之间,将128强制类型转换成byte将会超出byte的范围,128的二进制数为1000 0000,转换成byte类型后,128最高位符号位为负数,取补码为-128;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值