1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

2、Java有没有goto?

java中的保留字,现在没有在java中使用。(可以明确的说现在使用的人就是有病)

3、说说&和&&的区别。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x33 & ++y>0) y会增长,If(x33 && ++y>0)不会增长。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

4、在JAVA中如何跳出当前的多重嵌套循环?

在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制。

  1. @Test
  2. public void test2(){
  3. boolean a = false;
  4. ok-{
  5. for(int i=0;i<10;i++){
  6. if(i==5){
  7. break ok;
  8. }
  9. System.out.println(i);
  10. }
  11. }
  12. }
  13. @Test
  14. public void test3(){
  15. boolean a = true;
  16. for(int i=0;i<10&&a;i++){
  17. if(i==5){
  18. a = false;
  19. }
  20. System.out.println(i);
  21. }
  22. }

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它不能作用于swtich语句中。

  1. public static void main(String[] args){
  2. Scanner sc=new Scanner(System.in);
  3. System.out.print("请输入一个学生的成绩:");
  4. String score = sc.next();
  5. String level="";//等级
  6. switch(score){
  7. case "A"-level="90-100";break;
  8. case "B"-level="80-89";break;
  9. case "C"-level="70-79";break;
  10. case "D"-level="60-69";break;
  11. case "E"-level="0-59";break;
  12. default -level="error";break;
  13. }
  14. System.out.println("您的成绩对应的等级是:"+level);
  15. }

1.switch后面的(),里面返回的是一个具体的数值:byte ,short,char ,int ,jdk1.5增加了枚举;JDK 1.7之后 可以是String
2.这个数值会依次跟case后面的数值进行比较,只要满足就执行后面的代码,直到遇到break结束
3.在每个分支后面要加上一个关键字break
4.default就是一个备胎的作用。其余的分支假如都没有走,那么一定会走default里面的代码。(类似if多分钟中的else结构)
default可以写在任意的位置上,但是要写break结束语句。
假如放在最后一行,break可以省略不写。(建议写在最后一行—可读性好)
5.switch能解决的,if都能解决,if能解决的 switch不一定能解决。

6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

  1. public void test4(){
  2. short s1 = 1;
  3. s1 = s1 + 1;
  4. }

7.char型变量中能不能存贮一个中文汉字(双字符)?为什么?

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

8、用最有效率的方法算出2乘以8等于几?

8 << 1

9、请设计一个一百亿的计算器

这种问题就是想问你对long的表示范围的了解,1010=(210)^10超过了long的表示范围,可以使用biginteger直接使用。如果非要实现可以将其保存为String 然后单个符号位进行计算。

10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer(“immutable”);
执行如下语句将报告编译期错误:a=new StringBuffer(“”);
但是,执行如下语句则可以通过编译: a.append(“ broken!”);

  1. @Test
  2. public void test5(){
  3. final StringBuffer a = new StringBuffer("immutable");
  4. //虽然不可以被重新赋值,但是可以进行添加元素;可以简单的理解为不可变指针数组追加元素问题。
  5. // a = new StringBuffer("");
  6. a.append(" broken!");
  7. }