1. 程式人生 > >靜態方法中問什麼不能使用this、super關鍵字。

靜態方法中問什麼不能使用this、super關鍵字。

  • 感性方面

  首先區分類和物件,物件是類的一個例項。也就是物件會有多個而類只有一個。

  1. 靜態方法是類中擁有的。
  2. this代表當前物件。
  3. super代表當前物件的父類物件。

可以看出來靜態方法只有一個,而this、super是多個。

  • 理性方面

記憶體載入順序是不同的,記憶體先載入類再此同時會將靜態方法載入。而此時物件沒有產生,所有會有空指標。

public class A {


private String a;


public A() {
System.out.println("建立物件");
}

public String getA() {
return a;
}


public void setA(String a) {
this.a = a;
}

public void print() {
System.out.println("列印方法執行");
}
}
public class ServerController extends A{
	public static void main(String[] args) {
		A a = new A();
		a.print();
	}
	public static void p() {
		super.print();
	}
}

如上述程式碼,載入ServerController類時main、p方法被載入。而A的類已經被載入了,但是A的物件沒有被建立。所以super.print();會報錯。

相關推薦

靜態方法什麼不能使用thissuper關鍵字

感性方面  首先區分類和物件,物件是類的一個例項。也就是物件會有多個而類只有一個。靜態方法是類中擁有的。this代表當前物件。super代表當前物件的父類物件。可以看出來靜態方法只有一個,而this、super是多個。理性方面記憶體載入順序是不同的,記憶體先載入類再此同時會將

Java static修飾的方法不能使用thissuper關鍵字

   首先,Java中可以使用static宣告屬性或方法,如果現在希望一個屬性被所有物件所共同擁有,則可以將其宣告為static型別。宣告static型別的屬性或方法之後此屬性或方法也稱為類方法,可

Java-thissuper關鍵字(認真分析)

習慣 類成員 發生 nbsp spa author ++ jvm 類繼承 一、this關鍵字   this關鍵字只能用於方法體內,當創建一個對象時候,JVM就會為這個對象分配一個資深的指針,就是this。因此this只能在非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能使

細節3:staticfinalthissuper關鍵字

teacher 副本 super 構造 基本數據 靜態 dom 輸出結果 new 1、static static關鍵字修飾的變量或者函數是屬於整個類的,調用方式,類名.變量/方法 靜態函數中,只能調用靜態的變量或者函數 靜態的變量只會運行一次 public

finalstaticthissuper 關鍵字總結

final 關鍵字 final關鍵字主要用在三個地方:變數、方法、類。 對於一個final變數,如果是基本資料型別的變數,則其數值一旦在初始化之後便不能更改;如果是引用型別的變數,則在對其初始化之後

為什麼靜態成員靜態方法(static)不能用thissuper關鍵字

因為this代表的是呼叫這個函式的物件的引用,而靜態方法是屬於類的,不屬於物件,靜態方法成功載入後,物件還不一定存在 在問題之前先講super的用法:1.super的用法跟this類似,this代表對本類物件的引用,指向本類已經建立的物件;而super代表對父類物件的引用,指

java靜態方法為什麼不能使用thissuper和直接呼叫非靜態方法

這個要從java的記憶體機制去分析,首先當你New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對

java的構造方法thissuper的用法

重寫 需要 註意事項 進行 private class print 沒有 系統 1、構造方法 定義:與類同名沒有返回值的方法稱為構造方法; public class test1 {private String name;private int age;public test

Java的繼承方法覆蓋(方法重寫)super關鍵字

Java繼承 繼承 繼承是面向物件的一個重要的特性,它體現了類與類之間的一些邏輯關係,目的是為了程式碼複用(以減少開發成本)。當多個類之間有一些共同的屬性(成員變數)和功能(成員方法)時,我們可以將他們共同的部分拿出來作為一個父類定義實現這些共性,這些類中可以不再定義這

靜態方法為什麼不能使用thissuper關鍵字

首先要理解this和super是什麼? this是對當前物件的引用,super是指父類物件的引用。 其次靜態成員優先於物件載入到記憶體中,它是隨著類的載入而載入的。 如果靜態方法中有this和super那麼當靜態方法被載入到記憶體中,其中的this和super也被載入到記憶

java面試題2--方法重寫與過載thissuper關鍵字

1:方法重寫和方法過載的區別?方法過載能改變返回值型別嗎? 方法重寫:      在子類中,出現和父類中一模一樣的方法宣告的現象。 方法過載:      同一個類中,出現的方法名相同

Javasuper關鍵字super關鍵字this關鍵字的區別

1 super關鍵字 1.1 super用於方法 1.1.1 用於構造方法   當子類呼叫父類無參構造時,super可寫可不寫,表示呼叫父類的無參構造!   當子類呼叫父類有參構造時,super(引數列表)必須要寫,要告訴編輯器呼叫的是哪個有參構造!  

javathissuper關鍵字的作用

etag 傳遞 記錄 ont this spa 根據 普通 void emmmmmm也真的是好久沒有寫過java了,因為項目需要, 最近又必須重新拾起來了,雖然好多東西也都忘得差不多了.... 然後發現 竟然把super和this傻傻分不清.... 開個帖子記錄一下: 一、

12_Java面向對象_第12天(構造方法thissuper)_講義

ride 學習 代碼執行 客戶端軟件 抽象 getname 程序 修飾 所有 今日內容介紹 1、構造方法 2、this關鍵字 3、super關鍵字 4、綜合案例 01構造方法引入 A:構造方法的引入 在開發中經常需要在創建對象的同時明確對象的屬性值, 比如員工

java的關鍵字 thissuperfinalstatic

使用 實參 原來 創建過程 列表 clas 必須 attribute ceshi 1、this關鍵字(1)成員變量和局部變量同名 可以在成員變量名前面加上this.來區別成員變量和局部變量 package com.oracle.demo03; public class

靜態方法只允許訪問靜態數據,那麽,如何在靜態方法訪問類的實例成員(即沒有附加static關鍵字的字段或方法)?

static關鍵字 實例成員 clas 靜態 image eth sys 靜態方法 http package test.two; public class jingtaihanshu { int x = 3; static int y

4.Java_關鍵字thissuperstaticfinal(終結器)與基本資料型別轉換

一、關鍵字this 1.表示呼叫本類屬性:在類中訪問類的屬性,一定要加上this關鍵字。 2.表示呼叫本類方法:         (1)呼叫普通方法:this.方法名(引數);   當有類的繼承關係時,表示本類方法一定要加上th

Javathisstatic關鍵字的記憶體圖解

  Java中的關鍵字有很多,abstract  default  goto*  null  switch  boolean  do  if  package  nchronzed  break&nb

Javathisstatic關鍵字的內存圖解

數據區 prot 屬性 volatile stat strong 發展 char ons Java中的關鍵字有很多,abstract default goto* null switch boolean do if package nchronzed

Javathissuper關鍵字

一.this   Java關鍵字this只能用於方法方法體內。當一個物件建立後,Java虛擬機器(JVM)就會給這個物件分配一個引用自身的指標,這個指標的名字就是this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的程式碼塊中絕對不能出現this,這在“Java關鍵字s