2021年09月14日 java1
考点1:局部变量没有默认值,必须初始化
下列代码中的错误原因是()
1 | (1) public class Test |
- A 非法的表达式 i+=1
- B 找不到符号i
- C 类不应为public
- D 尚未初始化变量i
显示答案/隐藏答案
正确答案: D成员变量的基本数据类型可以不初始化,有默认值
局部变量的基本数据类型必须初始化,没有默认值
考点2:String常量
针对下面的代码块,哪个equal为true:()
1 | String s1 = "xiaopeng" ; |
- A s1 == s2
- B s1 = s2
- C s2 == s3
- D 都不正确
显示答案/隐藏答案
正确答案: Astring是final修饰的,会将创建的变量放入字符串常量池,当再创建同样的字符串时,发现常量池中有则直接使用
考点3:成员变量有默认初始值,可以不初始化
当你编译和运行下面的代码时,会出现下面选项中的哪种情况?
1 | public class Pvf{ |
- A 编译时错误
- B 编译通过并输出结果false
- C 编译通过并输出结果true
- D 编译通过并输出结果null
显示答案/隐藏答案
正确答案: B类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。
boolean类型默认值是false。
考点4:HashMap添加元素时key相同新value覆盖旧value
以下java程序代码,执行后的结果是()
1 | java.util.HashMap map=new java.util.HashMap(); |
- A 0
- B null
- C 1
- D 2
显示答案/隐藏答案
正确答案: CHashMap可以插入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 | TreeSet<Integer> set = new TreeSet<Integer>(); |
- A 编译失败
- B 发生运行时异常
- C [606, 608, 610, 612, 629] [608, 610]
- D [606, 608, 610, 612, 629] [608, 610,629]
显示答案/隐藏答案
正确答案: Csubset方法是求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() 返回该对象的字符串表示
显示答案/隐藏答案
正确答案: BObject中没有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码都是可打印字符
显示答案/隐藏答案
正确答案: DA、标准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
显示答案/隐藏答案
正确答案: ABCJava标识符由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。
- 标识符的组成元素是字母(
a-z
,A-Z
),数字(0~9
),下划线(_
)和美元符号($
)。 - 标识符不能以数字开头。
- java的标识符是严格区分大小写的。
- 标识符的长度可以是任意的。
- 关键字以及引用类型常量null、boolean常量true、false不能用于自定义的标识符。
考点10:+=会自动类型转换(自动装箱)=不会自动类型转换
以下那些代码段能正确执行
- A
1
2
3
4
5
6public static void main(String args[]) {
byte a = 3;
byte b = 2;
b = a + b;
System.out.println(b);
} - B
1
2
3
4
5
6public static void main(String args[]) {
byte a = 127;
byte b = 126;
b = a + b;
System.out.println(b);
} - C
1
2
3
4
5
6public static void main(String args[]) {
byte a = 3;
byte b = 2;
a+=b;
System.out.println(b);
} - D
1
2
3
4
5
6public 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),由于加了强转,所以不会受到越界的影响。
有错误之处欢迎指出!