java中靜態方法和非靜態方法調用的一點小困擾,已解決。


 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這個實例對象。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM