选择题 :
1. 要使对象具有序列化能力,则其类应该实现如下哪个接口()。
A java.io.Serializable
B java.lang.Cloneable,
C java.lang.CharSequence
D java.lang.Comparable
正确答案: A
选项分析:
A : serializable接口的作用:进行序列化.1、存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本;2、便于数据传输,尤其是在远程调用的时候。参考
B : 克隆参考
C : 字符串描述参考
D : compareTo接口,用于对类对象进行排序
2.下列选项中属于面向对象设计方法主要特征的是( )。
A 继承
B 自顶向下
C 模块化
D 逐步求精
正确答案 : A
选项分析 :
面向对象设计的特征有:类、实例、消息、抽象、封装、继承、组合、多态等。
3.方法通常存储在进程中的哪一区()
A 堆区
B 栈区
C 全局区
D 方法区
正确答案 : D
选项解析:
- 线程私有 :
- 虚拟机栈
栈区用于保存基本数据类型对象和自定义对象的引用,当我们定义一个变量的时候,java就会在栈区为这个变量分配内存空间,当这个变量退出作用域的时候,java会立即释放该变量的内存空间.
每一个线程都有自己的栈区,栈区是线程私有的,其他的栈不能访问. - 程序计数器
- 线程共享
- 堆区 :
堆区用于存放所有new出来的对象和数组,由java的内存回收机制和对象内存分配.堆区的对象与栈区引用往往是成对的. .栈区的对象引用指向堆中new出来的对象或者数组在堆内存的首地址.如果堆区中的对象或者数组,在没有引用指向它的时候,它会变成垃圾,不再被使用.等待jvm的垃圾回收机制一段时间后自动清理.
堆区是所有线程共享的.意味着多个线程的栈区的多个引用可以引用同一个堆区的数组或者对象.
- 方法区(静态区)
一个类的类型信息,通常被存储在方法区。类型信息是指由类加载器在类的加载时从类文件中提取出来的类数据结构等信息。一个类的静态变量也会被保存在方法区。
通常类的类型信息在方法区会保存如下信息:
- 类的基本信息:类的完整名称,类的父类的完整名称,类的修饰符等。
- 该类的常量池:jvm会为每一个类维护一个常量池,用于存储该类需要用到的常量。
- 域信息:即成员变量信息,包括名称,类型,修饰符等。
- 方法信息:方法逻辑、方法名、方法的返回类型、方法参数的数量和类型(有序的)和方法的修饰符。
- 类变量:即静态变量。静态变量只有类相关,与具体实例无关,即使该类无具体实例也可以调用静态变量。
4.不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是()
A 可以三种类所引用:该类自身、与它在同一包中的其他类,在其他包中的该类的子类
B 可以被两种类访问和引用:该类本身、该类的所有子类
C 只能被该类自身所访问和修改
D 只能被同一个包中的类访问
正确答案: C
本题private访问权限控制符.可以被当前类访问和引用,不能被同一个包,子类或者其他包的引用.
题目知识点:
访问控制符
1 | 当前类 | 同一package | 子孙类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
5.Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).
A 11 ,-11
B 11 ,-12
C 12 ,-11
D 12 ,-12
函数解析 :Math.round();
先加0.5,后进行四舍五入
6.关于下列程序段的输出结果,说法正确的是:( )
public class MyClass{
static int i;
public static void main(String argv[]){
System.out.println(i);
}
}
A 有错误,变量i没有初始化。
B null
C 1
D 0
局部变量必须初始化,而成员变量和类变量不需要初始化,系统会赋值为默认值
类型 | 变量 | 初始值 |
---|---|---|
整型 | byte 、int 、short 、long | 0 |
浮点型 | float 、double ) | 0.0 |
布尔型 | boolean ) | false |
字符型 | char | \u0000 |
引用类型 | 例如String 等类型 | null |
组队竞赛
题目 :
解析:
观察题干可以看出分的是三个人一个组.总共分n组.队伍的水平值为第二高的水平值,并要求所有队伍的水平值最大.所以我们很容易想到将水平值最低的放在左侧,水平值最大的放在右侧.
本题主要是得采用贪心算法,将所有选手的水平值进行升序排序,然后从数组右侧每次取值第二大的值.
如 1 2 5 5 8 9 可以取到8 5 总和13的最大水平值
注意事项:
观察输入描述的数据范围 第二行的3n个整数a_i范围为(1 <= a_i <= 109).这个数值范围对于int来说是溢出的.所以我们改用更大的long类型来存储
类型 | 字节 | 范围 |
---|---|---|
int | 4字节 | [-231 , 2 31 -1] [-2147483648,2147483647] |
long | 8字节 | [-263 , 2 63 -1] [-9223372036854775808,9223372036854775807] |
一个字节为8byte位. 四个字节为32byte.所以int类型在java语言中的范围为[-231 , 2 31 -1] [-2147483648,2147483647],数据范围最大就已经 109共有n组 n的最大值为10105.所以只用int不能正确表示可能的最大的结果.
代码:
import java.util.Arrays;
import java.util.Scanner;
public class 组队竞赛 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
long[] ints = new long[3 * n];
for (int i = 0; i < 3 * n; i++) {
ints[i] = in.nextLong();
}
Arrays.sort(ints);
int i = 0, j = 3 * n - 1;
long sum = 0;
while (i < j) {
i++;
j--;
sum += ints[j];
j--;
}
System.out.println(sum);
}
}
}