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这个实例对象。

原文地址:https://www.cnblogs.com/meihao1989/p/3182317.html