1-1
String字符串在创建后可以被修改。F
1-2
设String对象s="Hello “,运行语句System.out.println(s.concat(“World!”));后String对象s的内容为"Hello world!”,所以语句输出为Hello world!。F
1-5
Java中数组的元素只能是简单数据类型。F
1-6
把数组中元素按某种顺序排列的过程叫做查找 。F
1-7
一个数组可以存放许多不同类型的数值。F
1-8
数组中有length()这个方法,如array.length()表示数组array中元素的个数T
1-9
制造(new)数组时,要指定数组长度,以便为数组分配内存T。
1-10
Java语言中的数组元素下标总是从0开始,下标可以是整数或整型表达式。T
1-11
在Java程序中,可以使用protected来修饰一个类。T
1-12
对于abstract类,不能创建该类的对象。T
1-13
如果在子类的构造方法中,没有使用关键字super调用父类的某个构造方法,那么默认有super();语句,即调用父类的不带参数的构造方法。T
1-14
实例变量只能通过对象名访问,类变量既可以通过某个对象名也可以通过类名来访问。T
1-15
java.lang包是Java的核心类库,它包含了运行Java程序必不可少的系统类。T
1-16
package语句必须放到java程序的最开始。
T
1-17
在实例方法或构造器中,this用来引用当前对象,通过使用this可引用当前对象的任何成员。T
1-18
Java中类和方法都不允许嵌套定义。F
1-19
子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。T
1-20
类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类。T
1-21
有的类定义时可以不定义构造函数,所以构造函数不是必需的。F
1-22
可以使用protected修饰符来防止方法和数据被不同包的非子类访问。T
1-23
如果使用import语句引入了整个包中的类,那么可能会增加编译时间。但绝对不会影响程序运行的性能,因为当程序执行时,只是将真正使用的类的字节码文件加载到内存。
T
1-24
final类中的属性和方法都必须被final修饰符修饰。
F
1-25
修饰符protected主要是允许其他包中的子类来访问父类的特定属性。
T
1-26
构造函数名应与类名相同,返回类型为void。
F
1-27
在Java程序中,可以使用private来修饰一个类。
T
1-28
类及其属性、方法可以同时有一个以上的修饰符来修饰。T
1-29
一个类的静态方法不可以访问该类的非静态成员变量。T
1-30
声明构造方法时,可以使用private访问修饰符。F
1-31
如果一个类的声明中没有使用extends关键字,这个类被系统默认为是继承Object类。T
1-32
接口中的方法默认是public abstract方法。T
1-33
如果一个类声明实现一个接口,但没有实现接口中的所有方法,那么这个类必须是abstract类。T
1-34
构造方法可以调用本类中重载的构造方法和它的父类的构造方法。T
1-35
所有异常都必须捕获。F
1-36
一个try语句可以有多个catch语句与之对应。T
1-37
用户可以自定义自己的异常类。T
1-38
可以使用throws语句来指明方法有异常抛出。T
1-39
如果线程死亡,它便不能运行。T
1-40
当调用一个正在进行线程的stop()方法时,该线程便会进入休眠状态。F
以下代码段将创建几个对象?
String s1=“bc”;
String s2=“bc”;
1
2-2
关于垃圾收集的哪些叙述是对的。
B
(2分)
A.垃圾收集能够在期望的时间释放被java对象使用的内存。
B.垃圾收集将检查并释放不再使用的内存。
C.垃圾收集允许程序开发者明确指定并立即释放该内存。
D.程序开发者必须自己创建一个线程进行内存释放的工作。
2-3
你怎样强制对一个对象立即进行垃圾收集?
(2分)E
A.
调用 System.gc()
B.
调用System.gc(), 同时传递要进行垃圾收集对象的引用
C.
调用 Runtime.gc()
D.
给这个对象的所有引用设置一个新的值(例如null)
E.
垃圾收集是不能被强迫立即执行
2-9
执行完以下代码int [ ] x = new int[10];后,以下哪项说明是正确的( )A
(2分)
A.x[9]为0
B.x[9]未定义
C.x[10]为0
D.x[0]为空
2-11下列数组声明,下列表示错误的是(D )
(2分)
A.int[ ] a
B.int a[ ]
C.int[ ][ ] a
D.int[ ]a[ ]
2-12
下列语句会造成数组new int[10]越界是( D)。
(2分)
A.a[0] += 9;
B.a[9]=10;
C.a[9]
D.for(int i=0;i<=10;i++) a[i]++;
2-13
list是一个ArrayList的对象,哪个选项的代码填写到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?( D )
Iterator it = list.iterator();
int index = 0;
while (it.hasNext()){
Object obj = it.next();
if (needDelete(obj)) { //needDelete返回boolean,决定是否要删除
//todo delete
}
index ++;
}
快速失败机制
A.list.remove(obj);
B.list.remove(index);
C.list.remove(it.next());
D.it.remove();
集合容器知识点大全
2-14
下面哪个Set是按照插入顺序排序的?A
(2分)
A.LinkedHashSet
B.HashSet
C.AbstractSet
D.TreeSet
2-15
下面哪个Map是排序的?A
(2分)
A.TreeMap
B.HashMap
C.Hashtable
D.WeakHashMap
E.LinkedHashMap
2-16
下面哪个Set是根据内容排序的?C
(2分)
A.LinkedHashSet
B.HashSet
C.TreeSet
D.AbstractSet
2-17
以下关于构造函数的描述错误的是( A )。
(2分)
A.构造函数的返回类型只能是void型。
B.构造函数是类的一种特殊函数,它的方法名必须与类名相同。
C.构造函数的主要作用是完成对类的对象的初始化工作。
D.一般在创建新对象时,系统会自动调用构造函数。
2-18
有以下程序片段,下列哪个选项不能插入到行1。( D )
- public class Interesting{
-
//do sth
- }
(2分)
A.import java.awt.*;
B.package mypackage;
C.class OtherClass{ }
D.public class MyClass{ }
2-19
为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为(A )。
(2分)
A.static void method( )
B.public void method( )
C.final void method( )
D.abstract void method( )
2-20
以下代码的输出结果为(C )。
public class Pass{
static int j = 20;
public void amethod(int x){
x = x2;
j = j2;
}
public static void main(String args[]){
int i = 10;
Pass p = new Pass();
p.amethod(i);
System.out.println(i+" and "+j);
}
}
(2分)
A.错误:方法参数与变量不匹配
B.20 and 40
C.10 and 40
D.10 and 20
2-21
对于类与对象的关系,以下说法错误的是(D )。
(2分)
A.类是对象的类型
B.对象由类来创建
C.类是同类对象的抽象
D.对象是创建类的模板
2-22
类中某方法定义如下: double fun(int a,int b){ return a*1.0/b; } 同一类内其它方法调用该方法的正确方式是( A)。
(2分)
A.double a = fun(1,2)
B.double a = fun(1.0,2.0)
C.int x = fun(1,2)
D.int x = fun(1.0,2.0)
2-23
下述哪条关于构造方法的说法,不符合Java语法的规定( C)。
(2分)
A.每个类至少有一个构造方法
B.构造方法必须与类同名
C.构造方法无返回值,其返回值类型必须写为void
D.构造方法可以是private的
2-24
关于类中成员变量的作用范围,下述说法中正确的是(C )。
(2分)
A.只有用public修饰的变量才能在所有方法中使用
B.用private修饰的成员变量可以在main方法中直接使用
C.类中所有成员变量在所有成员方法中有效
D.用static修饰的成员变量只能在用static修饰的方法中使用
2-25
A派生出子类B,B派生出子类C,对于如下Java源代码正确的说法是(D)。
- A a0 =new A();
- A a1 =new B();
- A a2 =new C();
(2分)
A.只有第1行能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行、第2行和第3行的声明都是正确的
2-26
下面是People和Child类的定义和构造方法,每个构造方法都输出编号。在执行new Child(“mike”)的时候都有哪些构造方法被顺序调用?请选择输出结果 ( D )
class People {
String name;
public People() {
System.out.print(1);
}
public People(String name) {
System.out.print(2);
this.name = name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + “:F”);
}
public Child(){
System.out.print(4);
}
}
(2分)
A.312
B.32
C.432
D.132
2-27
下面哪个对类的声明是错误的?A
(2分)
A.class MyClass extends MySuperClass1, MySupperClass2 {}
B.public class MyClass{}
C.abstract class MyClass implements YourInterface1, Youriterface2 {}
D.private class MyClass {}
E.class MyClass extends MySuperClass implements YourInterface {}
2-28
下列选项中,用于实现接口的关键字是 (B )。
(2分)
A.interface
B.implements
C.abstract
D.class
2-32
在Java中,能实现多重继承效果的方式是(A )。
区分多重继承与多层继承
A.接口
B.继承
C.内部类
D.适配器
2-33
下面哪个流类属于面向字符的输入流( D ) 。
(2分)
A.BufferedWriter
B.FileInputStream
C.ObjectInputStream
D.InputStreamReader
6-8 将学生对象按照成绩降序排序 (10分)
请阅读程序并补全源代码:先从键盘录入5个学生的数据,保存到容器对象ar中,然后按照成绩score从高到低排序之后输出。
本程序将下面的学生类Student对象按照成绩score从高到低排序:
import java.util.*;
class Student {
String number;
String name;
float score;
// Constructor
Student(String number1, String name1, float score1) {
number = number1;
name = name1;
score = score1;
}
// Used to print student details in main()
public String toString() {
return this.number + " " + this.name + " " + this.score;
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Student> ar = new ArrayList<Student>();
/* 请在这里补全代码,使程序完成指定的功能。 */
输入样例:
在这里输入5个学生的记录:
04031021 张三 84
04031013 李四 73
04031018 王五 98
04031038 马六 65
04031029 陈七 96
输出样例:
04031018 王五 98.0
04031029 陈七 96.0
04031021 张三 84.0
04031013 李四 73.0
04031038 马六 65.0
Scanner sc=new Scanner(System.in);
int n=0;
String num;
String name;
float score;
for(int i=0;i<5;i++) {
Student s = new Student(sc.next(), sc.next(), sc.nextFloat());
ar.add(s);
}
ar.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return (int)(o2.score-o1.score);
//升序只需要return (int)(o1.score-o2.score);
}
});
for(Student elem:ar)
System.out.println(elem.toString());
sc.close();
}
}
7-7 日期加减 (10分)
请编程从键盘输入一个长整型的值,该值表示从1970年1月1日算起的一个特定时间(毫秒数),以此时间构造一个日期对象。再输入一个普通整型值,该值表示天数,加上该天数后,然后输出对应的年、月、日。
输入格式:
1234567898765 (第一行输入一个长整型数)
158 (第二行输入一个普通整型数,表示天数)
输出格式:
2009-02-14
2009-07-22
输入样例:
1234567898765
158
输出样例:
2009-02-14
2009-07-22
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
GregorianCalendar gc=new GregorianCalendar();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
long millis=in.nextLong();
Long day=in.nextLong();
Long ms=day*24*60*60*1000+millis; //将天数转换成毫秒数
gc.setTimeInMillis(millis);
System.out.println(sdf.format(gc.getTime()));//抽象类Calendar的getTime()方法返回一个Date对象
gc.setTimeInMillis(ms);
System.out.println(sdf.format(gc.getTime()));
}
}
7-10 验证手机号码
某系统在新用户注册时必须输入手机号,为了提高系统效率,防止输错手机号,需要对手机号进行验证。 验证规则为: (1)长度为11位 (2)由数字0~9组成 (3)必须是1开头 以上3个条件同时满足,则验证通过,否则为不通过。
输入格式:
在一行中一个字符串,长度不超过50个字符。例如: 13802988920
输出格式:
如果验证通过则输出Yes,否则输出No。
输入样例:
13812345678
输出样例:
Yes
使用正则表达式:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
if(isMobile(str))
System.out.println("Yes");
else
System.out.println("No");
}
public static boolean isMobile(final String str) {
Pattern p = null;
Matcher m = null;
boolean b = false;
p = Pattern.compile("^[1][0-9]{10}$"); // 验证手机号
m = p.matcher(str);
b = m.matches();
return b;
}
}
多次判断:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String number=sc.nextLine();
int flag=1;
if(number.length()<11)
flag=0;
if(number.charAt(0)!='1')
flag=0;
for(int i=1;i<number.length();++i){
if(number.charAt(i)<'0' || number.charAt(i)>'9')
{
flag=0;
break;
}
}
if(flag==1)
System.out.println("Yes");
else System.out.println("No");
}
}
7-11 电话号码同步(Java)
考集合(Map)必凉凉
文件phonebook1.txt和phonebook2.txt中有若干联系人的姓名和电话号码。请你设计一个程序,将这两个文件中的电话号码同步。(所谓同步,就是将两个文件中的电话号码合并后剔除相同的人名和电话号码。请将同步后的电话号码按照姓名拼音顺序排序后保存到文件phonebook3.txt中。)
由于目前的OJ系统暂时不能支持用户读入文件和写文件,我们编写程序从键盘输入文件中的姓名和电话号码,当输入的单词为end时,表示文件结束。将同步后的电话号码按照姓名拼音顺序排序后输出。
输入格式:
张三 13012345678
李四 13112340000
王五 13212341111
马六 13312342222
陈七 13412343333
孙悟空 13512345555
end (表示文件phonebook1.txt结束)
张三 13012345678
孙悟空 13512345555
王五 13212341111
陈七 13412343333
唐三藏 13612346666
猪悟能 13712347777
沙悟净 13812348888
end (表示文件phonebook2.txt结束)
输出格式:
陈七 13412343333
李四 13112340000
马六 13312342222
沙悟净 13812348888
孙悟空 13512345555
唐三藏 13612346666
王五 13212341111
张三 13012345678
猪悟能 13712347777
输入样例:
Zhang3 13012345678
Li4 13112340000
Wang5 13212341111
Ma6 13312342222
Chen7 13412343333
SunWuKong 13512345555
end
Zhang3 13012345678
SunWuKong 13512345555
Wang5 13212341111
Chen7 13412343333
TangSanZang 13612346666
ZhuWuneng 13712347777
ShaWuJing 13812348888
end
输出样例:
Chen7 13412343333
Li4 13112340000
Ma6 13312342222
ShaWuJing 13812348888
SunWuKong 13512345555
TangSanZang 13612346666
Wang5 13212341111
Zhang3 13012345678
ZhuWuneng 13712347777
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String string;
String string2;
Set<String> set=new TreeSet<String>();
Set<String> set2=new TreeSet<String>();
Set<String> set3=new TreeSet<String>();
while(in.hasNextLine()){
string=in.nextLine();
if(string.equals("end")){
break;
}
else{
set.add(string);
}
}
while(in.hasNextLine()){
string2=in.nextLine();
if(string2.equals("end")){
break;
}
else{
set2.add(string2);
}
}
set3.addAll(set);
set3.addAll(set2);
Iterator iterator=set3.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}