23.01.12(Java)

MH S·2023년 1월 12일

Java

목록 보기
5/16

인터페이스

  • 인터페이스는 대부분 추상메소드를 가짐.
package ch08;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends MFrame implements ActionListener{
	Button btn;
	boolean flag = false;
	
	public MyFrame() {
		btn = new Button("Button");
		add(btn,BorderLayout.SOUTH);
		setBackground(Color.ORANGE);
		//actionPerformed 연결 메소드
		//내 자신이 addActionListener 타입이므로 this 가 가능
		//버튼을 클릭을 하면 ActionEvent 객체가 내부적으로 생성됨
		btn.addActionListener(this);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if(flag)
			setBackground(Color.ORANGE);
		else
			setBackground(Color.PINK);
		flag=!flag;
	}
	
	public static void main(String[] args) {
		new MyFrame();
	}
}
package ch08;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame2 extends MFrame{
	Button btn;
	boolean flag = false;
	
	public MyFrame2() {
		btn = new Button("Button2");
		add(btn,BorderLayout.SOUTH);
		setBackground(Color.GREEN);
		MyAction ma = new MyAction();
		btn.addActionListener(ma);
	}
	
	class MyAction implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if(flag)
				setBackground(Color.GREEN);
			else
				setBackground(Color.YELLOW);
			flag=!flag;
		}
	}

	
	public static void main(String[] args) {
		new MyFrame2();
	}
}
package ch08;


public class interfaceEx6 implements Runnable{
	String name;
	
	public interfaceEx6(String name) {
		this.name = name;
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i+ " " + name);
			try {
				Thread.sleep(500);
			} catch (Exception e) {}
			
		}
	}
	public static void main(String[] args) {
		interfaceEx6 a= new interfaceEx6("첫번째");
		interfaceEx6 b= new interfaceEx6("두번째");
		new Thread(a).start();//결론적으로 run 메소드 호출
		new Thread(b).start();
	}
}

내부클래스

  1. 클래스 안에 선언
  2. 클래스 안에 선언이지만 static 클래스로 선언(활용 : 1%))
  3. 메소드안에 클래스 선언(활용 : 10%)
  4. 메소드 안에 선언과 동시에 생성하는 익명클래스(활용 : 100%)
package ch09;
/*내부(중첩)클래스
 * 1.클래스 안에 선언
 * 2.클래스안에 선언이지만 static 클래스 선언(활용도: 1%)
 * 3.메소드안에 클래스 선언(활용도 : 10%)
 * 4.메소드 안에 선언을 하고 선언과 동시에 생성하는 익명클래스(활용도 : 100%)
 */

interface MyInter{
	void prn();
}

class Outer1{
	class Inner1{
		
	}
	
	static class Inner2{
		
	}
	
	//메소드안에 메소드는 선언 불가
	void prn() {
		class Inner3{
			
		}
		
		new MyInter() {		
			@Override
			public void prn() {
			}
		};
	}
	
}//--class Inner1

public class InnerEx1 {
	public static void main(String[] args) {
		
	}
}
package ch09;

class Outer2{
	int a = 22;
	
	void p() {
		System.out.println("a = " + a);
		//System.out.println("a + b = " + (a+b));
		//내부 클래스는 외부 클래스 내에서만 일반적으로 사용하고
		//상당히 밀접한 관계가 있는 기능의 클래스로 선언을 해야된다.
	}
	
	class Inner2{
		int b = 23;
		void p1() {
			p();
			System.out.println("a + b = " + (a+b));
		}
	}//--Inner2
}

public class InnerEx2 {
	public static void main(String[] args) {
		//일반적으로 내부 클래스는 다른 클래스에서 생성하고 사용하는 것은 거의 없음.
		//제3의 클래스에 사용법
		Outer2 out = new Outer2();
		Outer2.Inner2 in = out.new Inner2();
		in.p1();
	}

}
  • 익명 클래스 예시
package ch09;

interface MyInter1{
	void prn();
}

abstract class MyAbst1{
	abstract void prn();
}

class A implements MyInter{
	@Override
	public void prn() {
		System.out.println("일반적인 구현 방법");
	}
}

class B extends MyAbst1{
	@Override
	void prn() {
		System.out.println("일반적인 구현 방법2");
	}
}
public class AnonymousEx1 {
	public static void main(String[] args) {
		A a = new A();
		a.prn();
		B b = new B();
		b.prn();
		
		//클래스화를 시켜 다른곳에서 사용할 목적이 아닌 여기에서만 only 사용
		new MyInter1() {	
			@Override
			public void prn() {
				System.out.println("익명클래스 구현 방법");
			}
		}.prn();
		
		new MyAbst1() {
			
			@Override
			void prn() {
				System.out.println("익명클래스 구현 방법2");
			}
		}.prn();
	}
}
package ch09;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends MFrame {
	Button btn;
	public MyFrame() {
		add(btn = new Button("Exit"), BorderLayout.SOUTH);
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
	}
	
	public static void main(String[] args) {
		new MyFrame();
	}
}




예외처리

package ch10;

public class ExceptionEx1 {
	public static void main(String[] args) {
		try {//예외가 일어날 가능성이 있는 코드가 들어가는 영역
			int a = 10;
			int b = 0;
			System.out.println("a + b " + (a+b));
			System.out.println("a - b " + (a-b));
			System.out.println("a * b " + (a*b));
			//System.out.println("a / b " + (a/b));
		} catch (Exception e) {// 예외가 일어나면 실행되는 영역
			System.out.println("0으로 나누면 안되요");
			//System.out.println(e.getMessage());
			
		}
		System.out.println("성공");
	}
}
package ch10;

public class ExceptionEx2 {
	public static void main(String[] args) {
		try {
			int arr[] = new int[3];
			arr[0] = 10;
			arr[1] = 10;
			arr[2] = 10;
			arr[3] = 10;
			System.out.println("실행 되나요?");
		} catch (Exception e) {
			System.out.println("배열 예외입니다");
		} finally { //예외
			System.out.println("finally~");
		}
	}
}
package ch10;

import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionEx3 {
	public static void main(String[] args) {
		Scanner s = null;
		try {
			int a, b;
			s= new Scanner(System.in);
			System.out.print("첫번째 숫자 : ");
			a = s.nextInt();
			System.out.print("두번째 숫지 : ");
			b = s.nextInt();
			System.out.println(a+"/"+b+"="+(a/b));
			//다중 catch 일 때는 하위 Exception 이 위에 옴.
			//}catch(Exception e){
		} catch (ArithmeticException e) {
			System.out.println("0으로 입력하면 안돼요.");
		} catch (InputMismatchException e) {
			System.out.println("숫자만 입력을 해야 합니다.");
		} finally {
			s.close();
		}
		
	}
}
  • 다중 상속일 경우 하위 Exception 이 위에 온다.
package ch10;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ExceptionEx4 {
	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("ch10/test.txt");
			int a;
			while ((a = fr.read()) != -1) {
				System.out.print((char)a);
			}
			//FileNotfoundException 상위 클래스가 IOException
		} catch (FileNotFoundException e) {
			e.printStackTrace();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  • 텍스트 파일 저장 후 읽는 법 (예외처리)

0개의 댓글