当前位置: 技术问答>java相关
关于一个接口的问题
来源: 互联网 发布时间:2015-06-07
本文导语: import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.Timer; public class TimerTest { public static void main(String[] args) { ActionListener listener=new TimePrinter(); Timer t=new Timer(10000,listener); t.sta...
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class TimerTest
{
public static void main(String[] args)
{
ActionListener listener=new TimePrinter();
Timer t=new Timer(10000,listener);
t.start();
JOptionPane.showMessageDialog(null,"quit program");
System.exit(0);
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Date now=new Date();
System.out.println("at the tone,the time is"+now);
Toolkit.getDefaultToolkit().beep();
}
}
}
这是按照书上的例子做的,但编译时出现了如下问题.这跟静态变量又有什么关系呢?
E:JAVAtestTimerTest.java:11: non-static variable this cannot be referenced from a static context
ActionListener listener=new TimePrinter();
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class TimerTest
{
public static void main(String[] args)
{
ActionListener listener=new TimePrinter();
Timer t=new Timer(10000,listener);
t.start();
JOptionPane.showMessageDialog(null,"quit program");
System.exit(0);
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Date now=new Date();
System.out.println("at the tone,the time is"+now);
Toolkit.getDefaultToolkit().beep();
}
}
}
这是按照书上的例子做的,但编译时出现了如下问题.这跟静态变量又有什么关系呢?
E:JAVAtestTimerTest.java:11: non-static variable this cannot be referenced from a static context
ActionListener listener=new TimePrinter();
|
把TimePrinter类声明为:
static class TimePrinter implements ActionListener{
....
}
或者干脆把TimePrinter变为一个独立的类:
class TimePrinter implements ActionListener{
....
}
public class TimerTest{
....
}
两种方法可解决问题
static class TimePrinter implements ActionListener{
....
}
或者干脆把TimePrinter变为一个独立的类:
class TimePrinter implements ActionListener{
....
}
public class TimerTest{
....
}
两种方法可解决问题
|
这里存在一个创建的顺序问题,在同一个类内部,静态块是最先被创建的!这个时候TimePrinter还不存在!
|
原来程序改为:为什么要这样:因为main的问题。
main只是java程序的入口点,不属于任何一个类的方法。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.event.*;
public class TimerTest
{
public static void main(String[] args)
{
TimerTest t=new TimerTest();
JOptionPane.showMessageDialog(null,"quit program");
System.exit(0);
}
public TimerTest()
{
ActionListener listener=new TimePrinter();
Timer t=new Timer(10000,listener);
t.start();
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Date now=new Date();
System.out.println("at the tone,the time is"+now);
Toolkit.getDefaultToolkit().beep();
}
}
}
main只是java程序的入口点,不属于任何一个类的方法。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.event.*;
public class TimerTest
{
public static void main(String[] args)
{
TimerTest t=new TimerTest();
JOptionPane.showMessageDialog(null,"quit program");
System.exit(0);
}
public TimerTest()
{
ActionListener listener=new TimePrinter();
Timer t=new Timer(10000,listener);
t.start();
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Date now=new Date();
System.out.println("at the tone,the time is"+now);
Toolkit.getDefaultToolkit().beep();
}
}
}