JavaSE之面试挖坑题

2019-02-27  本文已影响0人  金石_832e

1、下面写法是否正确?

package com.zpwd.chapter1_0225;
public class Demo1 {
public static void main(String[] args) {
     int num =100;
     int i=99;//int i =99 变量i的作用域的开始位置
     if(num>50) {
           int i =10;//int i =10 变量i的作用域的开始位置
           System.out.println(i);
      }//int i =10 变量i的作用域的结束位置
     System.out.println(i);
   } //int i =99 变量i的作用域的结束位置
}

写法错误: int i=99 ; 变量i的作用域的从此处开始,到倒数第二个 } 结束。作用域内又声明了一个 int i =10; 有交集的作用域内不能存在名称相同的变量,因此错误。


2、下面写法是否正确?

package com.zpwd.chapter1_0225;
public class Demo1 {
public static void main(String[] args) {
     int num =100;
     if(num>50) {
           int i =10;//int i =10 变量i的作用域的开始位置
           System.out.println(i);
      }//int i =10 变量i的作用域的结束位置
     int i=99;
     System.out.println(i);
  } 
}

写法正确: 因为 int i=10;变量i的作用域从此处开始,到最近的 } 结束。而int i=99;变量i的作用域的从此处开始,到倒数第二个 } 结束。两个变量i的作用域没有交集,因此正确。


3、给出下面的输出结果。

package com.zpwd.chapter1_0225;
public class Demo1 {
public static void main(String[] args) {
     switch (num) {
    case 100:
        System.out.println("100分");

    case 99:
        System.out.println("差一分");

    case 98:
        System.out.println("差一分");

    case 97:
        System.out.println("差一分");

    default:
        System.out.println("不合格");
    }
  } 
}

错误结果: 100分。
正确结果: 100分 差一分 差一分 差一分 不合格。

注意:

PS:break是退出循环,执行循环下方的代码(退出当前代码块)。
PS:return则是返回到调用的方法处,顺序执行方法调用处的下方代码。
PS:jdk7之前switch (表达式) ,表达式只接收int的兼容类型(byte 、char 、short 、 int )。
PS:jdk7之后switch (表达式) ,表达式多加了一个类型 String。


4、给出下面的输出结果。

package com.zpwd.chapter1_0225;
public class Demo1 {
public static void main(String[] args) {
    //第一行
    int numz = 50;
    if (numz > 50)
    System.out.println("大于50");
    System.out.println("小于50");

    //第二行   
    int numx = 50;
    if (numx > 50);
    System.out.println("大于50");
    System.out.println("小于50");
  } 
}

结果:小于50 大于50 小于50

因为上图等效于下图

 package com.zpwd.chapter2_0227;

 public class ccccc {
    public static void main(String[] args) {
    // 第一行
    int numz = 50;
    if (numz > 50) {
        System.out.println("大于50");
    }
    System.out.println("小于50");

    // 第二行
    int numx = 50;
    if (numx > 50) {

    }
    System.out.println("大于50");
    System.out.println("小于50");
  }
}

5、坑中之坑。

public class Practice {
public static void main(String[] args) {
   // 1
   //      int x = 20;
   //      int y = 30;
   //      if(x > 10 && y == y++) 
   //      System.out.println(y);
   //      System.out.println(x);
   //      System.out.println(y);
   
    
   // 2
   //      int x = 20;
   //      int y = 30;
   //      if(x > 100 && y == y++) 
   //      System.out.println(y);
   //      System.out.println(x);
   //      System.out.println(y);
  
    
   // 3
   //      int x = 20;
   //      int y = 30;
   //      if(x > 10 || y == y++)
   //      System.out.println(y);
   //      System.out.println(x);
   //      System.out.println(y);
 
   
   // 4
   //      int x = 20;
   //      int y = 30;
   //      if(x > 10 || y == y++);
   //      System.out.println(y);
   //      System.out.println(x);
   //      System.out.println(y);
   
   }
}

// 3个数字 31 20 31
// 2个数字 20 30
// 3个数字 30 20 30
// 3个数字 30 20 30


int[] oneArr = { 2, 11, 26, 27, 37, 44, 48, 60 };  
int[] twoArr = { 19, 35, 49, 55, 58, 75, 83, 84, 91, 93 };  
int[] threeArr = new int[oneArr.length + twoArr.length];   
int p = 0, q = 0;
while (p < oneArr.length && q < twoArr.length) {
threeArr[p + q] =                               
oneArr[p] < twoArr[q] ? oneArr[p++] : twoArr[q++];  

}

if (p < oneArr.length) {

System.arraycopy(oneArr, p, threeArr, p + q, oneArr.length – p);

}

else if (q < twoArr.length) {

System.arraycopy(twoArr, q, threeArr, p + q, twoArr.length – q);

}
for(int num : threeArr){

 System.out.print(num);

} 

输出的结果是:()。
A. [2,11,26,27,37,44,48,60,19,35,49,55,58,75,83,84,91,93];
B. [2,11,19,26,27,35,37,44,48,49,55,58,60,75,83,84,91,93];
C. [19,35,49,55,58,75,83,84,91,93,2,11,26,27,37,44,48,60];
D. [2,19,11,35,26,49,27,55,37,58,44,75,48,83,60,84,91,93];


给出以下代码,请问该程序的运行结果是什么? C

  1. public class Example{
  2. private int i = giveMeJ();
  3. private int j = 10;
  4. private int giveMeJ(){
  5. return j;
  6. }
  7. public static void main(String args[]){
  8. System.out.println((new Example()).i);//
  9. }
  10. }

请选择一个正确答案:
(A) 第8行代码编译错误。
(B) 第2行代码编译错误。
(C) 打印输出:0
(D) 打印输出:10
(new Example()).i匿名对象调用i,当程序运行时,giveMeJ()会先被加载到方法区(堆、栈、方法区内存模型),此时在没有经过创建实例对象时,i和j的值没有经过初始化,他们的值为0。只有在经过创建对象后j的值才为10。

上一篇下一篇

猜你喜欢

热点阅读