1. 解析:
3.下面程序的运行结果是 解析:
解析:
解析:
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方法肯定是无输出。