2020-2-20 牛客试题复盘

一、下面哪一个修饰符修饰的变量是全部同一个类生成的对象共享的( C)java

A、public
B、private
C、static
D、final

解析:web

static修饰某个字段时,确定会改变字段建立的方式(每一个被static修饰的字段对于每个类来讲只有一份存储空间,而非static修饰的字段对于每个对象来讲都有一个存储空间)
static属性是属于类的,因此对象共同拥有,因此既能够经过类名.变量名进行操做,又能够经过对象名.变量名进行操做
 
 
 
二、对于如下代码段,4个输出语句中输出true的个数是( C   )。

class A{}编程

class B extends A{}cookie

class C extends A{}app

class D extends B{}编程语言

A obj = new D();函数

System.out.println(obj instanceof B);ui

System.out.println(obj instanceof C);this

System.out.println(obj instanceof D);url

System.out.println(obj instanceof A);

 

 

A、1
B、2
C、3
D、4

解析:

    A
|        |
B     C
|
D
D属于B,D属于A,但D不属于C。

 

 

三、有一个源代码,只包含import java.util.* ; 这一个import语句,下面叙述正确的是?   ( C)

A、只能写在源代码的第一句
B、能够访问java/util目录下及其子目录下的全部类
C、能访问java/util目录下的全部类,不能访问java/util子目录下的全部类
D、编译错误

解析:

导入java.util.*不能读取其子目录的类,由于若是java.util里面有个a类,java.util.regex里面也有个a类,咱们如果要调用a类的方法或属性时,应该使用哪一个a类呢。

 

 

四、以下代码的输出是   B

