2016년 7월 25일 월요일

01day java practice

1.움직이는 버튼 만들기

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;

public class Test2 extends JFrame {

    JButton btnNewButton;
    
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test2 frame = new Test2();
                    frame.setVisible(true);                
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test2() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        btnNewButton = new JButton("New button");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                int x = (int)(Math.random()*300);
                int y = (int)(Math.random()*200);
                System.out.println(x+"//"+y);
                Timer timer = new Timer(true);
                timer.scheduleAtFixedRate(new TimerTask() {
                    //execute this every 10 ms
                    @Override
                    public void run() {
                        if(btnNewButton.getX() == x & btnNewButton.getY() == y) {
                            this.cancel();
                        }else if(btnNewButton.getX()<x){
                            btnNewButton.setLocation(btnNewButton.getX() + 1, btnNewButton.getY());
                        }else if(btnNewButton.getX()>x){
                            btnNewButton.setLocation(btnNewButton.getX() - 1, btnNewButton.getY());
                        }else if(btnNewButton.getY()<y){
                            btnNewButton.setLocation(btnNewButton.getX(), btnNewButton.getY()+1);
                        }else if(btnNewButton.getY()>y){
                            btnNewButton.setLocation(btnNewButton.getX(), btnNewButton.getY()-1);
                        }
                    }
                }, 0, 1);
            }
        });
        btnNewButton.setBounds(100, 100, 113, 36);
        contentPane.add(btnNewButton);
    }
}


2.인스턴스 생성될 때 마다 시리얼넘버 부여
public class Test1 {
    static int count;
    int serialNo;
    {
        count++;
        serialNo=count;
    }
    
    public static void main(String[] args) {
        Test1 t1 = new Test1();
        Test1 t2 = new Test1();
        Test1 t3 = new Test1();
        Test1 t4 = new Test1();
        System.out.println(t1.serialNo);
        System.out.println(t2.serialNo);
        System.out.println(t3.serialNo);
        System.out.println(t4.serialNo);
    }
}


3. 변수 초기화 순서
public class Test1 {
 static int cv =1;  //스태틱 변수   ----1 번째: 클래스가 메모리에 로딩될 떄 수행됨
 int iv =1;         //인스턴스 변수 ----3 번째: 인스턴스를 생성할 때 수행됨
 
 static{ cv=2;}     //스태틱 블럭   ----2 번째: 클래스가 메모리에 로딩될 떄 수행됨
 { iv=2;}           //인스턴스 블럭 ----4 번째: 인스턴스를 생성할 때 수행됨
 
 Test1(){ iv=3; }   //생성자        ----5 번째: 인스턴스를 생성할 때 수행됨
 
 public static void main(String[] args) {
  System.out.println(cv);  //스태틱 변수는 인스턴스 생성하지 않아도 프린트 할 수 있음
  System.out.println(new Test1().iv); //인스턴스 변수는 인스턴스를 생성해야 프린트 가능함
 }
}


4
//참조변수가 참조하는 방식
class Test0{
 static int cv =1;      //스태틱 변수
 int iv =1;             //인스턴스 변수
 static{ cv=2;}         //스태틱 블럭 
 { iv=2;}               //인스턴스 블럭 
 
 Test0(){ iv=3; }      //생성자 
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2");
 }
 void method3(){}
}

class Test0son extends Test0{
 static int cv =100;      //스태틱 변수
 int iv =100;             //인스턴스 변수
 static{ cv=200;}         //스태틱 블럭 
 { iv=200;}               //인스턴스 블럭 
 
 Test0son(){ iv=300; }      //생성자 
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1 son");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2 son");
 }
 void method3(){
  System.out.println("super cv= "+super.cv);
  System.out.println("super iv= "+super.iv);
  System.out.print("super method1= ");
  super.method1();
  System.out.print("super method2= ");
  super.method2();
 }
}

public class Test1 {
 
 public static void main(String[] args) {
  Test0.method1();
  Test0son.method1();
  new Test0().method2();
  new Test0son().method2();
  System.out.println(Test0.cv);
  System.out.println(Test0son.cv);
  System.out.println(new Test0().iv);
  System.out.println(new Test0son().iv);
  System.out.println();
  
  Test0 ts0_ts0 = new Test0();
  Test0 ts0_ts0son = new Test0son(); //참조변수를 부모클래스로 설정
  ts0_ts0.method1();
  ts0_ts0son.method1();   //스태틱 메서드는 참조변수를 따름
  ts0_ts0.method2();
  ts0_ts0son.method2();   //인스턴스 메서드는 ★★★★★인스턴스를 따름
  System.out.println(ts0_ts0.cv);
  System.out.println(ts0_ts0son.cv); //스태틱 변수는 참조변수를 따름
  System.out.println(ts0_ts0.iv);
  System.out.println(ts0_ts0son.iv);  //인스턴스 변수는 ★★★★★참조변수를 따름
  System.out.println();
  
  ts0_ts0son.method3();  //부모의 인스턴스 메서드를 부를 수 있음(super 사용)
      //인스턴스 메서드가 부모를 override하지만 super 통해 부를 수 있음
 }
}


5
//형변환으로 숨겨진 변수 불러오기
class Test0{
 static int cv =1;      //스태틱 변수
 int iv =3;             //인스턴스 변수
 
 static void method1(){     //스태틱 메서드
  System.out.println("static method1");
 }
 void method2(){      //인스턴스 메서드
  System.out.println("instance method2");
 }
}

class Test0son extends Test0{  //상속
 static int cv =100;      
 int iv =300;             
 
 static void method1(){     
  System.out.println("static method1 son");
 }
 void method2(){      
  System.out.println("instance method2 son");
 }
}

public class Exam01 {
 
 public static void main(String[] args) {
  Test0son ts1 = new Test0son();
  ts1.method1();
  ((Test0)ts1).method1();  //형변환으로 부모의 스태틱 메서드 부름
  ts1.method2();
  ((Test0)ts1).method2();  //오버라이드 된 부모의 인스턴스메서드를 불러올 수 없음★★★★
  System.out.println(ts1.iv);
  System.out.println(((Test0)ts1).iv); //형변환으로 부모의 인스턴스 변수 부름
  System.out.println(ts1.cv);
  System.out.println(((Test0)ts1).cv); //형변환으로 부모의 스태틱 변수 부름

  Test0 ts0 = new Test0son();
  ts0.method1();
  ((Test0son)ts0).method1();  //형변환을 통해 자식의 스태틱 메서드를 호출 할 수 있음
  ts0.method2();
  ((Test0)ts0).method2();     //오버라이드 된 부모의 인스턴스메서드를 불러올 수 없음
  ((Test0son)ts0).method2();   
  
  System.out.println(ts0.cv);
  System.out.println( ((Test0son)ts0).cv); //형변환으로 자식의 스태틱 변수 부름
  System.out.println(ts0.iv);
  System.out.println( ((Test0son)ts0).iv); //형변환으로 자식의 인스턴스 변수 부름
  System.out.println();
  
 }
}


댓글 없음:

댓글 쓰기