为了账号安全,请及时绑定邮箱和手机立即绑定

有两个疑惑:

有两个疑惑:

手掌心 2022-10-12 13:11:46
1. Dimension和Toolkit都是类,为什么这段代码可以不用new?2. 为什么写成Dimension di=Toolkit.getScreenSize();这样提示不能从静态上下文中引用非静态方法,但是加上getDefaultToolkit()这个方法其实也是静态类型的啊?
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

不需要用new是因为getScreenSize实例方法内部已经根据屏幕的尺寸new好了一个Dimension类的对象,只需要返回这个对象就行了。

前面已经提到了getScreenSize是一个实例方法,更准确地讲它是类Toolkit的一个实例方法,所以必须通过一个Toolkit类的对象才能调用这个方法。
而getDefaultToolkit是类Toolkit的一个静态方法(所以通过类名.方法名的形式调用),这个方法会返回一个类Toolkit的对象,再通过这个返回的对象就可以调用getScreenSize了。

所以,不能通过Toolkit.getScreenSize来调用getScreenSize方法,因为它不是静态方法需要通过一个类Toolkit的实例来调用,而静态方法getDefaultToolkit就可以返回一个类Toolkit的实例。

查看完整回答
反对 回复 2022-10-16
?
绝地无双

TA贡献1946条经验 获得超4个赞

首先,Dimension di=Toolkit.getDefaultToolkit().getScreenSize();这个引用方法是正确的引用方法。

你的疑问有三个.

第一,为什么可以不用new,因为在得到一个实体对象除了new外,也可以通过方法返回一个实体对象。在上面那条语句里就是getScreenSize()这个方法,至于getScreenSize()方法里是怎么创建Dimension 对象的,你不需要关心,这就是封装的一种。


第二,为什么Toolkit.getScreenSize();不能直接引用,因为这个方法不是静态方法

这个方法必须使用一个实体类去引用,而getDefaultToolkit()方法才是一个静态方法,他可以通过类名+方法名直接引用,作用就是返回一个Toolkit的实体类。

之后就可以用这个实体类去调用非静态方法了。分解一下代码你就能看明白了。

第三,为什么一个抽象类可以直接被引用。

抽象对象和接口是可以被引用和实例化的,只是不能通过new自己来进行实例化,首先这点要弄清楚。

抽象类和接口,可以通过方法,或者new他的非抽象子类来进行实例化,之后使用方法就和普通类是一样的了。

而调用静态方法只需要类名或者接口名就可以了,在java8里还增加了default关键字来定义默认方法体,接口也可以有自己的方法体了。


查看完整回答
反对 回复 2022-10-16
  • 2 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信