java错题记录(一)

文章介绍了Java中String对象的特性,包括常量池中的拼接与堆中的拼接的区别,以及字符串比较的逻辑。另外,文章还讨论了类的静态块和构造块的执行顺序,强调了静态域的初始化。接着,提到了Java基本类型的默认值和取值范围,以及字符型的ASCII码对应值。最后,文章涵盖了Java中的多重继承实现方式和集合类的关系,如LinkedList、HashSet与WeakHashMap等。
摘要由CSDN通过智能技术生成

一、观察下类代码,输出正确的是

String s1 = "coder";     
String s2 = "coder";     
String s3 = "coder" + s2;     
String s4 = "coder" + "coder";     
String s5 = s1 + s2;            
System.out.println(s3 == s4); 
System.out.println(s3 == s5);    
System.out.println(s4 == "codercoder");

A  false;false; true;

B  false;true; true;

C  false;false; false;

D  true;false; true;

正确答案:A

该题总结:

本题考察的是String的特性

常量与常量的拼接结果在常量池中,且常量中不会存在内容相同的常量。

常量与变量拼接、变量与变量拼接,结果在堆中

 

二、以下代码的输出结果是?

public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

A  静态块 构造块 构造块 构造块

B  构造块 静态块 构造块 构造块

C  构造块 构造块 静态块 构造块

D  构造块 构造块 构造块 静态块

正确答案:C

该题总结:

1.java中是静态先执行,而不是静态代码块。

静态域包括静态属性、静态代码块和静态方法,其中需要初始化的是静态变量和静态代码块,他们的执行顺序有他们声明时的顺序决定的(从上到下依次执行)

2、静态代码块与分静态代码块:

  •  静态代码块
    • 可以有输出语句
    • 随着类的加载而执行,且只执行一次
    • 可以对类的属性、类的声明进行初始化操作
    • 不可以对非静态的属性进行初始化操作
    • 不可以调非静态的属性及方法
    • 可以定义多个静态代码块,执行顺序从上到下依次执行
    • 静态代码块的执行要先于非静态代码块,且先于构造器执行
  • 非静态代码块
    • 可以有输出语句
    • 随着对象的创建而执行,每次创建对象的时候都会执行一次
    • 可以对类的属性、类的声明进行初始化操作
    • 可以调用非静态的属性及方法
    • 可以调用静态属性及方法
    • 可以定义多个非静态代码块,执行顺序从上到下依次执行
    • 非静态代码块的执行顺序要先于构造器的执行

3、程序中成员变量赋值的执行顺序:

  • 1.声明成员变量默认初始化
  • 2.显示初始化、多个初始化块依次被执行(同级别的按声明先后顺序执行)
  • 3.构造器再对成员变量进行初始化操作
  • 4.通过“对象.属性”或“对象.方法”的方式,对成员变量进行赋值

三、下面有关java基本类型的默认值和取值范围,说法错误的是?

A 字节型的类型默认值是0,取值范围是-2^7—2^7-1

B boolean类型默认值是false,取值范围是true\false

C 字符型类型默认是0,取值范围是-2^15 —2^15-1

D long类型默认是0,取值范围是-2^63—2^63-1

 

正确答案:C

本题总结:

基本类型默认值取值范围
byte0-2^7——2^7-1
short0-2^15——2^15-1
int0-2^31——2^31-1
long0L-2^63——2^63-1
float0.0f-2^31——2^31-1
double0.0d-2^63——2^63-1
char'\u0000'0——2^16-1
booleanfalsetrue、false

四、多重继承的概念在Java中实现是通过如下哪些?()

I. 扩展两个或多个类

II. 扩展一个类并实现一个或多个接口。

III. 实现两个或更多接口。

A 只有I &II

B 只有II & III

C 只有III

D 都是

正确答案:B

 本题总结:

java只支持单继承。

实现多重继承共有三种方式:多层继承、实现一个或多个接口、内部类(通过内部类去继承而实现多继承 )

五、执行语句“int a= ’ 2 ’ ”后,a的值是( )

A 2

B 50

C 49

D 0

正确答案:B

本题总结:

int a='2'与int a=2不同。

int a='2'中的数字2被单引号引起来,表示的是字符2,而字符2所对应的ASCII码是50,因此这种情况下,a的值是50

int a = 2中的数字2表示了数字本身,这种情况下,a的值是2

六、下列关于容器集合类的说法正确的是?

A LinkedList继承自List

B AbstractSet继承自Set

C HashSet继承自AbstractSet

D WeakMap继承自HashMap

正确答案:C

本题总结:

A:LinkedList是实现了AbstractSequentialList(抽象类,实现了List接口)的,并且实现了List接口

B:AbstractSet是实现了Set接口,本身是一个抽象类。继承自AbstractCollection(抽象类,实现了Collection接口)

C:HashSet是继承自AbstractSet,实现了Set接口

D:WeakMap不属于java集合框架,只有一个WeakHashMap(继承自AbstractMap)

 

 

作为一个AI语言模,我无法编写完整的Java应用程序,但我可以给你一些指导,希望能帮到你。 首先,你需要确定你的错题本App需要包含哪些功能。以下是一个简单的功能列表: 1. 用户登录和注册 2. 添加题目和答案 3. 查看错题列表 4. 删除错题 5. 修改错题 6. 退出登录 接下来,你需要设计数据库表结构。你可以使用MySQL或其他数据库管理系统来存储数据。以下是一个简单的数据库表结构: 1. 用户表:包含用户ID、用户名和密码 2. 题目表:包含题目ID、题目、答案和用户ID 3. 错题表:包含错题ID、题目ID和用户ID 然后,你需要编写Java代码来实现上述功能。以下是一个简单的代码示例: 1. 用户登录和注册: ``` // 登录 public boolean login(String username, String password) { // 根据用户名和密码查询用户表 // 如果查询到了用户记录,返回true,否则返回false } // 注册 public boolean register(String username, String password) { // 插入新用户记录到用户表 // 如果插入成功,返回true,否则返回false } ``` 2. 添加题目和答案: ``` public boolean addQuestion(String question, String answer, int userId) { // 插入新题目记录到题目表 // 如果插入成功,返回true,否则返回false } ``` 3. 查看错题列表: ``` public List<Question> getWrongQuestions(int userId) { // 根据用户ID查询错题表和题目表,返回错题列表 } ``` 4. 删除错题: ``` public boolean deleteWrongQuestion(int wrongQuestionId) { // 根据错题ID删除错题记录 // 如果删除成功,返回true,否则返回false } ``` 5. 修改错题: ``` public boolean updateWrongQuestion(int wrongQuestionId, String question, String answer) { // 根据错题ID更新题目表中的题目和答案 // 如果更新成功,返回true,否则返回false } ``` 6. 退出登录: ``` public void logout() { // 清除用户登录状态 } ``` 最后,你需要将这些代码整合到一个Java应用程序中,并使用Java Swing或其他UI框架来实现用户界面。你还需要编写一些单元测试来确保你的代码能够正确地处理各种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值