练习题三

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

  1. public class Interesting{
  2.  //do sth
    
  3. }
    (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 = j
2;
}
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)。

  1. A a0 =new A();
  2. A a1 =new B();
  3. 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;
    }
}

input.next()与input.nextLine()

多次判断:


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());
	  }
   }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值