java靜態方法this
靜態方法是:類名.方法名()
一般的方法是:對象的引用.方法名()【這種方法也可以調用靜態方法,但是非常不推薦】
靜態方法是跟實例無關的方法,只跟類有關,在類沒有實例的時候就可以使用其靜態方法。靜態方法不能操作非靜態變數,因為非靜態變數是跟實例相關的,每個實例的非靜態變數都不同,而類的靜態變數是所有實例共有的。this是跟實例相關的,它就是當前調用該方法的實例的引用,這跟靜態方法矛盾。而一般的方法可以操作靜態變數,雖然允許這樣做,但是不推薦。一般的方法必須由類的實例的引用調用,在沒有實例的時候是沒法調用的。好好體會一下吧
② java靜態方法
靜態方法不可以,但是如果main函數不是靜態函數就可以引用this和super。如果main函數是靜態函數,方法內不能使用super,也不可以使用static。
1。this和super是針對一個類實例,創建一塊內存區域,當條用方法時會獲得實例的數據,而static沒有這樣的實例,所以static方法里不可以有this和super。
2。static方法里不可以有static是因為,要是你在一個類里申明了static方法,裡面的static變數是可以申明成類static成員的,為了規范代碼,Java規定不可以這樣。
③ this可用於靜態方法中,對嗎java
不可以,this指向所在類的當前對象,靜態方法是歸屬於類本身,沒有對象與其關聯,所以不能在靜態方法中使用this
④ java中靜態方法中為什麼不能使用this,super和直接調用非靜態方法
靜態方法是在類裡面的,是由類直接調用的.
this指的是調用該方法的對象.
熟讀上面兩點,然後看;例子
calss A{
static void add(){
this.go();
}
void go(){}
}
如果用A.add(); 我們說add裡面的this指的是調用當前add方法的對象,
可是add是由類A直接調用的,不是由對象調用的,所以這里的this是誰?
由於可能有這種情況發生,所以不能在static中用this.
應為你不知道在用的時候,到底有沒有創建對象.
super指的是父類對象,同理.你不能保證靜態方法被調用時,有創建對象,如果沒創建,this,super有指代誰?
⑤ Java中,static方法就是沒有this的方法,怎麼理解這句話
你好。
我的理解如下。首先你要知道static變數的初始化時間
這是一個子類創建的時候初始化過程:
這是之前寫的博客:
網頁鏈接
結論是: 父類static ->子類static->父類普通賦值語句->子類普通賦值語句->父類構造->子類構造
也就是說。一個類的static方法會先於類的任何一個對象之前初始化。
而this是當前對象。所以static初始化之後。this才會被創建。顯然static方法是沒有this的(它初始化的時候還沒有this對象)
希望對你有所幫助。如果有錯誤歡迎指出。
⑥ java:在java中為什麼靜態變數沒有this引用
1. this是指當前對象自己。
當在一個類中要明確指出使用對象自己的的變數或函數時就應該加上this引用。如下面這個例子中:
public class Hello {
String s = "Hello";
public Hello(String s)
{
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
Hello x=new Hello("HelloWorld!");
}
}
運行結果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在這個例子中,構造函數Hello中,參數s與類Hello的變數s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行列印結果; 第二行是對成員變數s的列印;第三行是先對成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!
2. 把this作為參數傳遞
當你要把自己作為參數傳遞給別的對象時,也可以用this。如:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
運行結果:
Hello from A!
Hello from B!
在這個例子中,對象A的構造函數中,用new B(this)把對象A自己作為參數傳遞給了對象B的構造函數。
3. 注意匿名類和內部類中的中的this。
有時候,我們會用到一些內部類和匿名類,如事件處理。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變數的話,則應該加上外部類的類名。如下面這個例子:
public class A {
int i = 1;
public A() {
Thread thread = new Thread() {
public void run() {
for(;;) {
A.this.run();
try {
sleep(1000);
} catch(InterruptedException ie) { }
}
}
}; //注意這里有;
thread.start();
}
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
在上面這個例子中, thread 是一個匿名類對象,在它的定義中,它的 run 函數里用到了外部類的 run 函數。這時由於函數同名,直接調用就不行了。這時有兩種辦法,一種就是把外部的 run 函數換一個名字,但這種辦法對於一個開發到中途的應用來說是不可取的。那麼就可以用這個例子中的辦法用外部類的類名加上 this 引用來說明要調用的是外部類的方法 run。
4。在構造函數中,通過this可以調用同一class中別的構造函數,如
public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;調用另一個構造函數的語句必須在最起始的位置
this(petals);
//this(ss);會產生錯誤,因為在一個構造函數中只能調用一個構造函數
}
}
值得注意的是:
1:在構造調用另一個構造函數,調用動作必須置於最起始的位置。
2:不能在構造函數以外的任何函數內調用構造函數。
3:在一個構造函數內只能調用一個構造函數。
⑦ java中this的用法
1. this指當前對象。
當在一個類中要明確指出使用對象變數或函數時加上this引用。如下面例子中:
public class Hello {
String s = "Hello";
public Hello(String s){
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
Hello x=new Hello("HelloWorld!");
}
}
運行結果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在這個例子中,構造函數Hello中,參數s與類Hello的變數s同名,這時直接對s進行操作則是對參數s進行操作。對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行列印結果;
第二行是對成員變數s的列印;第三行是先對成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!
2. this作為參數傳遞
當你要把自己作為參數傳遞給別的對象時如:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
運行結果:
Hello from A!
Hello from B!
在這個例子中,對象A的構造函數中,new
B(this)把對象A作為參數傳遞給了對象B的構造函數。
⑧ Java static方法里為什麼不能使用this關鍵字
java中的static是類區域,換句話說就是所有該類的所有實例共享的區域,而this指的是當前的類實例索引。在類區域中是無法確定某個類實例的。
eg。
class A
{
private static Stirng Static = "123";
}
這個字元串Static所有A的實例都可以訪問到。
反過來,
class A
{
public static void fun()
{
this // 這里不能使用 因為 static區域內不能確定是某個特定的A的實例
}
}
⑨ 在java面向對象中this能調動靜態方法嗎
肯定能調用了。你首先要清楚,對象是可以調用方法的(不管是靜態的還是非靜態的)。其次,this指的是當前對象,既然是對象,當然能調用了。只是java中不建議用對象來調用靜態方法,推薦用類。
最簡單就是做個測試。
class Demo{
public Demo(){
this.test(); //這里不就調用了。自己編譯一下,看看報不報錯。(可能會有警告,警告可以忽略,它一樣可以運行)
}
private static void test(){
}
}
⑩ java "靜態的方法不能存取「this」所引用的對象。"這句話怎麼理解
靜態方法也叫類方法。在類被載入的時候被初始化,可以通過類名和對象名進行調用,在類內部可以直接調用。僅該方法不需要實例化對象,即可調用。
在靜態的方法中不能以任何形式引用this,因為this默認的對象引用,靜態方法被調用時,this所引用的對象並沒有產生,this無所指向.