1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 SimpleGui1B gui=new SimpleGui1B(); 4 gui.go(); //靜態方法不是不能調用非靜態方法嗎?? 5 6 } 7 public void go(){ 8 JFrame frame=new JFrame(); 9 button=new JButton("click me"); 10 11 button.addActionListener(this); 12 13 }
比如:像上面的例子1中,main方法是個靜態方法,java中不是明文規定在靜態方法中不能調用非靜態方法嗎?這里為什么不報錯呢?
牛人的回答: 靜態方法中的調用是指不能直接調用,像這樣的: public static void main(String args[]) { idea(); 但是你這里是對象來調用的,就是: Example e = new Example(); e.idea(); new Example()已實例話,調用的是非靜態方法 認真看書,耐心琢磨,問csdn作用不大。 偶,我知道了,是因為我new 了一個對象,然后對象給封裝好了。
1 照樓主的意思。。。我們永遠都不可能用到非靜態方法了。。。 2 因為程序要執行肯定要從main()開始,main()是靜態方法,所以不管他調用的是什么函數只能是靜態的,比如他調用一個A()函數,那他也必須是靜態的,那么A()里面調用的B.D.E.F.G.....N都只能是靜態的,所以我們根本不需要非靜態方法,因為他永遠都不會用到。。。 3 那么java設計者這群SB竟然設計出非靜態方法這種根本用不到的東西,簡直一群腦殘、二百五。。。!!! 4 LZ。。。你是這意思嗎?。。。 5 6 1樓說的好啊。。。不能調用指的是在同一個類中,不能直接引用函數名來調用方法 7 public class Yun{ 8 void a(){ 9 //我是非靜態方法 10 } 11 static void b(){ 12 //我是靜態方法 13 } 14 public static void main(String[] args){ 15 a();//不能直接調用非靜態方法 16 b();//可以直接調用靜態方法 17 new Yun().a();//可以 18 new Yun().b();//當然不可以 19 } 20 }
1 你這不叫靜態方法調用非靜態方法,你這調用的是實例化方法,就是先new一個對象,再用這個對象去調用對象中的實例化方法,到哪里這樣調用都沒問題(只要方法是public的)。
1 new Example().idea();已經創建對象了,這種寫法是縮寫 2 Example.idea(); 這樣就不行了。
例子2:
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 JFrame frame=new JFrame(); 4 JButton button=new JButton("click me"); 5 6 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 7 8 frame.getContentPane().add(button); 9 frame.setSize(300,300); 10 11 frame.setVisible(true); 12 13 button.addActionListener(this); //按說button不是也屬於實例對象。
這個時候就開始報錯了呢:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot use this in a static context。
1 書上說this只能調用實例變量、實例方法和構造方法,不能調用局部變量。求高手指教。 2 3 我書上說this不能調用類變量和類方法,我試驗了 覺得這個說法錯誤。只能說如果有static修飾的靜態方法無法用this調出任何東西 比方main方法public static void main(String [] args){}這個是無法調用的 4 如果是這樣public void main(String [] args){ }沒有static的話 類變量和類方法都能調用 5 6 budui.................................................
要看this的作用區域:
this直接使用的話,只能指代主類。
button.this, 此時特指button這個實例對象。