天天看点

java常见例题一

  1. 2乘以8等於几的最效率的方法?

    将一个数左移n位,就相当于乘以了2的n次方。

    那么,一个数乘以8只要将其左移3位即可,而位运算是cpu直接支持的,效率最高。

    所以,2乘以8等於几的最效率的方法是2<<3

  2. Break、continue和return的使用方法?
  3. break :

    (1).结束当前整个循环,执行当前循环下边的语句。忽略循环体中任何其它语句和循环条件测试。

    (2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出]

    (3).break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。

    (4).当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 总的来说:就近原则,结束当前的整个循环。

  4. return:

    (1).return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。

    (2).return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。

    (3). return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。

  5. continue:

    (1).终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。

    (2).结束当前循环,进行下一次的循环判断。

    (3).终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行.。

  6. 简述交换两个数的方法及优劣性

    int a;

    int b;

    方式一:通过存放变量temp

    int temp=a;

    a=b;

    b=temp;

    方式二:通过加减法

    a+=b;

    b=a-b;

    a=a-a;

    方式三:通过位运算符

    a=a^a ^b;

    b=a^b ^b;

    总结:

    方式一是最常见的,可读性高,但是需要在内存中存放临时变量,但是对于现在来说,需要的内存空间很小,而且存放临时变量的内存很快就会释放,不存在问题。

    方式二有缺陷,当两个数相加之后,可能其结果超出了变量类型能表达的最大范围,这个时候结果就会出问题,不推荐使用。

    方式三效率是最高的,但是可读性不是很好。

    在程序中我们应该尽可能的使用方式一,提高程序的可读性。但是需要了解方式三,以及方式三的原理。

  7. Java 构造方法和成员变量初始化顺序

    执行顺序:

    执行父类静态代码 执行子类静态代码

    初始化父类成员变量

    初始化父类构造函数

    初始化子类成员变量

    初始化子类构造函数

  8. 为什么byte b=5;b+=5;不会报错,而b=b+5;就会报错?

    因为前者类似于++运算,对于常量来说jvm不会编译器进行优化;而后者在进行预算的时候会自动进行数据类型的自动转化,提升为int类型,而byte类型是不能直接被int类型的数机娘赋值的。

  9. 对于代码:

    public class T11 {

    public static void main(String[] args) {

    try {

    System.out.println(“main1”);

    ma();

    System.out.println(“main2”);

    } catch(Exception e) {

    System.out.println(“Catch Exception in main”);

    System.out.println(e.getMessage());

    }

    }

    public static void ma() throws IOException {

    try {

    System.out.println(“ma1”);

    mb();

    System.out.println(“ma2”);

    } catch (SQLException e) {

    System.out.println(“Catch SQLException in ma”);

    throw new IOException(e.getMessage());

    }

    }

    public static void mb() throws SQLException {

    throw new SQLException(“SQLException in mb”);

    }

    }

    输出结果是:

    main1, ma1, Catch SQLException in ma, ,Catch Exception in main, SQLException in mb,

(多选题)给出以下代码,请问该程序的运行结果是

class A{

private int x=0;

static int y=1;

protected int z=2;

}

class B extends A{

void method(){

System.out.println(x);

System.out.println(y);

System.out.println(z);

}

}

下列说法正确的是( )

A.程序编译错误,因为类B不能访问变量x

B.程序编译成功,打印输出012

C.程序编译错误,如果移走System.out.println(x)这条语句,可使编译程序通过

D.程序编译错误,因为变量x未在类B中定义

//答案为acd

  1. 如下代码:

    public class AA {

    public static void main(String[] args) {

    int[] a = {1,2,3,4,5};

    expand(a);

    changeArray(a);

    printArray(a);

    }

    public static void expand(int[] a){

    int[] newArray = new int[a.length * 2];

    System.arraycopy(a, 0, newArray, 0, a.length);

    a = newArray;

    }

    public static void changeArray(int[] a){

    a[0] = 10;

    }

    public static void printArray(int[] a){

    for(int i = 0; i<a.length; i++){

    System.out.print(a[i] + “\t”);

    }

    System.out.println();

    }

    }

    则结果为()

//10,2,3, 4,5