java基础10题

1.为初始化其成员变量,每个类都定义的方法是()
A.方法
B.main
C.构造方法
D.对象
2.Java表达式"13 & 17"的结果是什么?()
A.30
B.13
C.17
D.1
3.Thread. sleep()是否会抛出checked exception?
A.会
B.不会
4.下面有关java基本类型的默认值和取值范围,说法错误的是?
A.字节型的类型默认值是0,取值范围是-27—27-1
B.boolean类型默认值是false,取值范围是true\false
C.字符型类型默认是0,取值范围是-2^15 —2^15-1
D.long类型默认是0,取值范围是-263—263-1
5.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
A.Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C.通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D.Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F.Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
6.下面代码执行结果为

 class A {
     public int func1(int a, int b) {
         return a - b;
     }
 }
 class B extends A {
     public int func1(int a, int b) {
         return a + b;
     }
 }
 public class ChildClass {
     public static void main(String[] args) {
     A a = new B();
     B b = new B();
     System.out.println("Result=" + a.func1(100, 50));
     System.out.println("Result=" + b.func1(100, 50));
     }
 }

7.javac的作用是( )。
A.将源程序编译成字节码
B.将字节码编译成源程序
C.解释执行Java字节码
D.调试Java代码
8.要在控制台界面下接收用户从键盘输入,需要import的包是:( )
A.java.lang包
B.java.awt包
C.java.io包
D.java.applet包
9.volatile关键字的说法错误的是
A.能保证线程安全
B.volatile关键字用在多线程同步中,可保证读取的可见性
C.JVM保证从主内存加载到线程工作内存的值是最新的
D.volatile能禁止进行指令重排序
10.关于Java内存区域下列说法不正确的有哪些
A.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
B.Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
C.Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
D.方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

(1)C
构造方法用于对象属性的实例化
(2)D
&运算符:两个数都转为二进制,然后从两个数的最高位进行与运算,两个都为真(1),结果才为真(1),否则为假(0)
13:01101
17:10001
结果:00001,既为1
(3)
A
Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)
(4)C
默认值 取值范围 示例

字节型 : 0 -27—-27-1 byte b=10;

字符型 : ‘ \u0000′ 0—-2^16-1 char c=’c’ ;

short : 0 -215—-215-1 short s=10;

int : 0 -231—-231-1 int i=10;

long : 0 -263—-263-1 long o=10L;

float : 0.0f -231—-231-1 float f=10.0F

double : 0.0d -263—-263-1 double d=10.0;

boolean: false true\false boolean flag=true;
(5)正确答案: A D F
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
(6)A
其实很简单,涉及转型的题目,分为向上或者向下转型。
关键的来了,不论向上或者向下转型,都是一句话,“编译看左边,运行看右边”。也就是编译时候,会看左边引用类型是否能正确编译通过,运行的时候是调用右边的对象的方法。
就本题来说,编译时候会发现左边满足条件所以编译通过,运行时候又会调用右边也就是 class B 的方法,所以答案都是150。
(7)A
javac将源代码编译成class文件,字节码,java将字节码编译成机器码,exe程序
(8)C
接收控制台的输入·是util.Scanner类 但是这个是字符界面 可以想象一下Linux字符界面 小黑屋 往里面敲命令。input and output
(9)A
出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。
(10)BC
B虚拟机栈 局部变量表主要存放了编译器可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)
C Java 堆是所有线程共享的一块内存区域 几乎所有的对象实例以及数组都在这里分配内存。

你可能感兴趣的:(java,jvm,开发语言)