2021年09月14日 java1

考点1:局部变量没有默认值,必须初始化

下列代码中的错误原因是()

1
2
3
4
5
6
7
8
(1)   public class Test
(2) {
(3) public static void main(String [] args)
(4) {
(5) int i;
(6) i+=1;
(7) }
(8) }
  • A 非法的表达式 i+=1
  • B 找不到符号i
  • C 类不应为public
  • D 尚未初始化变量i
显示答案/隐藏答案正确答案: D

成员变量的基本数据类型可以不初始化,有默认值
局部变量的基本数据类型必须初始化,没有默认值

考点2:String常量

针对下面的代码块,哪个equal为true:()

1
2
3
String s1 = "xiaopeng" ;
String s2 = "xiaopeng" ;
String s3 =new String (s1);
  • A s1 == s2
  • B s1 = s2
  • C s2 == s3
  • D 都不正确
显示答案/隐藏答案正确答案: A

string是final修饰的,会将创建的变量放入字符串常量池,当再创建同样的字符串时,发现常量池中有则直接使用

考点3:成员变量有默认初始值,可以不初始化

当你编译和运行下面的代码时,会出现下面选项中的哪种情况?

1
2
3
4
5
6
public class Pvf{
static boolean Paddy;
public static void main(String args[]){
System.out.println(Paddy);
}
}
  • A 编译时错误
  • B 编译通过并输出结果false
  • C 编译通过并输出结果true
  • D 编译通过并输出结果null
显示答案/隐藏答案正确答案: B

类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。
boolean类型默认值是false。

考点4:HashMap添加元素时key相同新value覆盖旧value

以下java程序代码,执行后的结果是()

1
2
3
4
java.util.HashMap map=new java.util.HashMap();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());
  • A 0
  • B null
  • C 1
  • D 2
显示答案/隐藏答案正确答案: C

HashMap可以插入null的key或value,插入的时候,检查是否已经存在相同的key,如果不存在,则直接插入,如果存在,则用新的value替换旧的value,在本题中,第一条put语句,会将key/value对插入HashMap,而第二条put,因为已经存在一个key为name的项,所以会用新的value替换旧的vaue,因此,两条put之后,HashMap中只有一个key/value键值对。那就是(name,jack)。所以,size为1.

考点5:访问控制符

类A1和类A2在同一包中,类A2有个protected的方法testA2,类A1不是类A2的子类(或子类的子类),类A1可以访问类A2的方法testA2。( )

  • A 正确
  • B 错误
显示答案/隐藏答案正确答案: A

考点6:TreeSet的subSet方法

以下程序的运行结果是:( )

1
2
3
4
5
6
7
8
9
10
TreeSet<Integer> set = new TreeSet<Integer>();
TreeSet<Integer> subSet = new TreeSet<Integer>();
for(int i=606;i<613;i++){
if(i%2==0){
set.add(i);
}
}
subSet = (TreeSet)set.subSet(608,true,611,true);
set.add(629);
System.out.println(set+" "+subSet);
  • A 编译失败
  • B 发生运行时异常
  • C [606, 608, 610, 612, 629] [608, 610]
  • D [606, 608, 610, 612, 629] [608, 610,629]
显示答案/隐藏答案正确答案: C

subset方法是求set的范围内的子集,两个true是表示是否包含端点(608和611),故subSet的值为[608,610]
subset的两个boo是是否是边界值

考点7:Object方法

下面有关java object默认的基本方法,说法错误的是?

  • A equals(Object obj) 指示某个其他对象是否与此对象“相等”
  • B copy() 创建并返回此对象的一个副本
  • C wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
  • D toString() 返回该对象的字符串表示
显示答案/隐藏答案正确答案: B

Object中没有copy方法
Object的其中clone()创建并返回此对象的一个副本。没有copy()这个方法。
Object默认9方法:getClass(),hashCode(), equals(), clone(), toString(),notify(), notifyAll()wait(), finalize()。

方法 描述
protected Object clone() Creates and returns a copy of this object.
boolean equals(Object obj) Indicates whether some other object is “equal to” this one.
protected void finalize() Deprecated. The finalization mechanism is inherently problematic.
Class<?> getClass() Returns the runtime class of this Object.
int hashCode() Returns a hash code value for the object.
void notify() Wakes up a single thread that is waiting on this object’s monitor.
void notifyAll() Wakes up all threads that are waiting on this object’s monitor.
String toString() Returns a string representation of the object.
void wait() Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
void wait(long timeoutMillis) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
void wait(long timeoutMillis, int nanos) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

考点8:ASCII码和ANSI码

关于ASCII码和ANSI码,以下说法不正确的是()?

  • A 标准ASCII只使用7个bit
  • B 在简体中文的Windows系统中,ANSI就是GB2312
  • C ASCII码是ANSI码的子集
  • D ASCII码都是可打印字符
显示答案/隐藏答案正确答案: D

A、标准ASCII只使用7个bit,扩展的ASCII使用8个bit。
B、ANSI通常使用 0x000x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x800xFFFF来编码,即扩展的ASCII编码。不同 ANSI 编码之间互不兼容。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。
C、ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,即ASCII码
D、ASCII码包含一些特殊空字符

ASCII表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。

我看下面一些评论对ANSI编码解释都有些许错误,现在解释一下ANSI编码:不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode编码之间最大也最明显的区别。

考点9:Java标识符规则

下列可作为java语言标识符的是()

  • A a1
  • B $1
  • C _1
  • D 11
显示答案/隐藏答案正确答案: ABC

Java标识符由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。

  1. 标识符的组成元素是字母(a-zA-Z),数字(0~9),下划线(_)和美元符号($)。
  2. 标识符不能以数字开头。
  3. java的标识符是严格区分大小写的。
  4. 标识符的长度可以是任意的。
  5. 关键字以及引用类型常量null、boolean常量true、false不能用于自定义的标识符。

考点10:+=会自动类型转换(自动装箱)=不会自动类型转换

以下那些代码段能正确执行

  • A
    1
    2
    3
    4
    5
    6
    public static void main(String args[]) {
    byte a = 3;
    byte b = 2;
    b = a + b;
    System.out.println(b);
    }
  • B
    1
    2
    3
    4
    5
    6
    public static void main(String args[]) {
    byte a = 127;
    byte b = 126;
    b = a + b;
    System.out.println(b);
    }
  • C
    1
    2
    3
    4
    5
    6
    public static void main(String args[]) {
    byte a = 3;
    byte b = 2;
    a+=b;
    System.out.println(b);
    }
  • D
    1
    2
    3
    4
    5
    6
    public static void main(String args[]) {
    byte a = 127;
    byte b = 127;
    a+=b;
    System.out.println(b);
    }
    显示答案/隐藏答案正确答案: CD

char、byte、short相加时会自动转换为int类型,所以:
A、B选项需要加强转(byte)
C、D选项中的+=会自动进行强转,相当于加了(byte);
D选项中的越界问题,由于byte的最大值与最小值是首尾相接的(不知道这样描述准不准确,byte范围是-128-127,也就是说byte b1=(byte)128;System.out.println(b1);打印出来的实际是-128),由于加了强转,所以不会受到越界的影响。
有错误之处欢迎指出!