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