import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class Ticker extends Thread{
  private Button t=new Button("toggle");
  private TextField tf=new TextField(10);
  //å¼€å…ÏxŽ§åˆ¶countçš„å˜åŒ?/span>
  private runFlag=true;
  private int count=0;
  class Stop implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      runFlag=!runFlag;
    }
  }
  public Ticker(Container c){
    t.addActionListener(new Stop());
    //Panel容器
    Panel p=new Panel();
    p.add(t);
    p.add(tf);
    c.add(p);
  }
  @Override
  public void run(){
    while(true){
      try(
        Thread.currentThread().sleep(200);
      }catch(InterruptedException e){
        e.printStackTrace();
      }
      if(runFlag)
        tf.setText(Integer.toString(++count));
    }
  }
}
public class Counter extends Applet{
  private Button start=new Button("Start");
  private boolean started=false;
  private int size=0;
  private Ticker[] ts;
  @Override
  public void init(){
    start.addActionListener(new Start());
    add(start);
    ts=new Ticker[size];
    for(int i=0;i<size;i++){
      ts[i]=new Ticker(Counter.this);
    }
  }
  class Start implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      if(!started){
        started=true;
        for(int i=0;i<size;i++){
          ts[i].start();
        }
      }
    }
  }
  public static void main(String[] args){
    Counter c=new Counter();
    Frame frame=new Frame("½E‹åºç‰?);
    frame.addWindowListener(
      new WindowAdapter(){
        @Override
        public void windowClosing(WindowEvent e){
          System.exit(0);
        }
      }
    );
    frame.setSize(300,c.size*50);
    frame.add(c,BorderLayout.CENTER);
    c.init();
    c.start();
    frame.setVisible(true);
  }
}
/**--注æ„--**/
以上代ç 都是在文本编辑器ä¸å†™çš„,å¯èƒ½ä¼šæœ‰äº›è®¸¾U°æ¼
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class StaticTest{
  //陿€å…¨å±€å˜é‡
  static int count=0;
  public StaticTest(){
    ++count;
    System.out.println("count:"+count);
  }
}
public class Test extends Applet{
  private Button btn=new Button("创å¾");
  private TextField tf=new TextField(10);
  //匿å内部¾c…R€€ã€€
  class Create implements ActionListener{
    public void actionPerformed(ActionEvent e){
      //æ¯æ¬¡å®žä¾‹åŒ–对象时åQŒcountçš„å€ég¼šä¸€ç›´ç¯åŠ ï¼Œè€Œä¸æ˜¯é‡æ–îC»Ž0å¼€å§?/span>
      StaticTest st=new StaticTest();
    }  
  }
  @Override
  public void init(){
    add(btn);
    //æ·ÕdŠ ç‚¹å‡»äº‹äšg
    btn.addActionListener(new Create());
    add(tf);
  }
  public static void main(String[] args){
    Test t=new Test();
    Frame frame=new Frame();
    //¾l™çª—壿·»åŠ å…³é—事ä»?/span>
    frame.addWindowListener(
      new ActionAdapter(){
        public void windowClosing(WindowEvent e){
          System.exit(0);
        }
      }
    );
    frame.add(t,BoderLayout.CENTER);
    frame.setSize(300,200);
    //åˆå§‹åŒ–窗å£å†…控äšg
    t.init();
    t.start();
    //昄¡¤º½E‹åºç‰‡çª—å?/span>
    frame.setVisible(true);
  }
}
//多线½E?/p>
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Test extends Applet{
  private Button start=new Button("开�#8220;),
          stop=new Button("åœæ¢");
  private TextField tf=new TextField(10);
  private runFlag=true;
  private static int count=0;
  private ThreadTest tt=null;
  //ž®†ThreadTestä½œäØ“ä¸€ä¸ªåŒ¿å内部类
  private ThreadTest extends Thread{
    //åœ¨æž„é€ ThreadTest½CÞZ¾‹å¯¹è±¡çš„æ—¶å€™ï¼Œå¯åЍ¾U¿ç¨‹
    public ThreadTest(){
      start();
    }
    @Override
    public void run(){
      while(true){
        try{
          Thread.currentThread().sleep(200);
        }catch(InterruptedException e){
          e.printStackTrace();
        }
        if(runFlag){
          tf.setText(Integer.toString(++count));
        }
      }
    }
  }
  class Start implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      if(tt==null)
        tt=new ThreadTest();
    }
  }
  class Stop implements ActionListener{
     @Override
     public void actionPerformed(ActionEvent e){
        if(tt!=null)
          runFlag=!runFlag;
     }
  }
  @Override
  public void init(){
    add(stop);
    stop.addActionListener(new Stop());
    add(start);
    start.addActionListener(new Start());
    add(tf);
  }
  public static void main(String[] args){
    Frame frame=new Frame("½E‹åºç‰?);
    Test t=new Test();
    frame.addWindowListener(
      new WindowAdapter(){
        @Override
        public void windowClosing(WindwoEvent e){
          System.exit(0);
        }
      }
    );
    frame.add(t,BorderLayout.CENTER);
    frame.setSize(300,200);
    t.init();
    t.start();
    frame.setVisible(true);
  }
}
//在主¾cÖM¸åˆåƈ¾U¿ç¨‹
è¦å°†¾U¿ç¨‹ä¸Žä¸»¾cÕdˆòqÓž¼Œå¿…须实现Runnable接å£åQŒé‡å†™run()æ–ÒŽ³•åQŒä½†˜q™ä¸Žä»ŽThread¾l§æ‰¿çš„ç±»˜q˜æ˜¯æœ‰å¾ˆå¤§çš„差别。若è¦å¼€å¯ä¸€ä¸ªæ–°çš„线½E‹ï¼Œåªéœ€ž®†ä¸»¾cÖM½œä¸ÞZ¸€ä¸ªå‚æ•îC¼ å…¥å³å¯ï¼ˆ¾cÕdž‹ä¸Šæº¯åQˆRunnableåQ‰ï¼‰
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
//实现Runnable接å£
public class Test extends Applet implements Runnable{
  private Button start=new Button("Start"),
          stop=new Button("Stop");
  private TextField tf=new TextField(10);
  private Thread th=null;
  private boolean runFlag=true;
  private static int count=0;
  //é‡å†™runæ–ÒŽ³•
  @Override
  public void run(){
    while(true){
      try{
        th.sleep(200);
      }catch(InterruptedException e){
        e.printStackTrace();
      }
      if(runFlag)
        tf.setText(Integer.toString(++count));
    }
  }
  class Start implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      if(th==null){
        //ä¼ å…¥å½“å‰ä¸Šä¸‹æ–‡å¯¹è±¡ï¼Œå³ä¸Šæº¯ç±»åž‹Runnable(å› äØ“å®žçŽ°äº†æ¤æŽ¥å£)
        th=new Thread(Test.this);
        th.start();
      }
    }
  }
  class Stop implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      runFlag=!runFlag;
    }
  }
  @Override
  public void init(){
    add(start);
    start.addActionListener(new Start());
    add(stop);
    stop.addActionListener(new Stop());
    add(tf);
  }
  public static void main(String[] args){
    Frame frame=new Frame("½E‹åºç‰?);
    Test t=new Test();
    frame.add(t,BorderLayout.CENTER);
    frame.addWindowListener(
       new WindowAdapter(){
         @Override
          public void windowClosing(WindwoEvent e){
            System.exit(0);
          }
        }
    );
    frame.setSize(300,200);
    t.init();
    t.start();
    frame.setVisible(true);
  }
}
//基础知识åQšåœ¨åŒ¿å内部¾cÖM¸ä¸èƒ½å£°æ˜Žé™æ€å˜é‡?/span>
/**--注æ„--**/
以上代ç 都是在文本编辑器ä¸å†™çš„,å¯èƒ½ä¼šæœ‰äº›è®¸¾U°æ¼
其实所有的java对象都å¯ä»¥å…·å¤‡å…‹éš†èƒ½åŠ›ï¼Œåªæ˜¯å› äØ“åœ¨åŸº¼‹€¾c»Objectä¸è¢«è®‘Ö®šæˆäº†ä¸€ä¸ªä¿ç•™æ–¹æ³•(protected),è¦æƒ³çœŸæ£æ‹¥æœ‰å…‹éš†çš„能力,ž®±éœ€è¦å®žçްCloneable接å£åQŒé‡å†™cloneæ–ÒŽ³•。通过克隆æ–ÒŽ³•得到的对象得到的是一个本地的副本ã€?/p>
ä»£ç ½CÞZ¾‹åQ?/p>
class User implements Cloneable{
  int age;
  public User(int age){
    //用this关键å—ä¸è‡³äºŽ¾cÀLˆå‘˜å˜é‡ä¸Žå½¢å‚æ·äh·†
    this.age=age;
  }
  //˜q™é‡Œå¯åŠ @Override也å¯ä¸åŠ åQŒåŠ äº†ä¼šè‡ªåŠ¨æç¤ºæ˜¯å¦æ£ç¡®
  @Override
  public Object clone{
    Object o=null;
    try{
      o=super.clone();
    }catch(CloneNotSupportedException e){
      e.printStackTrace();
    }
  }
  public String toString(){
    return Integer.toString(this.age);
  }
}
public class Test{
  //(1)mainä¸åªèƒ½è°ƒç”¨é™æ€æ–¹æ³•(2åQ‰ä¿®æ”¹çš„æ˜¯ä¼ 入的User对象
  static User g(User u){
    u.age++;
    return u;
  }
  //在本åœîCñ”生了一个User对象副本
  static User f(User u){
    u=(User)u.clone();
    u.age++;
    return u;
  }
  public static void main(String[] args){
    User u=new User(23);
    User u2=g(u);
    if(u==u2)
      System.out.println("u==u2");
    else
      System.out.println("u!=u2");
    //下é¢ä¼šè‡ªåŠ¨è°ƒç”¨User对象的toString()æ–ÒŽ³•
    System.out.println("u.age:"+u);
    System.out.println("u2.age:"+u2);
    User u3=new User(23);
    User u4=f(u3);
    if(u3==u4)
      System.out.println("u3==u4");
    else
      System.out.println("u3!=u4");
    System.out.println("u3.age:"+u3);
    System.out.println("u4.age:"+u4);
  }
}
//基本知识åQšè¦æƒŒ™®©å¯¹è±¡å…ähœ‰cloneæ–ÒŽ³•åQŒåªè¦å®žçްCloneable接å£åQŒé‡å†™cloneæ–ÒŽ³•å›_¯åQŒä½†æ˜¯æœ‰ä¸¤ä¸ªéœ€è¦æ³¨æ„的点:åQ?åQ‰è°ƒç”¨super.clone()æ–ÒŽ³•åQ?åQ‰å®šä¹‰äØ“public公共æ–ÒŽ³•
/**--注æ„--**/
以上代ç 都是在文本编辑器ä¸å†™çš„,å¯èƒ½ä¼šæœ‰äº›è®¸¾U°æ¼