非靜態類中為什不能定義靜態方法
回答方案一:因為靜態方法是可以直接呼叫的,既不建立物件也可以直接呼叫。而非靜態的內部類,它屬於外部類的一個成員類。需要先建立它的例項以後才能呼叫它的方法,當你建立了外部類以後,它的內部類是不存在的,所以你不能在那個物件沒有之前就呼叫它的,就好想,是一個實際存在的東西和一個虛擬存在的東西一樣,實際存在的 東西是不能被虛擬存在的東西所具有的。我可能說的不太明白,你也可以用java的類的定義的要求去推證它的不成立,你會發現那是矛盾的。如果你在非靜態的內部類裡包含靜態的方法。
回答方案二:靜態變數是要佔用記憶體的,在編譯時只要是定義為靜態變量了,系統就會自動分配記憶體給他,而內部類是在宿主類編譯完編譯的,也就是說,必須有宿主類存在後才能有內部類,這也就和編譯時就為靜態變數分配記憶體產生了衝突,因為系統執行:執行宿主類->靜態變數記憶體分配->內部類,而此時內部類的靜態變數先於內部類生成,這顯然是不可能的,所以不能定義靜態變數!
相關推薦
非靜態類中為什不能定義靜態方法
回答方案一:因為靜態方法是可以直接呼叫的,既不建立物件也可以直接呼叫。而非靜態的內部類,它屬於外部類的一個成員類。需要先建立它的例項以後才能呼叫它的方法,當你建立了外部類以後,它的內部類是不存在的,所
轉:python學習——類中為什麽要定義__init__()方法
dict tar tail 綁定 創建 原創 但是 area 似的 學習Python的類,一直不太理解為什麽一定要定義init()方法,現在簡要談一下自己的理解吧。1、不用init()方法定義類定義一個矩形的類,目的是求周長和面積。 1 class Rectangl
C++筆記007:易犯錯誤模型——類中為什麽需要成員函數
計算 成員 area 分享圖片 end src 賦值 內存空間 3.1 先看源碼,在VS2010環境下無法編譯通過,在VS2013環境下可以編譯通過,並且可以運行,只是運行結果並不是我們期待的結果。 最初通過MyCircle類定義對象c1時,為對象分配內存空間,r沒有初
django模型類中,為什不是user_id而不是user?
class UserRole(models.Model): """使用者角色表,一個使用者可以同時擁有多種角色""" user_id = models.ForeignKey('User', on_delete=models.CASCADE, related_name
Python: 類中為什麼要定義__init__()方法
學習並轉自:https://blog.csdn.net/geerniya/article/details/77487941 1. 不用init()方法定義類 定義一個矩形的類,目的是求周長和麵積。 class Rectangle(): def getPeri(
java中為什麽實體類需要實現序列化
color 客戶端訪問 tro 我們 str 操作 bsp div zab 當客戶端訪問某個能開啟會話功能的資源,web服務器就會創建一個HTTPSession對象,每個HTTPSession對象都會占用一定的內存,如果在同一個時間段內訪問的用戶太多,就會消耗大量的服務器
js中為什麽非要alert一下下一步才會執行
syn b- alert 下一步 sync 函數 原因 cnblogs 技術分享 多數原因為界面ajax中動態添加的元素還沒被添加上,就執行了js函數(js函數要調用動態元素),解決辦法:ajax方法中添加 async:false,同步,作用為,在ajax執行完畢後才執行之
指針定義成全局和定義在main中為什麽不一樣?定義在main中執行中止
cor wax tp5 c99 www dna atp aac one 猛節既iq8wy姆司俟http://weibo.com/p/1005056381477612 猛節既iq8wy姆司俟http://weibo.com/p/1005056381477612 乇顏踴3det
強弱類型、動靜態類型語言嚴格定義
比較 知乎 orb int size 動態 stat jump exp 類型系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對“嚴格”的說法。 1. 先定義一些基礎概念 Program Errors trapped er
java中有了基本類型為什麽還要有包裝類型?
包裝類 java java中有了基本類型為什麽還要有包裝類型? 1、Java中基本數據類型與包裝類型有: 基本類型 包裝器類型 父類 boolean Boolean java.lang.Boolean int Integer java.lang.Number char Chara
靜態類中,靜態方法和靜態變數的執行順序按出現執行
package com.study; public class StaticCode { static { i = 33;// i's value is from 0 to 33 g(); } static int i = 1;
錯誤: 在類中找不到 main 方法, 請將 main 方法定義為: public static void main(String[] args) 否則
錯誤: 在類 ZiFUChuan.Pyramid 中找不到 main 方法, 請將 main 方法定義為: public static void main(String[] args) 否則 JavaFX 應用程式類必須擴充套件javafx.application.Ap
靜態成員方法中不能定義靜態變數。
可能從理解上來說確實有點想不通,但是對比C++仔細分析,是有道理的。 大家都知道,C++中是存在全域性變數的。而在java中只有加了public static的變數才可以算是全域性變數。 我們也知道,全域性變數理論上來說(public static),在程式的任何地方都能
Python定義類時為什麽要繼承object類
quest __name__ clas python 廣度 main 存在 推薦 多繼承 繼承 object 類的是新式類,不繼承 object 類的是經典類,在 Python 2.7 裏面新式類和經典類在多繼承方面會有差異: #新式類 class A(object):
靜態類中使用註解注入service
1、注入@Component @Slf4j @Component public class PushUtils { /** * 號碼驗證正則 */ private static final String pattern = "^((17
c#建立靜態類,在其中定義一個泛型方法,實現查詢陣列元素的功能
泛型中不能直接比較,要用where T :IComparable 而且靜態類中不能傳遞出來結果。。只能在靜態類的內部輸出結果。 1:比較和排序的概念 比較:兩個實體類之間按>,=,<進行比較。 排序:在集合類中,對集合類中的實體進行排序。排序基於
類中找不到main方法請將main方法定義為public static void main. 否則 JavaFX 應用程式類必須擴充套件javafx.application.Application
最近在使用elcipise編寫java程式時遇到這樣一個問題:錯誤在類中找不到main方法,請將main方法定義為 public static void main(String[] args)否則 JavaFX 應用程式類必須擴充套件javafx.application.A
spring在靜態類中注入bean的的解釋
@Component public class ModelMapper { @AutoWired private static
錯誤: 在類中找不到 main 方法, 請將 main 方法定義為:public static void main(String[] args)否則 JavaFX 應用程式類必須擴充套件javafx.ap
最近在使用eclipse編寫java程式時遇到這樣一個問題: 錯誤在類中找不到main方法,請將main方法定義為 p
java中為什麽byte的取值範圍是-128到+127
進制數 符號位 為什麽 絕對值 www .html tar 同學 自己 概念:java中用補碼表示二進制數,補碼的最高位是符號位,最高位為“0”表示正數,最高位為“1”表示負數。正數補碼為其本身;負數補碼為其絕對值各位取反加1