public class ReturnIt{ 
      returnType methodA(byte x, double y){   //line 2
            return (short)x/y*2; 
      } 
}

what is valid returnType for methodA in line 2?

答案:返回double类型,因为(short)x将byte类型强制转换为short类型,与double类型运算,将会提升为double类型.

1)  class Super{ 
 2)          public float getNum(){return 3.0f;} 
 3)  } 
 4) 
 5)  public class Sub extends Super{ 
 6) 
 7)  }

which method, placed at line 6, will cause a compiler error? 
A. public float getNum(){return 4.0f;} 
B. public void getNum(){} 
C. public void getNum(double d){} 
D. public double getNum(float d){return 4.0d;} 
Answer:B

A属于方法的重写(重写只存在于继承关系中),因为修饰符和参数列表都一样.B出现编译错误,如下:

Sub.java:6: Sub 中的 getNum() 无法覆盖 Super 中的 getNum();正在尝试使用不
兼容的返回类型
找到: void
需要: float
   public void getNum(){}
               ^
1 错误

B既不是重写也不是重载,重写需要一样的返回值类型参数列表,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private);

重载:必须具有不同的参数列表;
  可以有不同的返回类型,只要参数列表不同就可以了;
  可以有不同的访问修饰符;

把其看做是重载,那么在java中是不能以返回值来区分重载方法的,所以b不对.

what is the result? 
Answer:compile error 错误在与if(x=y) 中,应该是x==y;  =是赋值符号,==是比较操作符


public class Foo{ 
  public static void main(String args[]){ 
  try{return;} 
   finally{ System.out.println("Finally");} 
   } 
    }

 what is the result? 
 A. print out nothing 
 B. print out "Finally" 
 C. compile error 
Answer:B   java的finally块会在return之前执行,无论是否抛出异常且一定执行.

public class Test{ 
   public static String output=""; 
   public static void foo(int i){ 
     try { 
       if(i==1){ 
         throw new Exception(); 
       } 
       output +="1"; 
     } 
     catch(Exception e){ 
       output+="2"; 
       return; 
     } 
     finally{ 
       output+="3"; 
     } 
     output+="4"; 
   } 
   public static void main(String args[]){ 
     foo(0); 
     foo(1); 
     24)   
   } 
}

 

what is the value of output at line 24? Answer:13423 如果你想出的答案是134234,那么说明对return的理解有了混淆,return是强制函数返回,本题就是针对foo(),那么当执行到return的话,output+="4"; 就不再执行拉,这个函数就算结束拉.