基础知识点

本文探讨Java中抽象类、接口的区别,以及创建对象的五种方式,包括LinkedList与AbstractSequentialList的关系,AbstractSet和HashSet的继承结构,以及WeakMap的辨析。附带关键概念如抽象方法、final类和yield方法的讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A,抽象类和接口都不可以实例化。

B,final类不能被继承。

C,abstract不能和final共用修饰类。

D,抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类。

注意:abstract是用来修饰类和方法的:

1. 修饰方法:abstract不能和private、final、static共用。

2. 修饰外部类:abstract不能和final、static共用。(外部类的访问修饰符只能是默认和public)

3. 修饰内部类:abstract不能和final共用。(内部类四种访问修饰符都可以修饰)

-------------------------------------------------------------------

Java有5种方式来创建对象:

  1. 使用 new 关键字(最常用): ObjectName obj = new ObjectName();
  2. 使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 
  3. 使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
  4. 使用对象克隆clone()方法: ObjectName obj = obj.clone(); 
  5. 使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }

-------------------------------------------------------------------------------------------------

1.sleep()方法

在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。

sleep()使当前线程进入阻塞状态,在指定时间内不会执行。

2.wait()方法

在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。

当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。

唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。

waite()和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。

3.yield方法 

暂停当前正在执行的线程对象。

yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

yield()只能使同优先级或更高优先级的线程有执行的机会。 

4.join方法

等待该线程终止。

等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。

--------------------------------------------------------------------------------------------------------------

这道题其实只要把java集合框架给看了,就一目了然了。

首先这道题很多人都对接口以及抽象实现类认识混乱。

A.LinkedList是继承自AbstractSequentialList(抽象类,实现了List接口)的,并且实现了List接口。所以A错误。

B.AbstractSet是实现了Set接口的,本身是一个抽象类。继承自AbstractCollection(抽象类,实现了Collection接口)。所以B错误。

C.HashSet是继承自AbstractSet,实现了Set接口。所以C正确。

D.WeakMap不存在于java集合框架的。只有一个叫做WeakHashMap(继承自AbstractMap)。

最后附上java集合框架图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西橙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值