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