亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有兩個疑惑:

有兩個疑惑:

手掌心 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 關注
  • 392 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號