package Test;
public class Test {
     private static void test( int [] arr) {
         for ( int i =  0 ; i < arr.length; i++) {
             try {
                 if (arr[i] %  2 ==  0 ) {
                     throw new NullPointerException();
                 else {
                     System.out.print(i);
                 }
             finally {
                 System.out.print( "e" );
             }
         }
     }
 
     public static void main(String[]args) {
         try {
             test( new int [] { 0 1 2 3 4 5 });
         catch (Exception e) {
             System.out.print( "E" );
         }
     }
 
}
 
A、编译出错
B、eE
C、Ee
D、eE1eE3eE5
E、Ee1Ee3Ee5

解析:

因为arr[0] =0,因此在进入 test()方法里面会在第一个if 上抛出一个 NullPointerException,接着会执行 finally 的语句, (finally语句先于 return 和 throw语句执行),输出一个'e,而后回到 main方法中,因为捕捉到异常,因此进入到catch语句中,而后打印一个'E',因此最终结果为"eE".

 

 

五、关于匿名内部类叙述正确的是? (B )

A、匿名内部类能够继承一个基类,不能够实现一个接口
B、匿名内部类不能够定义构造器
C、匿名内部类不能用于形参
D、以上说法都不正确

 解析:

因为构造器的名字必须与类名相同,而匿名类没有类名,因此匿名类不能有构造器。

匿名内部类的建立格式为: new 父类构造器(参数列表)|实现接口(){
                                             //匿名内部类的类体实现
                                        }
  1. 使用匿名内部类时,必须继承一个类或实现一个接口
  2. 匿名内部类因为没有名字,所以不能定义构造函数
  3. 匿名内部类中不能含有静态成员变量和静态方法

 

 

六、下面代码的运行结果为:(C)

import  java.io.*;
import  java.util.*;
public  class  foo{
public  static  void  main (String[] args){
String s;
System.out.println( "s="  + s);
}
}
 
A、代码获得编译,并输出“s=”
B、代码获得编译,并输出“s=null”
C、因为String s没有初始化,代码不能编译经过
D、代码获得编译,但捕获到 NullPointException异常

 

 

七、下列关于if-else if选择结构的说法正确的是    BD

A、多个else if块之间的顺序能够改变,改变以后对程序的执行结果没有影响
B、if块之间的顺序能够改变,改变以后可能对程序的执行结果有影响
C、多个else if块之间的顺序不能够改变,改变后程序编译不经过
D、多个else if块之间的顺序能够改变,改变后程序编译能够经过

 

八、下列方法中哪一个是线程执行的方法? (A)

A、run()
B、start()
C、sleep()
D、suspend()

解析:

start是启动线程对象,使之重新建状态转入就绪状态;

sleep让线程睡眠一段时间,在此期间线程不消耗CPU资源;

suspend使线程挂起,暂停执行, 若是想恢复线程,必须由其余线程调用 resume方法。

 

 

九、下面关于静态方法说明正确的是  B

A、在静态方法中可用this来调用本类的类方法
B、在静态方法中调用本类的静态方法时可直接调用
C、在静态方法中只能调用本类中的静态方法
D、在静态方法中绝对不能调用实例方法

解析:

A:不能使用this调用本类的类方法(即静态方法);具体原理不清楚(望指点),我的理解为this指向的是实例对象,此时未实例化,故不能使用
B: 正确
C:在静态方法中,不仅能够调用本类的静态方法,也可使用【类名.静态方法名】调用其余类的静态方法
D:能够调用实例方法,使用【new 类名().实例方法名】调用

 

 

十、下面哪一个不属于HttpServletResponse接口完成的功能?C

A、设置HTTP头标
B、设置cookie
C、读取路径信息
D、输出返回数据

 解析:

A:设置HTTP头标  
1
response.setHeader( "Refresh" , "3" );  //三秒刷新页面一次
B:设置cookie
1
2
Cookie c1 =  new Cookie( "username" , "only" );
response.addCookie(c1);
C(错误):读取路径信息,request读取路径信息
1
2
3
4
5
从request获取各类路径总结
request.getRealPath( "url" );  // 虚拟目录映射为实际目录
request.getRealPath( "./" );     // 网页所在的目录
request.getRealPath( "../" );  // 网页所在目录的上一层目录
request.getContextPath();     // 应用的web目录的名称
 
D:输出返回数据
1
HttpServleteResponse.getOutputStream().write();
 

 

 

十一、下面哪一个不对?   C

A、RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
B、A method is not required to declare in its throws clause any subclasses of RuntimeExeption that might be thrown during the execution of the method but not caught
C、An RuntimeException is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
D、NullPointerException is one kind of RuntimeException

解析:

 

 

运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中能够选择捕获处理,也能够不处理。这些异常通常是由程序逻辑错误引发的,程序应该从逻辑角度尽量避免这类异常的发生。

       运行时异常的特色是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即便没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译经过。
非运行时异常 (编译异常): 是RuntimeException之外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,若是不处理,程序就不能编译经过。如IOException、SQLException等以及用户自定义的Exception异常,通常状况下不自定义检查异常。

 

 

十二、下列Java代码中的变量a、b、c分别在内存的____存储区存放。   C

class A {
     private String a = “aa”;
     public boolean methodB() {
         String b = “bb”;
         final String c = “cc”;
     }
}
 
A、堆区、堆区、堆区
B、堆区、栈区、堆区
C、堆区、栈区、栈区
D、堆区、堆区、栈区
E、静态区、栈区、堆区
F、静态区、栈区、栈区

解析:

A是类中的成员变量,存放在堆区。

B、C都是方法中的局部变量,存放在栈区。

 

 

1三、下列说法正确的有(ACD )

A、环境变量可在编译source code时指定
B、在编译程序时,所能指定的环境变量不包括class path
C、javac一次可同时编译数个Java源文件
D、javac.exe能指定编译结果要置于哪一个目录(directory)

 

 

1四、如下不是修饰符final的做用的是( C)。

A、修饰常量
B、修饰不可被继承的类
C、修饰不可变类
D、修饰不可覆盖的方法

解析:

final的做用:
    1. 修饰变量,变量的引用地址不可变,可是地址中的内容能够变。
    2. 修饰方法,方法不可被重写,可是仍是能够重载
    3. 修饰类,类不可继承。
 
不可变类,说的是一个类一旦被实例化,就不可改变自身的状态。常见的好比String和基本数据类型的包装类,对于这种不可变类,一旦在进行引用传递的时候,形参一开始就和实际参数指向的不是一个地址,因此在方法中对形参的改变,并不会影响实际参数。
 
 
 
 
1五、有如下一个对象:
public class DataObject implements Serializable{
     private static int i=0;
     private String word= " " ;
     public void setWord(String word){
         this .word=word;
     }
     public void setI(int i){
         Data0bject. i=I;
      }
}
建立一个以下方式的DataObject:
DataObject object= new Data0bject ( );
object. setWord( "123" );
object. setI(2);
将此对象序列化为文件,并在另一个JVM中读取文件,进行反序列化,请问此时读出的Data0bject对象中的word和i的值分别为:  D
A、"", 0
B、"", 2
C、"123", 2
D、"123", 0

解析:

序列化保存的是对象的状态,静态变量属于类的状态,所以,序列化并不保存静态变量。因此i是没有改变的。

 

 

1六、关于异常的编程,如下描述错误的是:( A )

A、在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
B、int i=Integer.parseInt(”123a”);将产生NumberFormatException
C、int a[]=null; a[0]=1; 将产生NullPointerException
D、输入输出流编程中,读和写时都要抛出IOException

 

 

1七、从运行层面上来看,从四个选项选出不一样的一个。  B

A、JAVA
B、Python
C、objectC
D、C#

解析:

Python  只有它是动态语言
动态语言的定义:动态编程语言   是    高级程序设计语言   的一个类别,在计算机科学领域已被普遍应用。它是一类   在  运行时能够改变其结构的语言    :例如新的函数、对象、甚至代码能够被引进,已有的函数能够被删除或是其余结构上的变化。动态语言目前很是具备活力。众所周知的    ECMAScript   (    JavaScript   )即是一个动态语言,除此以外如    PHP   、    Ruby   、    Python   等也都属于动态语言,而    C   、    C++   等语言则不属于动态语言。

 

 

1八、从内存实现或者反射的角度来看,关于继承的说法正确的是(A)。

注:此处的继承不表明能调用
A、子类将继承父类的全部的数据域和方法
B、子类将继承父类的其可见的数据域和方法
C、子类只继承父类public方法和数据域
D、子类只继承父类的方法,而不继承数据域

解析:

在一个子类被建立的时候,首先会在内存中建立一个父类对象,而后在父类对象外部放上子类独有的属性,二者合起来造成一个子类的对象。因此所谓的继承使子类拥有父类全部的属性和方法其实能够这样理解,子类对象确实拥有父类对象中全部的属性和方法,可是父类对象中的私有属性和方法,子类是没法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,可是你并不能使用。因此子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。能够继承,只是没法访问到而已。

 

 

1九、java8中,忽略内部接口的状况,不能用来修饰interface里的方法的有( AC)

A、private
B、public
C、protected
D、static

解析:

Java8的接口方法能够有以下定义
only public, abstract, default, static and strictfp are permitted
 

 

20、如下哪一种JAVA的变量表达式使得变量a和变量b具备相同的内存引用地址(  AB)

A、String a = "hello"; String b = "hello";
B、Integer a; Integer b = a;
C、int a = 1; Integer b = new Integer(1);
D、int a = 1; Integer b = 1;

解析:

内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法==A对  指向常量池里的"hello"。B对  题中没说声明的a是局部变量。C错  int a =1;并不指向堆中,它只有值,没有引用地址,Integer b =new Integer(1);指向堆中地址为1的位置。D错  缘由同C

相关文章
相关标签/搜索