笔试题(一)

1. 下面有关 java 实例变量 , 局部变量 , 类变量和 final 变量的说法,错误的是? ( )

  • 实例变量指的是类中定义的变量,即类成员变量,如果没有初始化,会有默认值
  • 局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
  • 类变量指的是用static修饰的属性
  • final变量指的是用final 修饰的变量

解析:成员变量如果没有初始化有默认值,局部变量如果不初始化的话没有默认值。

2. 以下哪个式子有可能在某个进制下成立()?

  • 13*14=204
  • 12*34=568
  • 14*14=140
  • 1+1=3

解析:(1n+3)(1n+4)=2n^2+4;// n=-1或n=8; 其中n=8成立

3. 在 myjsp.jsp 中,关于下面的代码说法错误的是: ( )
<%@ page language=“java” import=“java.util.*” errorPage=“error.jsp” isErrorPage=“false” %>

  • 该页面可以使用 exception 对象
  • 该页面发生异常会转向 error.jsp
  • 存在 errorPage 属性时,isErrorPage 是默认为 false
  • error.jsp 页面一定要有isErrorPage 属性且值为 true

解析:exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用。对于C项,errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到 errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时, isErrorPage属性值为false

4. What results from the following code fragment?

int i = 5;
int j = 10;
System.out.println(i + ~j);
  • Compilation error because”~”doesn’t operate on integers
  • -5
  • -6
  • 15

解析:公式-n=n+1可推出n=-n-1,所以~10=-11再加5结果为-6

5. 如果一个接口Cow有个方法drink(),有个类Calf实现接口Cow,则在类Calf中正确的是? ( )

  • void drink() { …}
  • protected void drink() { …}
  • public void drink() { …}
  • 以上语句都可以用在类Calf中

解析:子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限就是public,所以子类重写后只能是public

6. instanceof运算符能够用来判断一个对象是否为:

  • 一个类的实例
  • 一个实现指定接口的类的实例
  • 全部正确
  • 一个子类的实例

解析:

interface A{
     
}
class B implements A{
      
}
class C extends B{
      
}
public class Iinstanceof {
 
    public static void main(String[] args) {
        A ab=new B();
        A ac=new C();
        B bc=new C();
        B bb=new B();
        C cc=new C();
        //对象实现一个接口,用这个对象和这个接口进行instanceof判断,都为true。
        System.out.println("ab instanceof A="+(ab instanceof A));
        System.out.println("ac instanceof A="+(ac instanceof A));
        System.out.println("bc instanceof A="+(bc instanceof A));
        System.out.println("bb instanceof A="+(bb instanceof A));
        System.out.println("cc instanceof A="+(cc instanceof A));
        //对象和父类进行instanceof判断,都为true
        System.out.println("ab instanceof B="+(ab instanceof B));
        System.out.println("ac instanceof B="+(ac instanceof B));
        System.out.println("bc instanceof B="+(bc instanceof B));
        System.out.println("bb instanceof B="+(bb instanceof B));
        System.out.println("cc instanceof B="+(cc instanceof B));
        //对象和他的子类进行instanceof判断为false
        System.out.println("ab instanceof C="+(ab instanceof C));
        System.out.println("ac instanceof C="+(ac instanceof C));
        System.out.println("bc instanceof C="+(bc instanceof C));
        System.out.println("bb instanceof C="+(bb instanceof C));
        System.out.println("cc instanceof C="+(cc instanceof C));
    }
}

程序输出:
ab instanceof A=true
ac instanceof A=true
bc instanceof A=true
bb instanceof A=true
cc instanceof A=true
ab instanceof B=true
ac instanceof B=true
bc instanceof B=true
bb instanceof B=true
cc instanceof B=true
ab instanceof C=false
ac instanceof C=true
bc instanceof C=true
bb instanceof C=false
cc instanceof C=true

7. 下面有关JVM内存,说法错误的是?

  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
  • 虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
  • 方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
  • 原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

解析:方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

8. 下列正确的有( )

  • call by value不会改变实际参数的数值
  • call by reference能改变实际参数的参考地址
  • call by reference不能改变实际参数的参考地址
  • call by reference能改变实际参数的内容

解析:引用数据类型是引用传递(call by reference),基本数据类型是值传递(call by value)
值传递不可以改变原变量的内容和地址—》原因是java方法的形参传递都是传递原变量的副本,在方法中改变的是副本的值,而不适合原变量的
引用传递不可以改变原变量的地址,但可以改变原变量的内容—》原因是当副本的引用改变时,原变量 的引用并没有发生变化,当副本改变内容时,由于副本引用指向的是原变量的地址空间,所以,原变量的内容发生变化。
结论:1.值传递不可以改变原变量的内容和地址;
2.引用传递不可以改变原变量的地址,但可以改变原变量的内容;

9. Which statement declares a variable a which is suitable for referring to an array of 50 string objects?(Java)

  • char a[][];
  • String a[];
  • String[] a;
  • Object a[50];
  • String a[50];
  • Object a[];

解析:在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。

  1. String a[]=new String[50];
  2. String b[];
  3. char c[];
  4. String d[50];
  5. char e[50];

你可能感兴趣的:(java笔试题)