- 请给出最终输出内容(
it me)
int i = 3;
String result = new String();
switch (i) {
case 1:
result = result + "him ";
case 2:
result = result + "her ";
case 3:
result = result + "it ";
default:
result = result + "me ";
}
System.out.println(result);
解:没有break,会产生穿透,从满足条件的case开始执行到底
- 若有下列定义,下列哪个表达式返回false?(B)
String s = "hello";
String t = "hello";
char c[] = {'h', 'e', 'l', 'l', 'o'} ;
A s.equals(t);
B t.equals(c);
C s==t;
D t.equals(new String("hello"));
解:和t两个String类型变量都是常量池中的字符串,只有变量名不同是可以用双等号判断是否相等的,内存都是常量池中的字符串。
因此A,C正确,String类型重写了equals方法,用于判断字符串内容是否相等,t和new出来的"hello"内容显然是相等的,D正确。
String底层源码的equals()方法处有判断这个参数是不是String类的实例,如果不是则不执行判断直接返回false。B错误
- 在java中重写方法应遵循规则的包括()
可以有不同的访问修饰符
参数列表必须完全与被重写的方法相同
注解:
方法重写要注意的事项:
1.方法重写时, 方法名与形参列表必须一致。
2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。
4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。
Exception(大)
RuntimeException(小)
4.下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试(C)
A java
B javadoc
C jdb
D javaprof
解: java.exe是java虚拟机
javadoc.exe用来制作java文档
jdb.exe是java的调试器
javaprof,exe是剖析工具
- 关于java编译和运行命令叙述不正确的是? (A)
A 运行“java Scut.class”
B 运行“java Scut”
C 编译 Scut.java文件,使用“javac Scut.java”命令的输出文件是Scut.class
D java这个命令的运行对象是Scut.class
解:A 错误 运行命令是java + 你的 Java 程序的名字但是不加后缀所以这道题错在多了 .class这个后缀
B 正确
C javac 是编译命令,后跟 你的 Java 程序名字加后缀,也就是 YourClassName.java 所以答案正确
D JVM (Java 虚拟机)运行的是编译后的字节码文件(以.class为后缀的文件) ,也就是 YourClassName.class 所以答案正确
- 下面哪几个函数 public void example(){....} 的重载函数?(AD)
A public void example(int m){...}
B public int example(){..}
C public void example2(){..}
D public int example(int m,float f){...}
解:函数方法名必须相同,看参数列表即可,无关返回值。
- 以下类定义中的错误是什么?(方法没有正确定义)
abstract class xy
{
abstract sum (int x, int y) { }
}
解:抽象方法不可以有方法体
- 关于身份证号,以下正确的正则表达式为( AC )
A isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
B isIDCard=/^[1-9]\d{7}((9\d)|(1[0-2]))(([0|1|2]\d)|3[9-1])\d{3}$/;
C isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
D isIDCard=/^[1-9]\d{5}[1-9]\d{3}((9\d)|(1[9-2]))(([0|1|2]\d)|3[9-1])\d{4}$/;
解:A选项:isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/
C选项:isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/
^:起始符号,^x表示以x开头
$:结束符号,x$表示以x结尾
[n-m]:表示从n到m的数字
\d:表示数字,等同于[0-9]
X{m}:表示由m个X字符构成,\d{4}表示4位数字
15位身份证的构成:六位出生地区码+六位出身日期码+三位顺序码
18位身份证的构成:六位出生地区码+八位出生日期码+三位顺序码+一位校验码
C选项的构成:
[1-9]\d{5}:六位出生地区码,出生地区码没有以0开头,因此第一位为[1-9]。
[1-9]\d{3}:八位出生日期码的四位年份,同样年份没有以0开头。
((0\d)|(1[0-2])):八位出生日期码的两位月份,| 表示或者,月份的形式为0\d或者是10、11、12。
(([0|1|2]\d)|3[0-1]):八位出生日期码的两位日期,日期由01至31。
\d{4}:三位顺序码+一位校验码,共四位。
A选项的构成:
[1-9]\d{7}:六位出生地区码+两位出生日期码的年份,这里的年份指后两位,因此没有第一位不能为0的限制,所以合并了。
后面的与C选项类似了。
- 往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:(ABCD)
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
A class InnerClass{ public static float func(){return f;} }
B abstract class InnerClass{ public abstract float func(){} }
C static class InnerClass{ protected static float func(){return f;} }
D public class InnerClass{ static float func(){return f;} }
解:1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体
- 关于String、StringBuffer、StringBuilder以下说法错误的是(C)
A StringBuilder运行速度最快
B StringBuffer是线程安全的
C String的值是可变的
D StringBuffer运行速度比String快
解:String是final修饰的,不可变
在运行速度上StringBuffer因为兼顾了线程安全,效率不及StringBuilder
StringBuffer是线程安全的
-
程序中常采用变量表示数据,变量具有名、地址、值、作用域、生存期等属性。
关于变量的叙述,正确的是()
A 根据作用域规则,在函数中定义的变量只能在函数中引用
B 在函数中定义的变量,其生存期为整个程序执行期间
C 在函数中定义的变量不能与其所在函数的形参同名
D 在函数中定义的变量,其存储单元在内存的栈区
D为什么是对的
首先说明栈内存和堆内存里存放的是什么
- 栈内存中存放函数中定义的一些基本类型的变量和对象的引用变量;
- 堆内存中存放new创建的对象和数组。
简单的来说,堆主要是用来存放对象的,栈主要是用来执行程序的
这么做是因为
- 栈的存取速度快,栈数据可以共享,但是栈中的数据大小和生存期必须确定,缺乏灵活性中存放一些基本类型的对象和对象句柄
- 堆是操作系统分配给自己内存,由于从操作系统管理的内存分配,所以再分配和销毁时都需要占用时间,因此用堆的效率非常低,
但是优点在于编译器不需要指导从堆里分配多少存储控件,也不需要知道存储的数据要再堆里停留多长事件,因此用堆保存数据时会得到更大的灵活性