1.
class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
     
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}
问这个程序的输出结果。

正确答案: D   你的答案: B (错误)

Base SonB
Son SonB
Base Son SonB
编译不通过
解析:
         Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。
         base调用的method()方法就是调用了子类重写的method()方法。
         而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。
         要想调用的话需要先通过SON son=(SON)base;强制转换,然后用son.methodB()调用就可以了。
        总之,向上转型,父类的引用无法访问子类独有的方法

2.已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?()
public class Test
{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main (String args[])
{
Test t = new Test();
}
}

正确答案: A   你的答案: A (正确)

t.f;
this.n;
Test.m
Test.f
解析: 
        1、f 虽然是 Test 类的私有成员属性,但因为 main 方法就在 Test 类内,因此可以通过 “对象名.属性名” 的方式调用,所以 A 对。
        2、static 静态成员属性不能使用 this 关键字调用,B 错
        3、m 和 f 都是普通成员属性,而 “类名.” 方式只能调用 静态成员属性,因此 C 和 D 都错。

3.下面程序的运行结果是
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);

正确答案: B   你的答案: B (正确)

true
false
exception
无输出
解析:
        String str1 = "hello"; 这里的str1指的是方法区的字符串常量池中的"hello",编译时期就能知道;
        String str2 = "he"+new("llo");这里的str2必须在运行时才知道str2是什么,所以它是只想堆里定义的字符串"hello;
        所以这两个的引用是不一样的,如果用str1.equal(str2),那么返回的是Ture,因为两个字符串的内容一样
        

4.在 Java 中,属于整数类型变量的是()

正确答案: C   你的答案: A (错误)

single
double
byte
char
解析:
        JAVA中的四类八种基本类型:
                整数类型:int、short、long、byte
                浮点数型:float、double
                逻辑类型:boolean
                字符型:char

5.java用()机制实现了线程之间的同步执行

正确答案: A   你的答案: B (错误)

监视器
虚拟机
多个CPU
异步调用
解析:
        首先jvm中没有进程的概念 ,但是jvm中的线程映射为操作系统中的进程,对应关系为1:1。那这道题的问的就是jvm中线程如何异步执行 。  在jvm中 是使用监视器锁来实现不同线程的异步执行,  在语法的表现就是synchronized 

6.以下JAVA程序代码的输出是
public static void main(String args[]) {
System.out.println(14^3);
}

正确答案: B   你的答案: A (错误)

2744
13
17
11
解析:
        ^表示异或 就是相同是0 不同是1
        14是1110
        3是0011
        所以14^3=1101,即13
7.关于异常的编程,以下描述错误的是:( )

正确答案: A   你的答案: C (错误)

在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
int i=Integer.parseInt(”123a”);将产生NumberFormatException
int a[]=null; a[0]=1; 将产生NullPointerException
输入输出流编程中,读和写时都要抛出IOException
解析:
        Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException)。
            1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:
                ClassCastException(类转换异常)
                ClassNotFoundException
                IndexOutOfBoundsException(数组越界异常)
                NullPointerException(空指针异常)
                ArrayStoreException(数组存储异常,即数组存储类型不一致)
                还有IO操作的BufferOverflowException异常
            2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:
               IOException
               SqlException
        
            分母为0 为运行时异常,jvm帮我们补货,无需代码里面显式捕获

8.当编译并运行下面程序时会发生什么结果()
public class Bground extends Thread{
    public static void main(String argv[]){
        Bground b = new Bground();
        b.run();
    }
    public void start(){
        for(int i=0;i<10;i++){
            System.out.println("Value of i = "+i);
        }
    }
}

正确答案: D   你的答案: A (错误)

编译错误,指明run方法没有定义
运行错误,只鞥呢run方法没有定义
编译通过并输出0到9
编译通过,但无输出
解析:
        于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
        但是在Thread中,run方法是个空方法,没有具体实现。
        Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。