첫 번째 자바 프로그램

Download Report

Transcript 첫 번째 자바 프로그램

첫 번째 자바 프로그램
/*
* Main.java
*/
package javaapplication1;
/**
*
* @author Administrator1
*/
public class Main {
/** 생성자 */
public Main() {
}
/**
* 메서드 정의
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Hello World!");
}
}
자료의 표현
public class Data01 {
public static void main(String[] args) {
//(1) 정수 : 소수점이 없는 수
System.out.println(1);
//(2) 실수 : 소수점이 있는 수
System.out.println(1.5);
//(3) 문자 : 단일 따옴표로 묶어줌
System.out.println('a');
//(4) 논리값 : true, false
System.out.println(true);
//(1) long 형 상수 : 숫자 끝에 L 혹은 l을 붙임
System.out.println(1L);
//(2) float 형 상수 : 숫자 끝에 F 혹은 f룰 붙임
System.out.println(1.5f);
//(3) 문자열 : 이중 따옴표로 묶어줌
System.out.println("abc");
}
}
변수 선언
/*
* Data03.java
*/
package section02;
public class Data03 {
public Data03() {
}
public static void main(String[] args) {
int a;//변수 선언하고
a=1;
System.out.println(a);
a=2;
System.out.println(a);
}
}
자료형 변환 및 문자열 처리
public class Data05 {
public static void main(String[] args) {
byte a=1;
short b=128;
int c=32768;
b=a;
//암시적인 형 변환
System.out.println(b);
b=(short)c;
// 명시적인 형변환
//오버플로우가 발생되어 엉뚱한 값 출력
System.out.println(b);
public class Data07 {
public static void main(String[] args) {
char x;
x='A';
System.out.printf(" %c -> %d \n", x, (int)x);
x='0';
System.out.printf(" %c -> %d \n", x, (int)x);
x=0;
//0은 NULL 문자를 의미
System.out.printf(" %c -> %d \n", x, (int)x);
x='a';
System.out.printf(" %c -> %d \n", x, (int)x);
}
}
}
}
public class Data06 {
public static void main(String[] args) {
double a=23.7;
float b=23.7f;
System.out.println(a);
System.out.println(b);
}
}
public class Data08 {
public static void main(String[] args) {
String y;
y="AB";
System.out.println(y);
y="A";
System.out.println(y);
}
}
연산자 – 산술 연산자
class Opr01 {
public static void main(String[] args) {
int a=10, b=4, c;
c=a+b;
System.out.println(a + " + " + b + " = " + c);
c=a-b;
System.out.println(a + " - " + b + " = " + c);
c=a*b;
System.out.println(a + " * " + b + " = " + c);
c=a/b;
System.out.println(a + " / " + b + " = " + c);
c=a%b;
System.out.println(a + " % " + b + " = " + c);
}
}
public class Opr01_02 {
public static void main(String[] args) {
String a="Apple";
String b="Banana";
String c=a+b;
System.out.println(c);
String str="결과값 : ";
int n=10;
System.out.println(str+n);
System.out.println("결과값 : "+n);
}
}
연산자 – 관계, 조건 선택, 대입 연산자
public class Opr02 {
public static void main(String[] args) {
int a=10, b=4, c;
boolean test;
test=a>b;
System.out.println(a + " > " + b + " = " + test);
test=a<b;
System.out.println(a + " < " + b + " = " + test);
System.out.println(a+b > a-b);
}
}
public class Opr03 {
public static void main(String[] args) {
int a=5, b=10;
int max; //최대값을 저장할 변수 선언
max = a>b ? a : b;
System.out.println(" max = "+ max);
}
}
class Opr04 //대입 연산자와 증감 연산자
{
public static void main(String[] args)
{
int a=29;
String s="몰라";
s = (a>=10 && a <=19) ? "10대" : "10대 아님";
System.out.println(a + " => " + s);
}
}
연산자 – 증감 연산자
class Opr07
{
public static void main(String[] args)
{
int a=10, b=10;
++a;
//선행처리
System.out.println(a);
b++;
//후행처리
System.out.println(b);
}
}
class Opr08 //대입 연산자와 증감 연산자
{
public static void main(String[] args)
{
int a=10, b=10;
System.out.println(++a);
System.out.println(a);
System.out.println(b++);
System.out.println(b);
a=b=10;
int c;
c=++a;
System.out.println(c + " => " + a);
c=b++;
System.out.println(c + " => " + b);
}
}
연산자 – 비트 연산자
class Opr09 //비트 단위 논리 연산자
{
public static void main(String[] args)
{
int a=12;
int b=20;
int c;
c = a & b; //비트 단위 값이 둘 다 1일 때만 1
System.out.println(a + " & " + b + " -> " + c);
class Opr10 {
public static void main(String[] args) {
byte x = 15;
System.out.println("x << 2 : " + (x << 2) );
System.out.println("x >> 2 : " + (x >> 2) );
}
}
c = a | b; //비트 단위 값이 둘 다 0일대만 0
System.out.println(a + " | " + b + " -> " + c);
c = a ^ b; //비트 단위 값이 두 값이 다르면 1 같으면 0
System.out.println(a + " ^ " + b + " -> " + c);
c = ~a; //비트 단위 값이 1이면 0으로 0이면 1로
System.out.println("~" + a + " -> " + c);
}
}
제어문 - if
class If01 {
public static void main(String[] args) {
int num;
num = -5;
if(num < 0)
num = -num;
System.out.println(" absolute num = "+ num);
num = 5;
if(num < 0)
num = -num;
System.out.println(" absolute num = "+ num);
}
}
class If02 {
public static void main(String[] args) {
int num=Integer.parseInt(args[0]);//num=40;
if(num%2==1)
System.out.println(num + "는 홀수입니다.");
else
System.out.println(num + "는 짝수입니다.");
}
}
제어문 - if
class If03 {
public static void main(String[] args) {
int a=Integer.parseInt(args[0]);
int b=Integer.parseInt(args[1]);
int max, min;
if(a > b){
max=a;
min=b;
}
else{
max=b;
min=a;
}
System.out.println("최대 값은 " + max + "입니다.");
System.out.println("최소 값은 " + min + "입니다.");
}
class If04 {
}
public static void main(String[] args) {
int a=Integer.parseInt(args[0]);
if(a>0)
//a가 0보다 크면
System.out.println(a+"는 양수입니다.");
else if(a<0) //a가 0보다 작으면
System.out.println(a+"는 음수입니다.");
else
//a가 0보다 크지도 작지도 않으면
System.out.println("0 입니다.");
}
}
제어문 – switch case
class Switch01{
public static void main(String[] args){
int a = Integer.parseInt(args[0]);
System.out.println(" => " + a);
switch(a){
case 9: System.out.println( " A ");
case 8: System.out.println( " B ");
case 7: System.out.println( " C ");
case 6: System.out.println( " D ");
default : System.out.println( " F ");
}
}
}
class Switch04 {
public static void main(String[] args) {
String str = args[0];
char ch;
ch=str.charAt(0); //='b';
switch(ch) {
case 'A' :
case 'a' : System.out.println("America"); break;
case 'B' :
case 'b' : System.out.println("Britain"); break;
case 'C' :
case 'c' : System.out.println("Canada"); break;
case 'J' :
case 'j' : System.out.println("Japan"); break;
case 'K' :
case 'k' : System.out.println("Korea"); break;
}
}
반복문 - for
class For01
{
public static void main(String[] args)
{
int i;
for(i=1; i<=10; i++)
System.out.println("Hello World!");
}
}
class For02{
public static void main(String[] args) {
int i;
for(i=1; i<=4; i++)
System.out.println(i );
class For04 {
public static void main(String[] args) {
int i; //제어변수 선언
int a=2; //출력할 단을 저장하는 변수 선언, 2단 출력
System.out.println("<<-----" + a + "단----->> " );
for(i=1; i<=9; i++)
System.out.println(a + " * " + i + " = " + (a * i) );
}
}
class For06{
public static void main(String[] args) {
int i;
int total = 0;
for(i=1; i<=5; i++)
total +=i;
System.out.println("1 ~ " + (i-1) + " = " + total);
System.out.println("--->> " + i );
}
}
}
}
반복문 - while
class While01
{
public static void main(String[] args)
{
int i;
for(i=1; i<=5; i++)
System.out.print(" " +i);
System.out.println("\n-------------------------");
i=1;
//초기식
while(i<=5){ //조건식
System.out.print(" " +i); //반복 처리할 문장
i++;
//증감식
}
}
}
제어문 - while
class While03{
public static void main(String[] args) {
int i=0;
while(i++<=4)
System.out.print( i + ", " );
System.out.println("\n--------------------- >>" );
i=1;
do
System.out.print( i + ", " );
while(i++<=4); //do while 문은 반드시 세미콜론으로 끝난다.
System.out.println("\n--------------------- >>" );
i=0;
while(i++<=4) ; //NULL 문으로 인식함
System.out.print( i + ", " );
System.out.println("\n--------------------- >>" );
for(i=1; i<=4; i++) ; //NULL 문으로 인식함
System.out.print( i + ", " );
System.out.println("\n-------------------------");
}
}
For 활용
class E01 {
public static void main(String[] args) {
int n;
//제어변수 선언
int odd_tot, even_tot;
//홀수의 합과 짝수의 합을
누적할 변수
for(odd_tot=0 , n=1; n<=10; n+=2) //홀수를 구함
odd_tot += n;
//구해진 홀수를 누적
for(even_tot=0 , n=2; n<=10; n+=2) //짝수를 구함
even_tot += n;
//구해진 짝수를 누적
System.out.println(" odd_tot(1+3+5+7+9) = " + odd_tot);
//홀수의 합을 출력
System.out.println(" even_tot(2+4+6+8+10) = " +
even_tot); //짝수의 합을 출력
}
}
For, if 활용
class E01_01 {
public static void main(String[] args) {
int n;
//제어변수 선언
int odd_tot, even_tot;
//홀수의 합과 짝수의 합을 누적할 변수
for(odd_tot=0, even_tot=0 , n=1; n<=10; n++) //제어변수 n은 1부터 10사이의 자연수
if(n%2==1)
//n을 2로 나누어서 나머지가 1이면 홀수이므로
odd_tot += n;
//홀수의 합을 누적하는 변수에 더하고
else
//n을 2로 나누어서 나머지가 1이 아니고 0이면 짝수이므로
even_tot += n;
//짝수의 합을 누적하는 변수에 더한다.
System.out.println(" odd_tot(1+3+5+7+9) = " + odd_tot); //홀수의 합을 출력
System.out.println(" even_tot(2+4+6+8+10) = " + even_tot); //짝수의 합을 출력
}
}
다중 for 활용
public class E04 {
public static void main(String[] args) {
int a;
//바깥쪽 for문의 제어변수 선언
int b;
//안쪽 for문의 제어변수 선언
for(a=1; a<=5; a++){
//5줄 반복한다.
for(b=1; b<=5; b++){ //한 줄에 스타(*)를 5번 출력하기 위한 반복문
System.out.print("* "); //안쪽 for문에 의해 반복되는 문장
} //안쪽 for문의 끝
System.out.println();
//줄 바꾸기 위한 문장
}//바깥쪽 for문의 끝
}//main 함수의 끝
}
public class E05 {
public static void main(String[] args) {
int line;
//라인수를 결정하는 변수
int spc;
//공백을 몇 번 출력할지 결정하는 변수
int n;
//숫자를 몇 번 출력할지 결정하는 변수
int number=1;
//출력할 숫자를 저장하는 변수
int size=3;
for(line=1; line<=size ; line++){
//3줄로 출력
for(spc=size-line; spc>=1 ;spc--) //공백 출력할 횟수를 결정
System.out.print(" ");
//공백 출력
for(n=1; n<= line*2-1; n++)
//숫자 출력할 횟수를 결정
System.out.print(number++);
//숫자 출력
System.out.println("");
//줄바꿈
}
}//main 함수의 끝
}
보조 제어문 - break
class F01 {
public static void main(String[] args) {
int n;
for(n=1; n<=10; n++)
System.out.print(" " + n);
System.out.println("");
for(n=1; n<=10; n++){
if(n%3==0)
break;
System.out.print(" " + n);
}
System.out.println("");
}//main 함수의 끝
}
class F01 {
public static void main(String[] args) {
int n, a;
for(n=1; n<=10; n++)
System.out.print(" " + n);
System.out.println("");
exit_for:
for(n=1; n<=10; n++){
System.out.println("");
for( a = 1 ; a <= 10; a++ ) {
if(a%3==0)
break exit_for;
System.out.print(" " + a);
}
}
System.out.println("");
}
}
보조 제어문 - continue
class F02 {
public static void main(String[] args) {
int n;
for(n=1; n<=10; n++){
if(n%3==0)
continue;
System.out.print(" " + n);
}
System.out.println("");
}//main 함수의 끝
}
배열 – 1차원 배열
public class G01 {
public static void main(String[] args) {
int []score = new int [5];
score[0]=95;
score[1]=70;
score[2]=80;
score[3]=75;
score[4]=100;
//반복문으로 배열을 일괄 처리함
for(int i=0; i<5; i++)
System.out.println( (i+1) + " th score[ " + i + " ]
= " + score[i]);
}
}
public class Arr01 {
public static void main(String[] args) {
int []score = {95, 70, 80, 75, 100};
int total=0;
double ave;
//반복문으로 배열을 일괄 처리함
for(int i=0; i<5; i++)
total += score[ i ]; //총합을 구함
ave = (double) total / 5.0; //평균을 구함
System.out.println(" Total = " + total);
System.out.println(" Ave = " + ave);
}
}
배열 – 다차원 배열
public class Arr03 {
public static void main(String[] args)
int [][]score=new int [5][3];
int row, col;
score[0][0]=10; score[0][1]=90;
score[1][0]=60; score[1][1]=80;
score[2][0]=55; score[2][1]=60;
score[3][0]=90; score[3][1]=75;
score[4][0]=60; score[4][1]=30;
{
score[0][2]=70;
score[1][2]=65;
score[2][2]=85;
score[3][2]=95;
score[4][2]=80;
///반복문으로 일괄처리
for(row = 0; row < 5 ; row++){
for(col = 0; col < 3 ; col++)
System.out.print(" " +score[row][col]);
System.out.println(""); //행단위로 줄 바꿈
}
}
}
배열 – 다차원 배열 2
public class Arr04 {
public static void main(String[] args) {
int [][]score = { { 85, 60, 70}, //0 행
{ 90, 95, 80}, //1 행
{ 75, 80, 100}, //2 행
{ 80, 70, 95}, //3 행
{100, 65, 80}
//4 행
};
int [] subject = new int[3]; //각 과목별 총점을 저장할 변수 선언
int [] student = new int[5]; //각 학생별 총점을 저장할 변수 선언
int r, c;
System.out.println("각 과목별 총점구하기 ");
for(c = 0; c < 3 ; c++){
for(r = 0; r < 5 ; r++){
//행을 증가해 가면서
subject[c] += score[r][c]; //각 과목별 총점을 구한다.
}
System.out.println(subject[c]); //각 과목별 총점 출력하기
}
System.out.println("학생별 총점구하기");
for(r = 0; r < 5 ; r++){
//행은 각 학생을 구분하고 해당 학생에 대해서
for(c = 0; c < 3 ; c++){
//열을 증가해 가면서
student[r] += score[r][c]; //국어, 영어, 수학 점수를 합하여 학생별 총점을 구한다.
}
System.out.println(student[r]); //학생별 총점 출력하기
}
}
}
메서드 – 사용자 정의 메서드
public class MethodEx01 {
static void hello_func(){
System.out.println("Hello World!");
}
public static void main(String[] args) {
hello_func();
}
}
public class MethodEx02 {
static void sum(int n)
{
int i;
int tot=0;
for(i=1; i<=n; i++)
tot += i;
System.out.println("1 ~ "+ n + " = " + tot);
}
public static void main(String[] args) {
sum(5);
sum(10);
}
}
메서드 – 사용자 정의 메서드 2
public class MethodEx03 {
//정수값을 하나 전달받음
static int abs(int data)
{
if(data<0)
//전달받은 정수값이 음수라면
data = -data; //-연산자를 이용하여 양수로 변경
return data;
//결과값을 되돌립니다.
}
public static void main(String[] args) {
int num=Integer.parseInt(args[0]);
System.out.println(" absolute data => "+abs(num));
}
}
클래스의 선언 및 활용
public class AnimalTest01 {
public static void main(String[] args) {
Animal a1;
//레퍼런스 변수 선언
a1=new Animal(); //객체 생성
a1.name="원숭이"; //생성된 객체의 멤버에 접근해서 값 대입
a1.age=26;
System.out.print(a1.name); //객체의 멤버에 저장된 값 출력
System.out.print(","+a1.age);
}
}
//이름과 나이를 속성으로 갖는 클래스 설계
class Animal {
/** 속성 선언 */
String name; //이름 속성
int age;
//나이 속성
}
클래스의 선언 및 활용 – 접근 지정자
public class AnimalTest02 {
public static void main(String[] args) {
Animal a1;
a1=new Animal();
a1.name="원숭이";
a1.age=26;
//private 멤버임으 접근 불가능
System.out.print(a1.name);
System.out.print(","+a1.age); //private 멤버이므로 접근 불가능
}
}
class Animal {
String name;
private int age;
}
클래스의 선언과 활용 – 접근 지정자 활용
class Animal {
String name;
private int age;
public void setAge(int new_age){
age=new_age;
}
public int getAge(){
return age;
}
}
public class AnimalTest03 {
public static void main(String[] args) {
Animal a1;
a1=new Animal();
a1.name="원숭이";
//a.age=26;
//public이어야만 허용된다.
a.setAge(26);
System.out.println(a.name);
//System.out.println(","+a.age); //public이어야만 허용된다.
System.out.println("," + a.getAge( ) );
}
}
클래스의 메서드 - 다형성
public class MethodTest01{
public static void main(String[] args) {
//(1) 논리값 : true, false
System.out.println(true);
//(2) 문자 : 단일 따옴표로 묶어줌
System.out.println('A');
//(3) 정수 : 소수점이 없는 수
System.out.println(128);
//(4) 실수 : 소수점이 있는 수
System.out.println(3.5);
//(5) 문자열 : 이중 따옴표로 묶어줌
System.out.println("Hello");
}
}
클래스의 메서드 – 다형성 2
public class MethodTest02{
int abs(int num){
if(num<0)
num=-num;
return num;
}
long abs(long num){
if(num<0)
num=-num;
return num;
}
double abs(double num){
if(num<0)
num=-num;
return num;
}
public static void main(String[] args) {
MethodTest02 mt=new MethodTest02();
int var01=-10, var02;
var02=mt.abs(var01);
System.out.println(var01 + "의 절대값은-> " + var02);
long var03=-20L, var04;
var04=mt.abs(var03);
System.out.println(var03 + "의 절대값은-> " + var04);
double var05=-3.4, var06;
var06=mt.abs(var05);
System.out.println(var05 + "의 절대값은-> " + var06);
}
}
클래스의 메서드 – 다형성 3
public class MethodTest03{
//정수형 데이터 3개를 형식매개변수로 갖는 prn 메소드 정의
void prn(int a, int b, int c) {
System.out.println(a +"\t" + b +""\t" +c);
}
//정수형 데이터 2개를 형식매개변수로 갖는 prn 메소드 정의
void prn(int a, int b) {
System.out.println(a +""\t" + b);
}
//정수형 데이터 1개를 형식매개변수로 갖는 prn 메소드 정의
void prn(int a){
System.out.println(a);
}
public static void main(String[] args){
MethodTest03 mt=new MethodTest03();
mt.prn(10, 20, 30); //정수형 데이터 3개를 실매개변수로 지정
mt.prn(40, 50);
//정수형 데이터 2개를 실매개변수로 지정
mt.prn(60);
//정수형 데이터 1개를 실매개변수로 지정
}
}
클래스의 메서드 – 다형성 4
class MethodTestA{
void prn(int a){
System.out.println(a);
}
int prn(int a){
return a;
}
public static void main(String[] args){
MethodTest03 mt=new MethodTest03();
mt.prn(10);
//정수형 데이터 1개를 실매개변수로 지정
int k;
k=mt.prn(10);
}
}
클래스의 메서드 - varargs
public class MethodTest04{
void prn(int ... num){
//int형 데이터를 출력하는 메소드의 정
의
for(int i=0; i<num.length; i++) //전달인자의 개수만큼 반복하면
서
System.out.print(num[i]+"\t"); //배열 형태로 출력한다.
System.out.println();
}
public static void main(String[] args)
{
MethodTest04 mt=new MethodTest04();
mt.prn(10, 20, 30); //개수에 상관없이 메소드를 호출할 수 있다.
mt.prn(40, 50);
mt.prn(60);
}
}
클래스 – 기본 자료형과 레퍼런스의 차이
class MyDate{ //클래스의 초기값을 지정함
int year=2006;
int month=4;
int day=1;
}
public class MethodTest05 {
public static void main(String[] args) {
MyDate d; //1. 레퍼런스 변수
System.out.println(d.year+ "/" +d.month+ "/" +d.day);
new MyDate(); //2. 객체 생성되었지만 사용되지 못함
d=new MyDate();
System.out.println(d.year+ "/" +d.month+ "/" +d.day);
}
}
클래스 – 기본 자료형과 레퍼런스의 차이 2
class MyDate{
int year=2006;
int month=4;
int day=1;
}
public class MethodTest06{
public static void main(String[] args) {
int x=7;
int y=x;
MyDate d=new MyDate(); //객체 생성
MyDate t=d;
System.out.println( "x->" +x+ " y->" +y);
System.out.println(d.year+ "/" +d.month+ "/" +d.day); //2006/4/1
System.out.println(t.year+ "/" +t.month+ "/" +t.day); //2006/4/1
y=10;//변수 y의 값을 변경시켜도 x의 값에 영향을 주지 못함
System.out.println( "x->" +x+ " y->" +y);
t.year=2007; t.month=7; t.day=19;
//레퍼런스 변수 d로 접근했을 때에도 변경되어진 값이 출력
System.out.println(d.year+ "/" +d.month+ "/" +d.day); //2007/7/19
System.out.println(t.year+ "/" +t.month+ "/" +t.day); //2007/7/19
}
}
클래스 – 기본 자료형과 레퍼런스의 차이 3
class MyDate{
int year=2006;
int month=4;
int day=1;
}
public class MethodTest07{
public static void main(String[] args) {
MyDate d=new MyDate(); //객체 생성
MyDate t=d;//t가 이미 선언된 d와 동일한 객체를 참조함
System.out.println(d.year+ "/" +d.month+ "/" +d.day); //2006/4/1
System.out.println(t.year+ "/" +t.month+ "/" +t.day); //2006/4/1
t=new MyDate(); //t가 새로 생성된 객체를 가리키므로 d와는 별개로 동작함
t.year=2007; t.month=7;
t.day=19;
System.out.println(d.year+ "/" +d.month+ "/" +d.day); //2006/4/1
System.out.println(t.year+ "/" +t.month+ "/" +t.day); //2007/7/19
}
}
클래스 – 값 전달 방식
class ValueMethod{
void changeInt(int y){
y=10;
}
public class MethodTest08 {
public static void main(String[] args) {
ValueMethod vm=new ValueMethod();
int x=7;
System.out.println( " 함수 호출 전 x->" +x);
vm.changeInt(x);
System.out.println( " 함수 호출 후 x->" +x);
}
}
클래스 – 레퍼런스 전달 방식
class MyDate{
int year=2006;
int month=4;
int day=1;
}
class RefMethod{
void changeDate(MyDate t){
}
}
public class MethodTest09 {
public static void main(String[] args) {
RefMethod rm=new RefMethod();
MyDate d=new MyDate();
System.out.println(" 함수 호출 전 d->" + d.year+ "/" +d.month+ "/" +d.day);
rm.changeDate(d);
System.out.println(" 함수 호출 후 d->" + d.year+ "/" +d.month+ "/" +d.day);
}
}
클래스 - 오류
class MyDate{
int year=2006;
int month=4;
}
class MethodTestB{
public static void main(String[] args){
MyDate d;
System.out.println(d.year+ "/" +d.month+ "/" +d.day);
}
}
클래스 – null 객체
class MyDate{
int year=2006;
int month=4;
int day=1;
}
class MethodTestC{
public static void main(String[] args){
MyDate d=null;
System.out.println(d.year+ "/" +d.month+ "/" +d.day);
System.out.println("정상 종료");
}
}
클래스 – 예외 처리
class MyDate{
int year=2006;
int month=4;
int day=1;
}
class MethodTestD{
public static void main(String[] args){
MyDate d=null;
try{
System.out.println(d.year+ "/" +d.month+ "/" +d.day);
}catch(Exception e){
System.out.println("예외 발생");
}
System.out.println("정상 종료");
}
}
클래스 - 생성자
class MyDate{
private int year;
class MyDate{
private int month;
private int year;
private int day;
private int month;
public void print(){
private int day;
System.out.println(year+ "/" +month+ "/" +day); public MyDate(){
}
System.out.println("[생성자] : 객체가 생성될 때 자
}
동 호출됩니다.");
public class ConstructorTest01 {
}
public static void main(String[] args) {
public void print(){
MyDate d=new MyDate(); //디폴트 생성자 호출 System.out.println(year+ "/" +month+ "/" +day);
d.print();
}
}
}
}
public class ConstructorTest02 {
public static void main(String[] args) {
MyDate d = new MyDate();
d.print();
}
}
클개스 – 생성자의 역할
class MyDate{
private int year;
private int month;
private int day;
public MyDate(){
year=2006;
month=4;
day=1;
}
public void print(){
System.out.println(year+ "/" +month+ "/"
+day);
}
}
public class ConstructorTest03 {
public static void main(String[] args) {
MyDate d=new MyDate();
d.print();
}
}
class MyDate{
private int year;
private int month;
private int day;
public MyDate(){
year=2006; month=4; day=1;
}
public MyDate(int new_year, int new_month, int new_day){
year=new_year;
month=new_month;
day=new_day;
}
public void print(){
System.out.println(year+ "/" +month+ "/" +day);
}
}
public class ConstructorTest04 {
public static void main(String[] args) {
MyDate d=new MyDate();
d.print();
MyDate d2=new MyDate(2007, 7, 19);
d2.print();
}
}
클래스 – 생성자 정의 문제
class MyDate{
private int year;
private int month;
private int day;
public MyDate(int new_year, int new_month, int new_day){
year=new_year;
month=new_month;
day=new_day;
}
public void print(){
System.out.println(year+ "/" +month+ "/" +day);
}
}
public class ConstructorTest05 {
public static void main(String[] args) {
MyDate d=new MyDate();
d.print();
MyDate d2=new MyDate(2007, 7, 19);
d2.print();
}
}
클래스 – 변수 이름의 중복
class MyDate{
private int year;
private int month;
private int day;
//생성자 정의하기
public MyDate(){
}
public MyDate(int new_year, int new_month, int
new_day){
year=new_year; month=new_month;
day=new_day;
}
//전달인자가 객체 속성의 이름과 동일한 메서드
public void SetYear(int year){
//this.year=year;
year=year;
}
public void SetMonth(int new_month){
month=new_month;
}
public void print(){
System.out.println(year+ "/" +month+ "/" +day);
}
}
public class ConstructorTest06 {
public static void main(String[] args) {
MyDate d=new MyDate(2007, 7, 19);
d.print();
d.SetYear(2008); //변경되지 않음
d.print();
//----------------?
d.SetMonth(8); //변경됨
d.print();
//----------------?
}
}
클래스 – this 사용 목적
class MyDate{
private int year;
private int month;
private int day;
public MyDate(){
}
public MyDate(int year, int month, int day){
this.year=year; this.month=month; this.day=day;
}
public void SetYear(int year){ //대입연산자 왼쪽에 this를 붙였기에
his.year=year;
//속성 값이 변경됨
}
public void SetMonth(int month){//대입연산자 왼쪽에 this를 붙였기에
this.month=month;
//속성 값이 변경됨
}
public void print(){
System.out.println(year+ "/" +month+ "/" +day);
}
}
public class ConstructorTest07 {
public static void main(String[] args) {
MyDate d=new MyDate(2007, 7, 19);
d.print();
d.SetYear(2008); //2008년으로 변경
d.SetMonth(8); //8월로 변경
d2.print();
}
}
클래스 – this의 또 다른 사용 목적
class MyDate{
private int year;
private int month;
private int day;
public MyDate(){
this(2006, 1, 1);
}
public MyDate(int new_year){
this(new_year, 1, 1);
}
public MyDate(int new_year, int new_month){
this(new_year, new_month, 1);
}
public MyDate(int new_year, int new_month, int new_day){
year=new_year;
month=new_month;
day=new_day;
}
public void print(){
System.out.println(year+ "/" +month+ "/" +day);
}
}
public class ConstructorTest10 {
public static void main(String[] args) {
MyDate d=new MyDate(2007, 7, 19); //14:에 정의된 생성자 호출
d.print();
MyDate d2=new MyDate(2007, 7);
//11:에 정의된 생성자 호출
d2.print();
MyDate d3=new MyDate(2007);
//8:에 정의된 생성자 호출
d3.print();
MyDate d4=new MyDate();
//5:에 정의된 생성자 호출
d4.print();
}
}
클래스 – 정적 변수
class StaticTest{
static int a=10;
int b=20;
}
class StaticTest01 {
public static void main(String[] args){
System.out.println("StaticTest.a->" + StaticTest.a);
StaticTest s1 = new StaticTest();
StaticTest s2 = new StaticTest();
System.out.println("s1.a->" + s1.a + "\t s2.a->" + s2.a);
System.out.println("s1.b->" + s1.b + "\t s2.b->" + s2.b);
s1.a=100;
System.out.print("s1.a->" + s1.a );
System.out.println("\t s2.a->" + s2.a);
s1.b=200;
System.out.print("s1.b->" + s1.b);
System.out.println("\t s2.b->" + s2.b);
}
}
클래스 – 정적 메서드
class StaticTest{
private static int a=10;
private int b=20;
public static void setA(int new_a){
a = new_a;
}
public static int getA(){
return a;
}
}
public class StaticTest02 {
public static void main(String[] args) {
//System.out.println(StaticTest.a);//a가 private으로 선언되어서 컴파일 에러 발생
System.out.println(StaticTest.getA());
StaticTest s1=new StaticTest();
StaticTest s2=new StaticTest();
s1.setA(10000);
int res1=s1.getA();
System.out.println(res1);
System.out.println(s2.getA());
}
}
클래스 – 정적 메서드 this 사용 오류
class StaticTest{
private static int a=10;
private int b=20;
public static void printA(){ //정적 메서드에서는 this를 사용하지 못함
System.out.println(a);
System.out.println(this.a); //컴파일 에러 발생
}
public void printB(){
//this는 인스턴스 메서드에서 여러 객체에 의해서
System.out.println(this.b); //메서드가 호출될 때 이를 구분하기 위해서 사용된다.
}
}
public class StaticTest03 {
public static void main(String[] args) {
StaticTest.printA();
StaticTest s1 = new StaticTest();
StaticTest s2 = new StaticTest();
s1.printB();
s2.printB();
}
}
클래스 정적 메서드 인스턴스 변수 사용 오류
class StaticTest{
private static int a=10;
private int b=20;
public static void printA(){
System.out.println(a);
System.out.println(b); //컴파일에러발생
}
public void printB(){
System.out.println(b);
}
}
public class StaticTest04 {
public static void main(String[] args) {
StaticTest.printA();
StaticTest s1 = new StaticTest();
StaticTest s2 = new StaticTest();
s1.printB();
s2.printB();
}
}
클래스 – 정적 메서드/변수 사용
class StaticTest06 {
public static void main(String[] args) {
int a=40, b=30, c=10;
int res;
res=Math.max(a, b);
System.out.println(a + "와" + b +" 중최대값: "+res);
res=Math.max(b, c);
System.out.println(b + "와" + c +" 중최대값: "+res);
}
}
class StaticTest07 {
public static void main(String[] args) {
System.out.println(Math.PI);
int r=5;
double area;
area=r*r*Math.PI;
System.out.println("반지름이 "+r+"인 원의 면적 "+ area);
}
}
패캐지 import
package packTest.packOne;
public class ClassOne {
public void print(){
System.out.println("packOne 패키지의ClassOne 클래스의print 메서
드");
}
}
public class PackageTest01 {
public static void main(String[] args) {
Random r = new Random();
for(int i=0; i<10; i++)
System.out.println("0 ~ 100 범위의 임의 숫자는 " + r.nextInt(100));
}
}
public class PackageTest02 {
public static void main(String[] args) {
java.util.Random r = new java.util.Random();
for(int i=0; i<10; i++)
System.out.println("0 ~ 100 범위의 임의 숫자는 " + r.nextInt(100));
}
}
패키지 import 2
import java.util.*;
public class PackageTest01 {
public static void main(String[] args) {
Random r = new Random();
for(int i=0; i<10; i++)
System.out.println("0 ~ 100 범위의 임의 숫자는 " + r.nextInt(100));
}
}
상속 – 슈퍼 클래스, 서브 클래스
class Parent{
public void parentPrn( ){
System.out.println("슈퍼 클래스 메서드는 상속된다.");
}
}
//Parent를 슈퍼 클래스로 하는 서브 클래스 Child 정의
class Child extends Parent{
public void childPrn( ){
System.out.println("서브 클래스 메서드는 슈퍼가 사용 못한다.");
}
}
class SuperSub01{
public static void main(String[] args){
Child c = new Child( ); //서브 클래스로 객체를 생성
c.parentPrn( );
//슈퍼 클래스에서 상속 받은 메서드 호출
c.childPrn( );
//서브 클래스 자기 자신의 메서드 호출
System.out.println("-------------------------------------->> ");
Parent p = new Parent( ); //슈퍼 클래스로 객체 생성
p.parentPrn( );
//슈퍼 클래스 자기 자신의 메서드 호출
//p.childPrn( );
//서브 클래스 메서드는 가져다 사용 못함
}
}
상속 – 코드의 재활용
class Point2D{
private int x;
private int y;
public int getX( ){
return x;
}
public void setX(int new_X){
x=new_X;
}
public int getY( ){
return y;
}
public void setY(int new_Y){
y=new_Y;
}
}
class Point3D extends Point2D{
private int z;
public int getZ( ){
return z;
}
public void setZ(int new_Z){
z=new_Z;
}
}
class SuperSub00{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.setX(10); //상속받아 사용
pt.setY(20); //상속받아 사용
pt.setZ(30); //자신의 것 사용
System.out.println( pt.getX( )//상속받아 사용
+", "+ pt.getY( )//상속받아 사용
+", "+ pt.getZ( ));//자신의 것 사용
}
}
교재 210페이지 참조
상속 – protected, private 접근 지정자
class Point2D{
protected int x=10;
// private int x=10;
protected int y=20;
}
class Point3D extends Point2D{
protected int z=30;
public void print( ){
System.out.println( x +", "+y+","+z);
}
}
class SuperSub04{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.print( );
}
}
상속 – protected, private 접근 지정자
package packTest.packOne;
public class AccessTest {
private int a=10; //[1] private
int
b=20; //[2] 기본 접근 지정자
protected int c=30; //[3] protected
public
int d=40; //[4] public
public void print( ){
System.out.println("AccessTest의 print");
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
import packTest.packOne.AccessTest;
//AccessTest의 서브 클래스로 SubOne을 설계
class SubOne extends AccessTest {
void subPrn( ){
System.out.println(a); //[1. Sub] private -X
System.out.println(b); //[2. Sub] 기본 접근 지정자-X
System.out.println(c); //[3. Sub] protected -O
System.out.println(d); //[4. Sub] public -0
}
}
//AccessTest랑 상속관계가 없는 클래스
class SuperSubA{
public static void main(String[] args){
AccessTest at=new AccessTest( );
at.print( );
System.out.println("main");
System.out.println(at.a); //[1. main] private -X
System.out.println(at.b); //[2. main] 기본 접근 지정자
-X
System.out.println(at.c); //[3. main] protected -X
System.out.println(at.d); //[4. main] public -O
}
}
상속 – 메서드 오버라이딩
class Parent{
public void parentPrn( ){
System.out.println("슈퍼 클래스
}
}
//Parent를 슈퍼 클래스로 하는 서브
class Child extends Parent{
public void parentPrn( ){
System.out.println("서브 클래스
}
public void childPrn( ){
System.out.println("서브 클래스
}
}
: ParentPrn 메서드");
클래스 Child 정의
: ParentPrn 메서드");
: ChildPrn 메서드");
class SuperSub05{
public static void main(String[] args){
Child c = new Child( );
//서브 클래스로 객체를 생성
c.parentPrn( );
//오버라이딩된 서브 클래스의 메서드 호출
c.childPrn( );
//서브 클래스 자기 자신의 메서드 호출
System.out.println("-------------------------------------------->>
");
Parent p = new Parent( );
//슈퍼 클래스로 객체를 생성
p.parentPrn( );
//슈퍼 클래스(자기 자신)의 메서드 호출
}
}
상속 – super 레퍼런스 변수
class Parent{
public void parentPrn( ){
System.out.println("슈퍼 클래스 : ParentPrn 메서드");
}
}
//Parent를 슈퍼 클래스로 하는 서브 클래스 Child 정의
class Child extends Parent{
//슈퍼 클래스에 있는 ParentPrn 메서드를 오버라이딩하면
//Child로 선언된 객체는 슈퍼 클래스의 메서드가 은닉되어 상속 받지 못하게 된다.
public void parentPrn( ){
super.parentPrn();
System.out.println("서브 클래스 : ParentPrn 메서드");
}
public void childPrn( ){
System.out.println("서브 클래스 : ChildPrn 메서드");
}
}
class SuperSub05{
public static void main(String[] args){
Child c = new Child( );
//서브 클래스로 객체를 생성
c.parentPrn( );
//오버라이딩된 서브 클래스의 메서드 호출
c.childPrn( );
//서브 클래스 자기 자신의 메서드 호출
System.out.println("-------------------------------------------->> ");
Parent p = new Parent( );
//슈퍼 클래스로 객체를 생성
p.parentPrn( );
//슈퍼 클래스(자기 자신)의 메서드 호출
}
}
상속 – super 레퍼런스 변수 2
class Point2D{
protected int x=10; //은닉 변수
protected int y=20; //혹은 쉐도우 변수
}
class Point3D extends Point2D{
protected int x=40; //슈퍼 클래스에 존재하는 멤버변수를
protected int y=50; //서브 클래스에 다시 한 번 정의함
protected int z=30;
public void print( ){
System.out.println( x +", "+y+", "+z); //x와 y는 재 정의된 Point3D 클래스 소속
}
public void print02( ){
System.out.println(super.x+", "+super.y+", "+z); //Point2D 클래스 소속 멤버변수로 접근
}
}
class SuperTest04{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.print( ); //40, 50, 30 // Point3D의 x, y
pt.print02( ); //10, 20, 30 // Point2D의 x, y
}
}
상속 – 생성자의 호출
class Point2D{
protected int x=10;
protected int y=20;
public Point2D( ){
System.out.println("슈퍼 클래스인 Point2D 생성자 호출");
}
}
class Point3D extends Point2D{
protected int z=30;
public void print( ){
System.out.println(x+", "+y+","+z);
}
public Point3D( ){
System.out.println("서브 클래스인 Point3D 생성자 호출");
}
}
class SuperTest05{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.print( );
}
}
상속 – 생성자 호출 문제
class Point2D{
protected int x=10;
protected int y=20;
/*
public Point2D( ){
System.out.println("슈퍼 클래스인 Point2D 생성자 호출");
}
*/
public Point2D(int xx, int yy){
x=xx; y=yy;
}
}
class Point3D extends Point2D{
protected int z=30;
public void print( ){
System.out.println(x+", "+y+","+z);
}
public Point3D( ){
System.out.println("서브 클래스인 Point3D 생성자 호출");
}
}
class SuperTest06{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.print( );
}
}
class Point2D{
protected int x=10;
protected int y=20;
public Point2D( ){
System.out.println("슈퍼 클래스인 Point2D 생성자 호출");
}
public Point2D(int xx, int yy){
x=xx; y=yy;
}
}
class Point3D extends Point2D{
protected int z=30;
public void print( ){
System.out.println(x+", "+y+", "+z);
}
public Point3D( ){
super(123, 456);
System.out.println("서브 클래스인 Point3D 생성자 호출");
}
public Point3D(int xx, int yy, int zz){
x=xx; y=yy; z=zz;
}
}
class SuperTest07{
public static void main(String[] args){
Point3D pt=new Point3D( );
pt.print( );
Point3D pt02=new Point3D(1, 2, 3);
pt02.print( );
}
}
상속 – 업 캐스팅
class Parent{
public void parentPrn( ){
System.out.println("슈퍼 클래스 : ParentPrn 메서드");
}
}
//Parent를 슈퍼 클래스로 하는 서브 클래스 정의
class Child extends Parent{
public void childPrn( ){
System.out.println("서브 클래스 : ChildPrn 메서드");
}
}
class RefTest01{
public static void main(String[] args){
Child c = new Child(); //서브 클래스로 객체를 생성
//Child 객체로 접근해서 호출할 수 있는 메서드는 2개
c.parentPrn(); //부모로부터 상속 받은 메서드
c.childPrn();
//자신의 메서드
Parent p;
//슈퍼 클래스형 레퍼런스 변수 선언
p=c;
//암시적으로 업 캐스팅이 일어남
p.parentPrn(); //업 캐스팅 후에는 부모로부터 상속받은 메서드만 호출할 수 있다,
//p.childPrn(); //컴파일 에러가 발생하게 된다.
}
}
상속 – 다운 캐스팅
class RefTest02{
public static void main(String[] args){
Parent p = new Parent(); //슈퍼 클래스로 인스턴스 선언
Child c;
//서브 클래스로 레퍼런스 변수 선언
//서브 클래스형 레퍼런스 변수에 슈퍼 클래스의 레퍼런스 값을 대입하면
c= p; //이를 DownCasting 이라하는데 컴파일러 에러가 발생한다.
}
}
class RefTest03{
public static void main(String[] args){
// Parent p = new Parent( ); // super 클래스 인스턴스 선언
Parent p = new Child( ); //서브 클래스로 인스턴스 선언
p.parentPrn();
//p.childPrn();//-컴파일 에러
Child c;
//서브 클래스로 레퍼런스 변수 선언
System.out.println("----------------------------->>");
//서브 클래스 레퍼런스 변수에 슈퍼 클래스의 레퍼런스 값이 대입됨
c = (Child) p; //강제 형변환으로 다운 캐스팅 (단, 인스턴스가 Child 형인 경우)
c.parentPrn();
c.childPrn();
}
}
상속 – instanceof 1
class HandPhone {
String model; //모델명
String number;//전화번호
public HandPhone(){
}
public HandPhone(String m, String n){
model=m;
number=n;
}
}
class DicaPhone extends HandPhone{
String pixel; //화소수
public DicaPhone( ){
}
public DicaPhone(String m, String n, String p){
super(m, n);
pixel=p;
}
public void prnDicaPhone(){
System.out.println(model+":"+number+":"+pixel);
}
}
상속 – instanceof 2
class RefTest05 {
public static void main(String[] args){
DicaPhone dp=new DicaPhone("에버-5500","010-3346-1980","256");
// instanceof 는 좌변의 객체가 우변의 자손인지를 판별해 주는 연산자
dp.prnDicaPhone();
System.out.println("-----------------------");
if (dp instanceof DicaPhone){ //dp는 DicaPhone입니까?
System.out.println("dp는 DicaPhone이다.");
}
if (dp instanceof HandPhone){ //dp는 HandPhone입니까?
System.out.println("dp는 HandPhone 이다.");
HandPhone hh=dp;
System.out.println("그러므로 HandPhone으로 형변환 가능함");
System.out.println("dp는 HandPhone이 가진 기능을 모두 다 포함");
}
System.out.println("-----------------------");
HandPhone hp = new HandPhone( );
if (hp instanceof DicaPhone){ //p는 DicaPhone입니까?
System.out.println("hp는 DicaPhone 이다.");
}
else{
System.out.println("hp는 DicaPhone이 아니다.");
System.out.println("그러므로 DicaPhone으로 형변환 불가능함.");
System.out.println("hp는 DicaPhone이 가진 기능을 모두 다 포함하지 못함");
}
}
}
상속 – 메서드 오버라이딩으로 인한 은닉
class Parent{
public void parentPrn( ){
System.out.println("슈퍼 클래스 : ParentPrn 메서드");
}
}
class Child extends Parent{
public void parentPrn( ){
System.out.println("서브 클래스 : 오버라이딩된 ParentPrn 메서드");
}
public void childPrn( ){
System.out.println("서브 클래스 : ChildPrn 메서드");
}
}
class RefTest06{
public static void main(String[] args){
Child c = new Child(); //서브 클래스로 객체를 생성
//레퍼런스와 객체의 자료형이 동일하면
c.parentPrn(); //자신의 기능들이 호출된다.
Parent p;
//슈퍼 클래스형 레퍼런스 변수 선언
p=c; //업 캐스팅
//업 캐스팅 후에도 슈퍼 클래스의 parentPrn 메서드는 은닉되고
p.parentPrn(); //서브 클래스에 오버라이딩된 메서드가 호출된다.
}
}
추상 클래스 및 추상 메서드
class AbstractClass{//추상 클래스가 아닌 클래스에서
abstract void Method01();//추상 메서드를 가질 경우 컴파일 에러
}
abstract class AbstractClass {
abstract void print( String Message );
}
class AbstractClass {
abstract void print( String Message );
}
추상 클래스 상속
package javaapplication5;
/**
*
* @author 장성현
*/
abstract class ShapeClass {
abstract void draw();
}
class Circ extends ShapeClass {
void draw() {
System.out.println("타원을 그린다.");
}
}
class Rect extends ShapeClass {
void draw() {
System.out.println("사각형을 그린다.");
}
}
class Tria extends ShapeClass {
void draw() {
System.out.println("삼각형을 그린다.");
}
}
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Circ c = new Circ();
Rect r = new Rect();
Tria t = new Tria();
c.draw();
r.draw();
t.draw();
}
}
Final 변수 및 메서드
class FinalMember {
final int a=10;
public void setA(int a){
// this.a=a;
}
}
public class finaltest{
public static void main(String[] args) {
FinalMember ft= new FinalMember();
ft.setA(100);
System.out.println(ft.a);
}
}
class FinalMethod{
String str="Java ";
//public void setStr(String s) {
//final 붙이면 서브 클래스에서 오버라이딩이 불가.
public final void setStr(String s) {
str=s;
System.out.println(str);
}
}
class FinalEx extends FinalMethod{
int a=10; // final 붙이면 밑에서 a값 대입 불가.
public void setA(int a) {
this.a=a;
}
public void setStr(String s) {
str+=s;
System.out.println(str);
}
}
public class FinalTest02{
public static void main(String[] args) {
FinalEx ft= new FinalEx( );
ft.setA(100);
ft.setStr("hi");// 슈퍼 클래스의 setStr을 실행.
FinalMethod ft1=new FinalMethod( );
ft1.setStr("hi");// 자신의 클래스의 setStr을 실행.
}
}
Final 클래스
final class FinalClass{
String str="Java ";
public void setStr(String s){
str=s;
System.out.println(str);
}
}
class FinalEx extends FinalClass{
int a=10;
public void setA(int a) {
this.a=a;
}
public void setStr(String s){
str+=s;
System.out.println(str);
}
}
public class FinalTest03{
public static void main(String[] args) {
FinalEx fe= new FinalEx( );
}
}
상속의 제한
abstract class Hello{
public abstract void sayHello(String name);
}
abstract class GoodBye{
public abstract void sayGoodBye(String name);
}
//class SubClass extends GoodBye{
class SubClass extends Hello{//추상 클래스 Hello를 상속
public void sayHello(String name){//오버라이딩 한 것이
System.out.println(name+"씨 안녕하세요!");
}
public void sayGoodBye(String name){
//추상 클래
System.out.println(name+"씨 안녕히 가세요!");
}
}
class AbstractTest02{
public static void main(String[] args) {
SubClass test= new SubClass();
test.sayHello(args[0]);
test.sayGoodBye(args[0]);
}
}
인터페이스 정의 및 다중 상속
abstract class Hello{
public abstract void sayHello(String name);
}
abstract class GoodBye{
public abstract void sayGoodBye(String name);
}
//class SubClass extends GoodBye{
class SubClass extends Hello{//추상 클래스 Hello를 상속
public void sayHello(String name){//오버라이딩 한 것이
System.out.println(name+"씨 안녕하세요!");
}
public void sayGoodBye(String name){
//추상 클래
System.out.println(name+"씨 안녕히 가세요!");
}
}
class AbstractTest02{
public static void main(String[] args) {
SubClass test= new SubClass();
test.sayHello(args[0]);
test.sayGoodBye(args[0]);
}
}
interface IHello{
public abstract void sayHello(String name);
}
interface IGoodBye{
public abstract void sayGoodBye(String name);
}
//두 인터페이스로부터 상속을 받는 클래스 설계
class SubClass implements IHello, IGoodBye{
public void sayHello(String name){
System.out.println(name+"씨 안녕하세요!");
}
public void sayGoodBye(String name){
System.out.println(name+"씨 안녕히 가세요!");
}
}
class AbstractTest05{
public static void main(String[] args) {
SubClass test= new SubClass();
test.sayHello(args[0]);
test.sayGoodBye(args[0]);
}
}
인터페이스 정의 – 속성 정의
//인터페이스(IColor)므로 다중 상속 가능
interface IColor{
int RED=1;
//상수(public static final 로 인식)
public static final int GREEN=2;
//상수
public static final int BLUE=3;
//상수
void setColor(int c);
//추상메서드 (public abstract 로 인식)
public abstract int getColor();
//추상메서드
}
//클래스(AbsColor)이므로 다중 상속 불가능 단일 상속만,
abstract class AbsColor implements IColor{
int color=GREEN;
//변수도 가질 수 있디.
public void setColor(int c){
//구현된 메서드도 가질 수 있다.
color=c;
}
}
class SubClass extends AbsColor{
public int getColor(){
return color;
}
}
class AbstractTest07{
public static void main(String[] args) {
SubClass test= new SubClass();
test.setColor(IColor.RED);
System.out.println(test.getColor());
}
}
인터페이스 정의 – 메서드 오버라이딩
interface IHello{
void sayHello(String name);
}
class Hello implements IHello{
public void sayHello(String name){
//void sayHello(String name){
System.out.println(name+"씨 안녕하세요!");
}
}
class finaltest{
public static void main(String[] args) {
Hello obj= new Hello();
obj.sayHello(args[0]);//윤정
}
}
자주 사용하는 자바 클래스 - Object
class Point{
}
class ObjectTest00 {
public static void main(String[] args){
Point obj = new Point( );
System.out.println("클래스 이름 : "+ obj.getClass() );
System.out.println("해쉬 코드 : "+ obj.hashCode() );
System.out.println("객체 문자열 : "+ obj.toString() );
System.out.println("----------------------------------");
Point obj02 = new Point( );
System.out.println("클래스 이름 : "+ obj02.getClass() );
System.out.println("해쉬 코드 : "+ obj02.hashCode() );
System.out.println("객체 문자열 : "+ obj02.toString() );
}
}
자주 사용하는 자바 클래스 – Object 2
// Object 클래스의 메서드 오버라이딩
class Point{
int x, y;
public Point( ){ }
this.x=x;
this.y=y;
}
public String toString( ){
String str;
str="( " + x + ", " + y + " )";
return str;
}
}
class ObjectTest02 {
public static void main(String[] args) {
Point pt = new Point(10, 20);
System.out.println(pt);
}
}
자주 사용하는 자바 클래스 – Object 3
class ObjectTestA{
public static void main(String[] args) {
int a=10, b=10;
if(a==b)
System.out.println("같다");
else
System.out.println("다르다");
String str01=new String("안녕");
String str02=new String("안녕");
//두 레퍼런스 변수가 같은 힙영역을 가리키는 지 판별하는 ==연산자
if(str01==str02)
System.out.println("같다");
else
System.out.println("다르다");
//두 객체의 내용이 같은지 판별하는 equals 메서드
if(str01.equals(str02))
System.out.println("같다");
else
System.out.println("다르다");
}
}
자주 사용하는 자바 클래스 – Object 3
class Point{
int x, y;
public Point( ){ }
public Point(int x, int y){
this.x=x;
this.y=y;
}
public boolean equals(Object obj){
Point ptTmp = (Point)obj; //다운 캐스팅한 후에
//두 멤버변수 x, y 값이 각각 같은지 판별한다.
if ( (x == ptTmp.x) && (y == ptTmp.y))
return true;
else
return false;
}
}
class ObjectTest03{
public static void main(String[] args) {
Point pt01 = new Point(10, 20);
Point pt02 = new Point(10, 20);
if(pt01==pt02)
System.out.println("두 레퍼런스가 같습니다.");
else
System.out.println("두 레퍼런스가 다릅니다.");
if(pt01.equals(pt02))
System.out.println("두 객체의 내용이 같습니다.");
else
System.out.println("두 객체의 내용이 다릅니다.");
}
}
자주 사용하는 자바 클래스 – Wapper 클래스
자료형 변환
public class ex05_B02 {
public static void main(String[] args) {
int num01,num02, max;
num01 = Integer.parseInt(args[0]);
num02 = Integer.parseInt(args[1]);
if(num01>num02)
max=num01;
else
max=num02;
System.out.println(" 큰 값은 -> " + max);
}
}
class WrapperTest01 {
public static void main(String[] args) {
Integer num01 = new Integer(10);
Integer num02 = new Integer("20");
//숫자 데이터를 포함한 Wrapper 클래스는 XXXValue
메서드를 호출하여 자바 기본형 데이터를 얻을 수 있다.
int n01=num01.intValue();
int n02=num01.intValue();
int sum;
sum=n01+n02;
System.out.println("두 정수의 합은 -> " + sum);
//Integer 객체에 저장된 정수값을 2진수, 8진수, 16진수
형태의 문자열로 변환
System.out.println("합을 2진수로 -> " + Integer.toBinaryString(sum));
System.out.println("합을 8진수로 -> " + Integer.toOctalString(sum));
System.out.println("합을 16진수로 -> " + Integer.toHexString(sum));
}
}
자주 사용하는 자바 클래스 – Wapper 클래스
오토 빅싱
class WrapperTestA {
public static void main(String[] args) {
int n01=10;
int n02;
Integer num01 ; //Integer 객체 생성
Integer num02= new Integer(20) ;
num01 = n01; //오토 박싱
n02 = num02; //오토 언 박싱
System.out.println(n01 + ", " + num01);
System.out.println(n02 + ", " + num02);
}
}
문자열 관련 클래스 – String 클래스
class StringTest00 {
public static void main(String[] args) {
String str1 = new String("Java Programming");
String str2 = new String("Java Programming");
if(str1==str2)
System.out.println("같다");
else
System.out.println("다르다");
// 상수 대입, 같은 내용일 경우 한번만 메모리 할당
String str3 = "Java Programming";
String str4 = "Java Programming";
if(str3==str4)
System.out.println("같다");
else
System.out.println("다르다");
}
}
문자열 관련 클래스 – StringBuffer 클래스
class StringTest03 {
public static void main(String[] args) {
StringBuffer str01 = new StringBuffer(); //StringBuffer 객체 생성
str01.append("Java");
//현재 문자열 끝에 첨부
System.out.println("str01의 값은-> " + str01.toString()); //........"Java"
str01.append(" Progamming");
//현재 문자열 끝에 첨부
System.out.println("str01의 값은-> " + str01.toString()); //........"Java Progamming"
str01.replace(0, 4, "MFC");
//0부터 4사이의 내용을 “MFC"로 교환
System.out.println("str01의 값은-> " + str01.toString()); //........"MFC Progamming"
//substring에서 지정한 위치에서부터 시작하여 마지막 문자까지 반환
String str02 = str01.substring(3) //.............................................." Progamming"
//str01은 그대로 MFC "Progamming "
System.out.println("str01의 값은-> " + str01);
System.out.println("str02의 값은-> " + str02);
//....................."MFC Progamming"
//....................." Progamming"
str01.deleteCharAt(0); //0번째 위치의 한문자를 지운다.
System.out.println("str01의 값은-> " + str01.toString()); //........"FC Progamming"
str01.reverse();
//문자열의 순서를 뒤집는다.
System.out.println("str01의 값은-> " + str01.toString()); //........"gnimmagorP CF"
}
}
문자열 관련 클래스 – StringTokenizer클래스
import java.util.*;
class StringTest04 {
public static void main(String[] args) {
StringTokenizer str = new StringTokenizer("전도연#김혜수#전지현#김태희", "#");
int cnt = str.countTokens(); //파싱된 문자열이 모두 몇 개인지 되는지 알려줌
System.out.println("파싱할 문자열의 총갯수-> " + cnt);
while(str.hasMoreTokens())
//토큰이 있으면
System.out.println(str.nextToken()); //차례대로 파싱된 문자열을 얻어온다.
}
}
AWT 를 이용한 GUI 작성 – WindowEvent 처리
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame {
public FrameEvent( ) {
super("윈도우 이벤트");
setSize(300,200);
setVisible(true);
addWindowListener( new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class FrameTest02{
public static void main(String[] args) {
new FrameEvent();
}
}
교재 358 내부 클래스 참조
교재 361 내부 무명 클래스 참조
AWT 를 이용한 GUI 작성 – WindowEvent 처리
package awttest;
import java.awt.*;
import java.awt.event.*;
class DemoEvent extends WindowAdapter {
private Frame Event_Frame;
public DemoEvent() {
}
public DemoEvent( Frame f ) {
Event_Frame = f;
}
public void windowClosing( WindowEvent e ) {
Event_Frame.dispose();
System.exit(0);
}
}
public class Main {
public static void main(String[] args) {
// TODO code application logic here
Frame f = new Frame("Frame Demo"); //프레임 객체 생성
f.setSize(200, 200);
f.setVisible( true );
f.addWindowListener( new DemoEvent( f ) );
}
}
AWT 컴포넌트 배치 - FlowLayout
import java.awt.*;
import java.awt.event.*;
class FrameEx extends Frame {
public FrameEx( ) {
setLayout(new FlowLayout());
add(new Button("Button 01"));
add(new Button("Button 02"));
add(new Button("Button 03"));
add(new Button("Button 04"));
add(new Button("Button 05"));
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class FrameTest03{
public static void main(String[] args) {
new FrameEx( );
}
}
AWT 컴포넌트 배치 - BorderLayout
import java.awt.*;
import java.awt.event.*;
class FrameEx extends Frame {
public FrameEx( ) {
setLayout(new BorderLayout());
add(new Button("Button 01"), "North");
add(new Button("Button 02"), "West");
add(new Button("Button 03"), "Center");
add(new Button("Button 04"), "East");
add(new Button("Button 05"), "South");
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class FrameTest04{
public static void main(String[] args) {
new FrameEx( );
}
}
AWT 컴포넌트 배치 - GridLayout
import java.awt.*;
import java.awt.event.*;
class FrameEx extends Frame {
public FrameEx( ) {
setLayout(new GridLayout(3, 2));
add(new Button("Button 01"));
add(new Button("Button 02"));
add(new Button("Button 03"));
add(new Button("Button 04"));
add(new Button("Button 05"));
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class FrameTest05{
public static void main(String[] args) {
new FrameEx( );
}
}
AWT 컴포넌트 배치 - GridBagLayout
import java.awt.*;
import java.awt.event.*;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
class GridBagLayoutTest extends Frame{
GridBagLayout grid;
GridBagConstraints con;
public GridBagLayoutTest(){
}
grid = new GridBagLayout();
private void addCom(Component c, int x, int y, int w, int h){
setLayout(grid);
add(c);
con.gridx=x;
con = new GridBagConstraints();
con.gridy=y;
con.fill=GridBagConstraints.BOTH;
con.gridwidth=w;
con.weightx=1.0;
con.gridheight=h;
con.weighty=1.0;
grid.setConstraints(c, con);
}
Button btn1=new Button("버튼 1");
}
addCom(btn1, 0, 0, 2, 1);
Button btn2=new Button("버튼 2");
class LayoutTest02
addCom(btn2, 2, 0, 1, 2);
{
Button btn3=new Button("버튼 3");
public static void main(String[] args)
addCom(btn3, 0, 1, 1, 1);
{
Button btn4=new Button("버튼 4");
new GridBagLayoutTest();
addCom(btn4, 1, 1, 1, 1);
}
}
setSize(200,200);
setVisible(true);
AWT 컴포넌트 배치 - CardLayout
class CardLayoutTest extends Frame {
CardLayout card;
Panel
[] panel ;
Color
[] color = {Color.red, Color.blue,
Color.yellow,Color.green,Color.cyan};
MouseHandle mouse;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
public CardLayoutTest(){
card = new CardLayout();
setLayout(card);
class MouseHandle extends MouseAdapter{
public void mouseClicked(MouseEvent e){
card.next(CardLayoutTest.this);
}
}
panel= new Panel[5];
mouse = new MouseHandle();
}
for(int i = 0 ; i < 5 ; i++){
panel[i] = new Panel();
panel[i].setBackground(color[i]);
add((new Integer(i)).toString(), panel[i]);
panel[i].addMouseListener(mouse);
}
setSize(200,200);
setVisible(true);
class LayoutTest01{
public static void main(String [] args){
new CardLayoutTest();
}
}
AWT 컴포넌트 배치 - Pannel
import java.awt.*;
import java.awt.event.*;
class FrameEx extends Frame {
Panel pan01, pan02, pan03;
public FrameEvent06( ) {
pan01 = new Panel();
pan02 = new Panel();
pan03 = new Panel();
pan03.add(new Button("Button 04"));
pan03.add(new Button("Button 05"));
setSize(300,130);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
pan01.setBackground(Color.green);
pan02.setBackground(Color.blue);
pan03.setBackground(Color.red);
add(BorderLayout.NORTH, pan01);
add(BorderLayout.CENTER, pan02);
add(BorderLayout.SOUTH, pan03);
pan01.add(new Button("Button 01"));
pan01.add(new Button("Button 02"));
pan02.add(new Button("Button 03"));
}
}
public class FrameTest06{
public static void main(String[] args) {
new FrameEx( );
}
}
컴포넌트 이벤트 처리 – interface 상속 외부 객체 단점
import java.awt.*;
import java.awt.event.*;
setSize(300,200);
setVisible(true);
class FrameEvent extends Frame {
Button redBtn, blueBtn;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
public FrameEvent( ) {
setLayout(new FlowLayout());
redBtn = new Button("빨간 색");
blueBtn = new Button("파란 색");
add(redBtn);
add(blueBtn);
ButtonListener handler = new ButtonListener( );
redBtn.addActionListener(handler);
blueBtn.addActionListener(handler);
}
}
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand( ));
}
}
public class EventTest01{
public static void main(String[] args) {
new FrameEvent( );
}
}
컴포넌트 이벤트 처리 – interface 상속 외부 객체 단점
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame {
Button redBtn, blueBtn;
public FrameEvent( ) {
setLayout(new FlowLayout());
redBtn = new Button("빨간 색");
blueBtn = new Button("파란 색");
add(redBtn);
add(blueBtn);
class ButtonListener implements ActionListener{
Frame frm=null;
public ButtonListener(){
}
public ButtonListener(Frame value){
frm=value;
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand( )=="빨간 색")
frm.setBackground(Color.red);
else
frm.setBackground(Color.blue);
}
};
ButtonListener handler = new ButtonListener(this);
public class EventTest02{
redBtn.addActionListener(handler);
public static void main(String[] args) {
blueBtn.addActionListener(handler);
new FrameEvent( );
}
setSize(300,200);
}
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
컴포넌트 이벤트 처리 – Frame의 interface 상속
import java.awt.*;
import java.awt.event.*;
public void actionPerformed(ActionEvent e) {
if(e.getSource( ) == redBtn)
this.setBackground(Color.red);
else if(e.getSource( ) == blueBtn)
this.setBackground(Color.blue);
}
class FrameEvent extends Frame implements
ActionListener{
Button redBtn, blueBtn;
public FrameEvent( ) {
setLayout(new FlowLayout());
redBtn = new Button("빨간 색");
blueBtn = new Button("파란 색");
add(redBtn);
add(blueBtn);
redBtn.addActionListener(this);
blueBtn.addActionListener(this);
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class EventTest03{
public static void main(String[] args) {
new FrameEvent( );
}
}
컴포넌트 이벤트 처리 – interface 상속 문제점
import java.awt.*;
import java.awt.event.*;
class ExitEventFrame extends Frame implements WindowListener{
public ExitEventFrame ( ){
this.addWindowListener(this);
setSize(200,200);
setVisible(true);
}
public void windowClosing(WindowEvent e){
dispose( );
System.exit(0);
}
public void windowActivated(WindowEvent e){ }
public void windowClosed(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){ }
public void windowDeiconified(WindowEvent e){ }
public void windowIconified(WindowEvent e){ }
public void windowOpened(WindowEvent e){ }
}
public class EventTest04{
public static void main (String args[]){
new ExitEventFrame();
}
}
컴포넌트 이벤트 처리 – Adapter 상속 문제점
import java.awt.*;
import java.awt.event.*;
class ExitFrameEvent extends Frame {
public ExitFrameEvent( ) { //생성자
setSize(200,200);
setVisible(true);
addWindowListener( new SubClass( ) );
}
}
class SubClass extends WindowAdapter{
public void windowClosing(WindowEvent e) {
//dispose( );//자원 해제
System.exit(0);
}
}
public class EventTest05{
public static void main(String[] args) {
new ExitFrameEvent( );
}
}
컴포넌트 이벤트 처리 – Adapter 상속 무명 내부 클래스
import java.awt.*;
import java.awt.event.*;
class ExitFrameEvent extends Frame {
public ExitFrameEvent( ) {
setSize(200,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class EventTest06{
public static void main(String[] args) {
new ExitFrameEvent( );
}
}
컴포넌트 이벤트 처리 – Adapter 상속 내부 클래스
import java.awt.*;
import java.awt.event.*;
class ExitFrameEvent extends Frame {
public ExitFrameEvent( ) {
setSize(200,200);
setVisible(true);
addWindowListener( new SubClass( ) );
class SubClass extends WindowAdapter{
public void windowClosing(WindowEvent e) {
dispose( );
System.exit(0);
}
}
}
}
public class EventTest07{
public static void main(String[] args) {
new ExitFrameEvent( );
}
}
class Outer{
int data=100;
class Inner{
public void printData() {
System.out.println(data+"입니다.");
}
}
}
public class EventTest08{
public static void main(String[] args) {
//외부 클래스로 객체 생성
Outer outObj=new Outer();
//내부 클래스로 객체 생성
Outer.Inner inObj= outObj.new Inner();
inObj.printData();
}
}
다양한 컴포넌트 이벤트 처리 – 텍스트 입력 받기
import java.awt.*;
import java.awt.event.*;
setSize(400,100);
setVisible(true);
class FrameEvent extends Frame {
Panel p1, p2;
TextField txtID;
TextField txtPW;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
public FrameEvent( ) {
setLayout(new BorderLayout( ));
p1=new Panel( );
p2=new Panel( );
txtID=new TextField(20);
txtPW=new TextField(20);
txtPW.setEchoChar('*');
p1.add(new Label("아 이 디 : "));
p1.add(txtID);
this.add(p1, BorderLayout.NORTH);
p2.add(new Label("패스 워드 : "));
p2.add(txtPW);
this.add(p2, BorderLayout.CENTER);
}
}
public class ComTest01{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 텍스트 입력 받기 및 처리
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements
ActionListener {
TextField txtContent;
TextArea txtState;
Button
btnAppend;
public FrameEvent( ) {//생성자
setLayout(new BorderLayout( ));
txtContent=new TextField(20);
txtState = new TextArea( );
btnAppend = new Button("추 가" );
this.add(txtContent, BorderLayout.NORTH);
this.add(txtState, BorderLayout.CENTER);
this.add(btnAppend, BorderLayout.SOUTH);
btnAppend.addActionListener(this);
setSize(400,300);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e){
if(txtContent.getText() != ""){
txtState.append(txtContent.getText()+"\n");
txtContent.setText("");
}
}
}
public class ComTest02{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 체크박스 처리
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements ItemListener {
Panel
p;
Checkbox cb1, cb2, cb3;
addWindowListener(new WindowAdapter( ){
TextArea ta;
public void windowClosing(WindowEvent e) {
public FrameEvent( ) {//생성자
dispose();
setLayout(new BorderLayout( ));
System.exit(0);
//패널 객체 생성
}
p=new Panel( );
}
cb1 = new Checkbox("빨간 색");
);
cb2 = new Checkbox("파란 색");
}
cb3 = new Checkbox("초록 색");
p.add(cb1);
public void itemStateChanged(ItemEvent e){
p.add(cb2);
String strState="해제";
p.add(cb3);
if(e.getStateChange( ) == ItemEvent.SELECTED)
strState="선택";
this.add(p, BorderLayout.NORTH);
ta.append(e.getItem( ) +"이 " + strState + "되었습니다.\n");
}
ta=new TextArea( );
}
this.add(ta, BorderLayout.CENTER);
public class ComTest03{
cb1.addItemListener(this);
public static void main(String[] args) {
cb2.addItemListener(this);
new FrameEvent( );
cb3.addItemListener(this);
}
setSize(400,200);
}
setVisible(true);
다양한 컴포넌트 이벤트 처리 – 라디오버튼 처리
import java.awt.*;
import java.awt.event.*;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
class FrameEvent extends Frame implements
ItemListener {
Checkbox cb1, cb2, cb3;
CheckboxGroup colorGrp;
public FrameEvent( ) {
setLayout(new FlowLayout( ));
colorGrp=new CheckboxGroup( );
cb1 = new Checkbox("빨간 색", colorGrp, false);
cb2 = new Checkbox("초록 색", colorGrp, false);
cb3 = new Checkbox("파란 색", colorGrp, false);
this.add(cb1);
this.add(cb2);
this.add(cb3);
cb1.addItemListener(this);
cb2.addItemListener(this);
cb3.addItemListener(this);
setSize(400,200);
setVisible(true);
}
public void itemStateChanged(ItemEvent e){
Object obj =e.getItem( );
if(obj=="빨간 색")
this.setBackground(Color.red);
else if(obj=="초록 색")
this.setBackground(Color.green);
else if(obj=="파란 색")
this.setBackground(Color.blue);
}
}
public class ComTest04{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 콤보상자 처리
import java.awt.*;
import java.awt.event.*;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
class FrameEvent extends Frame implements
ItemListener {
Label la;
Choice c;
TextArea ta;
public FrameEvent( ) {
setLayout(new BorderLayout( ));
c=new Choice( );
c.addItem("사과");
c.addItem("바나나");
c.addItem("딸기");
c.addItem("포도");
ta = new TextArea( );
this.add(c, BorderLayout.NORTH);
this.add(ta, BorderLayout.CENTER);
c.addItemListener(this);
setSize(400,200);
setVisible(true);
}
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == ItemEvent.SELECTED)
ta.append(e.getItem() + "가(이) 선택되었습니다.\n");
}
}
public class ComTest05{
public static void main(String[] args) {
new FrameEvent( );
}
다양한 컴포넌트 이벤트 처리 – 리스트박스 처리
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements
ItemListener {
List li;
TextArea ta;
public FrameEvent( ) {
li=new List( );
li.addItem("사과");
li.addItem("바나나");
li.addItem("딸기");
li.addItem("포도");
public void itemStateChanged(ItemEvent e){
List li=(List)e.getSource( );
String item=li.getSelectedItem( );
ta.append(item + "가(이) 선택되었습니다.\n");
}
}
ta=new TextArea( );
this.add(li, BorderLayout.NORTH);
this.add(ta, BorderLayout.CENTER);
li.addItemListener(this);
setSize(400,200);
setVisible(true);
public class ComTest06{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 리스트박스 다중 선택처
리
import java.awt.*;
import java.awt.event.*;
public void itemStateChanged(ItemEvent e){
String []item;
String total="";
int i;
List li=(List)e.getSource();
item=li.getSelectedItems( );
for(i=0; i<item.length-1; i++)
total = total + item[i] + ", ";
total = total + item[i];
tf.setText(total + "가(이) 선택되었습니다.");
}
class FrameEvent extends Frame implements ItemListener {
List li;
TextField tf;
public FrameEvent( ) {
li=new List(6, true);
li.addItem("사과"); li.addItem("바나나"); li.addItem("딸기");
li.addItem("포도"); li.addItem("멜론");
li.addItem("배");
li.addItem("복숭아"); li.addItem("감");
li.addItem("수박");
tf = new TextField( );
this.add(li, BorderLayout.NORTH);
this.add(tf, BorderLayout.CENTER);
li.addItemListener(this);
setSize(400,150);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
}
public class ComTest07{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 스크롤바 처리
import java.awt.*;
import java.awt.event.*;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
class FrameEvent extends Frame implements
AdjustmentListener {
Scrollbar sc;
TextArea ta;
public FrameEvent( ) {
setLayout(new BorderLayout( ));
public void adjustmentValueChanged(AdjustmentEvent e) {
sc=new Scrollbar(Scrollbar.HORIZONTAL, 0, 5, 0, 100);
ta.append(e.getAdjustmentType( ) + ", " + e.getValue( ) + "\n");
ta=new TextArea( );
}
this.add(sc, BorderLayout.NORTH);
}
this.add(ta, BorderLayout.CENTER);
sc.addAdjustmentListener(this);
public class ComTest08{
setSize(400,150);
public static void main(String[] args) {
setVisible(true);
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 캔버스 등록
import java.awt.*;
import java.awt.event.*;
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
class FrameEvent extends Frame {
Canvas cv;
public FrameEvent( ) {
setLayout(new FlowLayout( ));
cv=new Canvas( );
cv.setBackground(Color.blue);
cv.setSize(100, 50);
add(cv);
setSize(400,150);
setVisible(true);
}
}
public class ComTest09{
public static void main(String[] args) {
new FrameEvent( );
}
}
다양한 컴포넌트 이벤트 처리 – 메뉴 등록 및 처리
import java.awt.*;
import java.awt.event.*;
mitem.addActionListener(this);
setSize(400,150);
setVisible(true);
class FrameEvent extends Frame implements
ActionListener {
Canvas cv;
MenuBar mb;
public FrameEvent( ) {
cv=new Canvas( );
cv.setBackground(Color.black);
add(cv);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
mb=new MenuBar();
setMenuBar(mb);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand( ) == "빨간색")
cv.setBackground(Color.red);
else if(e.getActionCommand( ) == "초록색")
cv.setBackground(Color.green);
else if(e.getActionCommand( ) == "파란색")
cv.setBackground(Color.blue);
}
Menu colorMenu=new Menu("색상");
mb.add(colorMenu);
MenuItem mitem;
mitem=new MenuItem("빨간색");
colorMenu.add(mitem);
mitem.addActionListener(this);
}
mitem=new MenuItem("초록색");
colorMenu.add(mitem);
mitem.addActionListener(this);
mitem=new MenuItem("파란색");
colorMenu.add(mitem);
public class ComTest10{
public static void main(String[] args) {
new FrameEvent( );
}
}
입력관련 이벤트 - KeyListener
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements KeyListener {
TextArea ta ;
TextField txt ;
public FrameEvent(){
txt = new TextField();
txt.addKeyListener(this);
ta=new TextArea();
add("Center",ta );
add("North", txt);
setSize(200,200);
public void keyPressed(KeyEvent e){
setVisible(true);
ta.appendText( e.getKeyChar() +" 가 눌림\n");
}
}
public void keyTyped(KeyEvent e){
public void keyReleased(KeyEvent e){
ta.appendText( e.getKeyChar() +" 가 입력\n");
ta.appendText( e.getKeyChar() +" 를 놓았음\n");
if( e.getKeyChar() = 27 ) {
}
dispose();
}
System.exit(0);
}
class InputEventTest01{
}
public static void main(String [] args){
new FrameEvent( );
}
}
입력관련 이벤트 - MouseListener
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements MouseListener{
public FrameEvent(){
addMouseListener(this );
public void mousePressed(MouseEvent e){
setSize(300,300);
System.out.println("마우스 버튼을 누름");
setVisible(true);
}
public void mouseReleased(MouseEvent e){
addWindowListener(new WindowAdapter( ){
System.out.println("마우스 버튼을 놓음");
public void windowClosing(WindowEvent e) {
}
dispose();
public void mouseEntered(MouseEvent e){
System.exit(0);
System.out.println("마우스가 윈도우 안에 들어옴");
}
}
} );
public void mouseExited(MouseEvent e){
}
System.out.println("마우스가 윈도우 밖으로 나감");
public void mouseClicked(MouseEvent e){
}
System.out.println("마우스 버튼을 클릭함");
}
}
class InputEventTest02{
public static void main(String [] args){
new FrameEvent( );
}
}
입력관련 이벤트 - MouseMotionListener
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements MouseMotionListener {
Label info ;
public FrameEvent(){
info = new Label();
add("North", info);
addMouseMotionListener(this );
setSize(300,300);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
public void mouseDragged(MouseEvent e){
System.exit(0);
info.setText(" 마우스 드래그 ");
}
}
} );
}
public void mouseMoved(MouseEvent e){
info.setText("X = "+e.getX()+" Y= "+e.getY());
}
}
class InputEventTest03{
public static void main(String [] args){
new FrameEvent( );
}
}
입력관련 이벤트 - TextListener
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements TextListener{
Label info ;
TextField txt ;
public FrameEvent(){
info = new Label( );
add("North", info);
txt = new TextField( );
add("South", txt);
txt.addTextListener(this);
setSize(300,100);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);
}
public void textValueChanged(TextEvent e){
info.setText( txt.getText() );
}
}
class InputEventTest04{
public static void main(String [] args){
new FrameEvent( );
}
}
입력관련 이벤트 – TextListener 2
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame {
TextArea ta ;
TextField txt;
public FrameEvent(){
ta=new TextArea();
add("Center", ta);
txt = new TextField();
add("North", txt);
txt.addKeyListener(new KeyAdapter() {
// 입력된 키의 종류 판별, 키가 눌렸을때 발생
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP)
ta.appendText( "위 방향키가 눌림\n");
else if(e.getKeyCode()==KeyEvent.VK_DOWN)
ta.appendText( "아래 방향키가 눌림\n");
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
ta.appendText( "왼쪽 방향키가 눌림\n");
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
ta.appendText( "오른쪽 방향키가 눌림\n");
else
ta.appendText( e.getKeyChar() +" 가 눌림\n");
}
});
setSize(200,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
}
class InputEventTest05{
public static void main(String [] args){
new FrameEvent( );
}
}
Dialog 클래스
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements
ActionListener{
Button btn ;
public FrameEvent( ) {
setLayout(new FlowLayout());
btn = new Button("대화상자 출력");
add(btn);
btn.addActionListener(this);
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
}
public void actionPerformed(ActionEvent e) {
MyDialog dlg=new MyDialog(this);
dlg.show();
}
}
class MyDialog extends Dialog implements
ActionListener{
Button yes, no ;
Panel pan;
public MyDialog(Frame parent){
super(parent, "나의 첫 대화상자");
add("North", new Label("안녕하세요"));
pan = new Panel();
pan.setLayout(new FlowLayout());
yes = new Button("예");
pan.add("West", yes);
yes.addActionListener(this);
no = new Button("아니오");
pan.add("East", no);
no.addActionListener(this);
add("South",pan);
setSize(300,200);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
}
} );
}
public void actionPerformed(ActionEvent e){
dispose(); }
}
public class DialogTest02{
public static void main(String[] args) {
new FrameEvent( );
}
}
FileDialog 클래스
import java.awt.*;
import java.awt.event.*;
class FrameEvent extends Frame implements ActionListener{
Button btn ;
Label lbl;
public FrameEvent( ) {
lbl = new Label();
btn = new Button("대화상자 출력");
add("North",btn);
add("Center",lbl);
btn.addActionListener(this);
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
} );
public void actionPerformed(ActionEvent e) {
}
FileDialog dlg = new FileDialog(this,"파일 다이얼로그",FileDialog.LOAD);
dlg.setSize(300,200);
dlg.show();
lbl.setText(dlg.getDirectory()+dlg.getFile());
}
}
public class DialogTest03{
public static void main(String[] args) {
new FrameEvent( );
}
}
그래픽 – paint 머서드
import java.awt.*;
import java.awt.event.*;
class GraphicFrame extends Frame{
//paint 메서드 오버라이딩
public void paint(Graphics g){
g.drawString("Hello World", 10, 60);
}
public GraphicFrame ( ){
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}});
}
}
public class GraphicTest00{
public static void main (String args[]){
GraphicFrame f = new GraphicFrame();
f.setSize(270,150);
f.setVisible(true);
}
}
그래픽 – Font 클래스
import java.awt.*;
import java.awt.event.*;
class GraphicFrame extends Frame{
Font f;
public void paint(Graphics g){
g.drawString("글꼴체가 변경되나요?", 10, 60);
f = new Font("궁서체", Font.BOLD, 20);
g.setFont(f);
g.drawString("글꼴체가 변경되었네요?", 10, 100);
}
public GraphicFrame ( ){
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}});
}
}
public class GraphicTest01{
public static void main (String args[]){
GraphicFrame f = new GraphicFrame();
f.setSize(270,150);
f.setVisible(true);
}
}
그래픽 – Color 클래스
import java.awt.*;
import java.awt.event.*;
class GraphicFrame extends Frame{
Color redColor;
//색상을 저장하는 객체 변수 선언
public void paint(Graphics g){
redColor=new Color(255, 0, 0);
//빨간색 객체 생성
g.setColor(redColor);
//빨간색을 지정한 후
g.drawString("빨간색 글자", 10, 50); //텍스트 출력
g.setColor(Color.GREEN);
//초록색을 지정한 후
g.drawString("초록색 글자", 10, 80); //텍스트 출력
g.setColor(Color.yellow);
//노란색을 지정한 후
g.drawString("노란색 글자", 10, 110); //텍스트 출력
}
public GraphicFrame ( ){
setBackground(new Color(0,0,0));
//프레임의 배경색을 검정색으로 지정
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}});
}
}
public class GraphicTest02{
public static void main (String args[]){
GraphicFrame f = new GraphicFrame();
f.setSize(270,150);
f.setVisible(true);
}
}
그래픽 – 도형 그리기
import java.awt.*;
import java.awt.event.*;
class GraphicFrame extends Frame{
Color redColor;
public void paint(Graphics g){
redColor=new Color(255, 0, 0);
g.setColor(redColor);
g.drawRect(10, 30, 40, 40);
g.fillOval(70, 30, 40, 40);
int x[]=new int[]{10, 30, 50, 40, 20};
int y[]=new int[]{107, 90, 107, 130, 130};
g.drawPolygon(x, y, x.length);
g.drawRoundRect(70, 90, 40, 40, 10, 10);
g.drawLine(150, 50, 200, 100);
g.drawLine(200, 50, 150, 100);
}
public GraphicFrame ( ){
addWindowListener(new WindowAdapter( ){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}});
}
}
public class GraphicTest03{
public static void main (String args[]){
GraphicFrame f = new GraphicFrame();
f.setSize(270,150);
f.setVisible(true);
}
}
Applet – 간단한 구조의 에플릿 프로그램
import java.applet.*;
import java.awt.*;
public class AppleExam extends Applet
{
public void paint(Graphics g)
{
g.drawString("Applet", 30, 30);
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<APPLET code="ThreadTest07.class" width="300"
height="300"></APPLET>
</BODY>
</HTML>
Applet - 주기
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class AppletExam01 extends Applet implements MouseListener
{
int x, y;
public void paint(Graphics g)
public void init(){
{
addMouseListener(this);
if(x != -1 || y != -1){
System.out.println("# init 메서드 수행");
String str;
}
str="마우스가 클릭된 위치 : "+ x + ","+y;
public void start(){
//System.out.println("# paint 메서드 수행");
x=-1; y=-1;
g.drawString(str, 30, 30);
repaint();
}
//System.out.println("# start 메서드 수행");
}
}
public void mouseClicked(MouseEvent e){
public void stop(){
x=e.getX();
System.out.println("# stop 메서드 수행");
y=e.getY();
}
repaint();
public void destroy(){
}
System.out.println("# destroy 메서드 수행");
public void mouseEntered(MouseEvent e) {
}
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
Thread – 상속에 의한 구현
//멀티스레드를 지원하는 클래스를 만들려면 java.lang.Thread 클래스의 상속
받아야 함
class ThreadExam extends Thread {
ThreadExam(String name){ //생성자에 스레드 이름이 전달인자로 넘어 옴
//ThreadExam의 상위 클래스인 Thread의 생성자( super)를 호출
super(name);//전달인자로 준 값이 스레드의 이름이 됨
}
public void run( ){
for(int num=1; num<=5; num++){
for(int k=1; k<100000000; k++);
//시간을 필요로 하는 작업을 위한 설
정
//스레드의 이름을 얻어 출력함
System.out.println(getName() + " : " + num);
}
}
}
class ThreadTest01{
public static void main (String args[]){
//스레드 클래스를 인스턴스화하여 독립된 스레드를 생성
ThreadExam t1=new ThreadExam("첫 번째 스레드");
ThreadExam t2=new ThreadExam("두 번째 스레드");
//start( ) 메소드를 호출하면 스레드 객체의 run( ) 메소드가 돌면서 스레드
가 실행
t1.start();
t2.start();
}
}
Thread – Runable 인터페이스 상속
//Runnable 인터페이스를 구현하는 클래스를 선언
class RunnableExam implements Runnable {
public void run( ){
for(int num=1; num<=5; num++){
//시간을 필요로 하는 작업
for(int k=1; k<100000000; k++);
//어떤 스레드가 수행중인지 확인하기 위해서 스레드의 이름을 얻어 와서 숫자와 함께 출력해 준다.
System.out.println(Thread.currentThread( ).getName( ) + " : " + num);
}
}
}
class ThreadTest03{
public static void main (String args[]){
//Runnable 인터페이스를 구현하는 클래스의 인스턴스를 생성
RunnableExam R1 = new RunnableExam();
RunnableExam R2 = new RunnableExam();
//스레드를 생성할 때 Runnable 인터페이스를 구현하는 클래스의 인스턴스를 매개변수로 넘겨줌
Thread t1=new Thread(R1, "첫 번째 스레드");
Thread t2=new Thread(R2, "두 번째 스레드");
t1.start();
t2.start();
}
}
Thread – Thread 활용
class RunnableExam implements Runnable {
int count=0;
//run( ) 실행을 언제 멈출 것인지를 결정하는 변수
int num =0;
//num이 count가 도달할 때까지 run( ) 메소드를 수행한다.
boolean timeOut=false; //run 메소드를 빠져 나가기 위한 변수
RunnableExam(int n){ //스레드 객체 생성할 때 넘겨준 전달인자를
count=n;
//count 변수에 저장하여 스레드를 언제까지 동작할 지 결정
}
public void run( ){
while( !timeOu t){
//timeOut이 true가 되면 run 메소드를 빠져 나간다.
try{
//스레드가 번갈아 가면서 차례대로 실행되도록 하기 위해서
Thread.sleep(100); //스레드를 일정시간 동안 대기 상태로 둔다.
}catch(InterruptedException e){
System.out.println(e);
}
num++;
//num 값을 계속 증가 시켜
Thread – Thread 활용
if(count<=num++) //count와 같은지 확인하여 num이 count에 도달하면
timeOut=true;
//while문을 벗어나기 위해서 timeOut에 true를 대입한다.
//스레드의 이름을 얻어 와서 스레드와 이름과 함께 변수 num 값을 출력
System.out.println(Thread.currentThread( ).getName( ) + " : " +num);
}
}
}
class ThreadTest04{
public static void main (String args[]){
RunnableExam R1 = new RunnableExam(12);
RunnableExam R2 = new RunnableExam(15);
RunnableExam R3 = new RunnableExam(10);
Thread t1=new Thread(R1, "첫 번째 스레드");
Thread t2=new Thread(R2, "두 번째 스레드");
Thread t3=new Thread(R3, "세 번째 스레드");
t1.start();
t2.start();
t3.start();
}
}
Thread – Frame에서 Thread 사용하기
import java.awt.*;
import java.awt.event.*;
class GraphicFrame extends Frame implements Runnable
{
int x=1;
public GraphicFrame(){
setBackground(new Color(0,0,0));
setSize(370, 150);
setVisible(true);
}
public void paint(Graphics g){
public void run(){
Dimension d;
while(true){
d=getSize();
try{
g.setColor(Color.yellow);
Thread.sleep(100);
g.drawString("클릭하세요 자바!!", x, d.height/2);
}catch(InterruptedException e){}
if(x>d.width)
repaint();
x=0;
x+=5;
}
}
}
}
class ThreadTest05{
public static void main(String[] args)
{
GraphicFrame f= new GraphicFrame();
Thread t1=new Thread(f);
t1.start();
}
}
Thread – Applet에서 Thread 사용
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ThreadTest06 extends Applet
implements Runnable
{
Thread t1;
int x=100;
public void init(){
t1=new Thread(this);
t1.start();
}
public void run(){
while(true){
repaint();
x+=5;
try{
Thread.sleep(10);
}
catch(InterruptedException e){}
}
}
public void paint(Graphics g){
Dimension d;
d=getSize();
g.setColor(Color.blue);
g.fillOval(x, d.height*3/4, 20, 20);
if(x>d.width)
x=0;
}
};
Thread – Thread 우선 순위
class ThreadExam extends Thread
{
public ThreadExam(String str){
super(str);
}
public ThreadExam(String str, int priority ){
super(str);
setPriority(priority);
}
public void run(){
int i=0;
while(i++<5){
for(int k=1; k<100000000; k++);
System.out.println(getName() + ":" + getPriority());
}
}
};
class ThreadTest07
{
public static void main(String[] args)
{
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
ThreadExam t1= new ThreadExam("첫번째 쓰레드");
ThreadExam t2= new ThreadExam("두번째 쓰레드", Thread.MAX_PRIORITY);
ThreadExam t3= new ThreadExam("세번째 쓰레드", Thread.MIN_PRIORITY);
System.out.println(Thread.currentThread());
t1.start();
t2.start();
t3.start();
}
}
Thread - 동기화
this.obj = obj ;
}
public void run(){
for(int i = 0 ; i < 5 ; i++){
try{
sleep(500);
}catch(InterruptedException e){}
class Atm { //Atm 계좌
// 은행 계좌 잔액
private int money ;
public Atm(int m){ // 생성자
money = m; //계좌 개설시 입금한 금액
}
synchronized void deposit(int amount, String name){
money += amount ;
System.out.println(name +": 입금 금액 : "+ amount);
}
if(flag){
obj.deposit((int)(Math.random()*10+2)*100, getName());
obj.getmoney();
}
else{
obj.withdraw((int)(Math.random()*10+2)*100, getName());
obj.getmoney();
}
flag = !flag ;
synchronized void withdraw(int amount, String name){
if( (money - amount) > 0 ) { // 출금 가능하면
money -= amount ;
System.out.println(name +": 출금 금액 : "+ amount);
}
}
else{
System.out.println(name +": 출금 못함 (잔액이 부족)"); }
}
}
class ThreadTest08 {
}
public static void main(String [] args){
Atm obj = new Atm(1000);
public void getmoney( ){
AtmUser user1 = new AtmUser(obj,"성윤정");
System.out.println("
계좌 잔액은:"+ money) ;
AtmUser user2 = new AtmUser(obj,"전수빈");
}
AtmUser user3 = new AtmUser(obj,"전원지");
}
class AtmUser extends Thread {
boolean flag = false ;
Atm obj ;
public AtmUser( Atm obj, String name){
super(name);
user1.start();
user2.start();
user3.start();
}
}
이미지 – Applet에서 이미지 출력
import java.applet.Applet;
import java.awt.*;
public class ImageExam01 extends Applet {
Image img01=null; //이미지 객체 변수 선언
public void init() {
//해당 이미지 파일을 로딩하여 이미지 객체 생성
img01=getImage(getDocumentBase( ),
"child.jpg");
}
public void paint(Graphics g){
//이미지를 화면에 출력
g.drawImage(img01, 0, 0, this);
}
}
<html>
<head>
<title></title>
</head>
<body>
<applet code="ImageExam01.class" width="1000" height="800"></applet>
</body>
</html>
이미지 – Application에서 이미지 출력
class ImageExam03 extends Frame{
Image []img;
String []filename;
int i;
ImageExam03(){
filename = new String[10];
img = new Image[10];
import java.awt.*;
for(int i=1; i<=10; i++){
import java.awt.event.*;
filename[i-1]="duke"+i+".gif";
img[i-1]=Toolkit.getDefaultToolkit().getImage(filename[i-1]);
class Test09_A{
public static void main(String[] args) }
{
setSize(950, 150);
new ImageExam03();
setVisible(true);
}
}
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
}
public void paint(Graphics g){
for(int i=1; i<=10; i++)
g.drawImage(img[i-1], 90*(i-1)+30, 73, this);
}
}
이미지 - 애니메이션
import java.awt.*;
import java.awt.event.*;
class Test09_A03{
public static void main(String[] args) {
new ImageExam04();
}
}
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
}
class ImageExam04 extends Frame implements Runnable {
public void paint(Graphics g){
Image []img;
g.drawImage(img[index], 70, 70, this);
String []filename;
}
int i;
public void run(){
Thread th;
while(true){
int index = -1;
index++;
ImageExam04(){
if(index>=img.length)
filename = new String[10];
index=0;
img = new Image[10];
try{
for(int i=1; i<=10; i++){
th.sleep(100);
filename[i-1]="duke"+i+".gif";
repaint();
img[i-1]=Toolkit.getDefaultToolkit().getImage(filename[i-1]);
}catch(Exception e){}
}
}
th=new Thread(this);
}
th.start();
}
setSize(950, 150);
setVisible(true);
이미지 – 애니메이션(드블버퍼링)
import java.awt.*;
import java.awt.event.*;
public void update(Graphics g){
Dimension d;
d=getSize();
if(offImage==null){
offImage=createImage(d.width, d.height);
offGraphics=offImage.getGraphics();
}
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, d.width, d.height);
offGraphics.setColor(Color.black);
class Test09_A04{
public static void main(String[] args) {
new ImageExam05();
}
}
class ImageExam05 extends Frame implements Runnable {
Image []img;
String []filename;
int i;
Thread th;
int index = -1;
Image
offImage=null;
Graphics offGraphics=null;
ImageExam05(){
filename = new String[10];
img = new Image[10];
for(int i=1; i<=10; i++){
filename[i-1]="duke"+i+".gif";
img[i-1]=Toolkit.getDefaultToolkit().getImage(filename[i-1]);
}
th=new Thread(this);
th.start();
setSize(950, 150);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
}); }
offGraphics.drawImage(img[index], 0, 0, null);
paint(g);
}
public void paint(Graphics g){
if(offImage != null)
g.drawImage(offImage, 70, 70, this);
}
public void run(){
while(true){
index++;
if(index>=img.length)
index=0;
try{
th.sleep(100);
repaint();
}catch(Exception e){}
} }}
예외 처리 – 0으로 나누기 에러
public class ExcepTest01 {
public static void main(String[] args) {
int a=10, b01=0, b02=2, c=10;
c = a / b02; //(1)
System.out.println(" c -> " + c);
c = a / b01; //(2)
System.out.println(" c -> " + c);
c = a / b02; //(3)
System.out.println(" c -> " + c);
System.out.println(" 정상 종료 " + c);
}
예외 처리 – if 문에 의한 예외 처리
public class ExcepTest02 {
public static void main(String[] args) {
int a=10, b01=0, b02=2, c=10;
if(b02==0) {
System.out.println("예외 상황이 발생하였습니다. ");
}
else{
c = a / b02; //(1)
System.out.println(" c -> " + c);
}
if(b01==0) {
System.out.println("예외 상황이 발생하였습니다. ");
}
else{
c = a / b01; //(2)
System.out.println(" c -> " + c);
}
if(b02==0) {
System.out.println("예외 상황이 발생하였습니다. ");
}
else{
c = a / b02; //(3)
System.out.println(" c -> " + c);
}
}
}
예외 처리 – try ~ catch 문에 의한 예회처리
public class ExcepTest03 {
public static void main(String[] args) {
int a=10, b01=0, b02=2, c=10;
System.out.println("try 구문 수행하기 전 c -->" + c);
try {
System.out.println("try 구문으로 들어옴");
System.out.println("나누기 연산하기 전 try 구문");
c = a / b02; //(1)
System.out.println(" (1) c -> " + c);
c = a / b01; //(2)
System.out.println(" (2) c -> " + c);
c = a / b02; //(3)
System.out.println(" (3) c -> " + c);
}
catch(Exception e) {
System.out.println("예외가 발생하여 Exception 객체가 잡음->" + e);
}//예외처리 끝
System.out.println("try 구문을 수행한 후 c-->" + c);
}
}
예외 처리 – try ~ catch 문에 의한 예회처리 2
public class ExcepTest04 {
public static void main(String[] args) {
int a=10, b01=0, b02=2, c=10;
System.out.println("try 구문 수행하기 전 c -->" + c);
try {
System.out.println("try 구문으로 들어옴");
System.out.println("나누기 연산하기 전 try 구문");
c = a / b02; //(1)
System.out.println(" (1) c -> " + c);
c = a / b01; //(2)
System.out.println(" (2) c -> " + c);
c = a / b02; //(3)
System.out.println(" (3) c -> " + c);
}
//하위 클래스로 특수한 사항에 대한 예외를 처리하는 클래스를 우선적으로 기술함
catch(ArithmeticException e) {
System.out.println("예외가 발생하여 ArithmeticException객체가 잡음->" + e);
}
//반면 위에 기술된 catch 구문에서 처리하지 못한 예외만 Exception 객체가 처리함
catch(Exception e) {
System.out.println("예외가 발생하여 Exception 객체가 잡음->" + e);
}
System.out.println("try 구문을 수행한 후 c-->" + c);
}
}
예외 처리 – finally 문
public class ExcepTest05 {
public static void main(String[] args) {
int a=10, b01=0, b02=2, c=10;
System.out.println("try 구문 수행하기 전 c -->" + c);
try {
System.out.println("try 구문으로 들어옴");
System.out.println("나누기 연산하기 전 try 구문");
c = a / b02; //(1)
System.out.println(" (1) c -> " + c);
c = a / b01; //(2)
System.out.println(" (2) c -> " + c);
c = a / b02; //(3)
System.out.println(" (3) c -> " + c);
}
catch(ArithmeticException e) {
System.out.println("예외가 발생하여 ArithmeticException객체가 잡음->" + e);
}
catch(Exception e) {
System.out.println("예외가 발생하여 Exception 객체가 잡음->" + e);
}
finally{
System.out.println("try/catch 구문에 대한 정리 작업 c-->" + c);
}//예외처리 끝
System.out.println("try 구문을 수행한 후 c-->" + c);
}
}
예외 – 인위적 예외 발생
public class ThrowTest02{
public static void exp(int ptr){
if(ptr == 0)
throw new NullPointerException(); //프로그래머가 예외 발생시킴
}
public static void main(String[] args) {
exp(0);
}
}
예외 처리 – 인위적, 사용자 정의 예외 처리
class UserException extends Exception {
public UserException(String str){
super(str);
}
}
class ExcepTest09 {
public static void main(String [] args){
try{
int a = -11 ;
if( a <= 0){
//사용자가 정의한 예외를 인위적으로 발생시킴
throw new UserException("양수가 아닙니다.");
}
}
catch(UserException e){
System.out.println( e.getMessage());
}
}
}
입출력 – 기본 입력
public class IOTest00{
public static void main(String[] args) throws Exception {
int data=0;
System.out.println("문자를 입력하세요. 끝내려면 [Ctrl]+Z를 누르세요.");
data = System.in.read();
while(data != -1){
System.out.print((char)data);
data = System.in.read();
}
}
}
입출력 – 기본 입력 2
import java.io.*;
public class IOTest01 {
public static void main(String[] args) {
int data=0;
System.out.println("문자를 입력하세요. 끝내려면 [Ctrl]+Z를 누르세요.");
try{
InputStream myIn=System.in;
while( (data = myIn.read( )) != -1)
System.out.print((char)data);
}catch ( IOException e ){
e.printStackTrace();
}
}
}
입출력 – 기본 출력
import java.io.*;
public class IOTest0A{
public static void main(String[] args) throws Exception {
int data=0;
System.out.println("문자를 입력하세요. 끝내려면 [Ctrl]+Z를 누르세요.");
OutputStream myOut = System.out;
while((data = System.in.read()) != -1){
myOut.write(data);
}
}
}
입출력 – File 객체를 이용한 파일 정보 출력
import java.io.*;
import java.util.*; //Date
class FileTest01 {
public static void main(String [] args) throws Exception {
File file=null;
//File 객체 변수 선언
byte []byteFileName=new byte[100];
//파일 이름을 입력받기 위한 byte 배열 선언
String fileName;
//byte 배열에 읽어온 파일 이름을 String으로 변환하여 저장
System.out.print("파일명 -> ");
//키보드에서 입력받은 값을 byteFileName에 저장, read(byte[] b)가 호출된 것임
System.in.read(byteFileName);
//키보드에서 입력받은 값을 fileName 변수에 저장, 이때 공백이 생길 수 있으므로 trim으로 제거
fileName=new String(byteFileName).trim();
file = new File(fileName);
//File 클래스의 인스턴스를 생성
System.out.println( fileName + " 파일 상세 정보 *****" );
System.out.println("절대 경로 : " + file.getAbsolutePath());
System.out.println("표준 경로 : " + file.getCanonicalPath());
System.out.println("생성일 : " + new Date(file.lastModified()));
System.out.println("파일 크기 : " + file.length() );
System.out.println("읽기 속성 : " + file.canRead() );
System.out.println("쓰기 속성 : " + file.canWrite() );
System.out.println("파일 경로 : " + file.getParent() );
System.out.println("숨김 속성 : " + file.isHidden() );
}
}
입출력 – 파일 내용 출력
import java.io.*;
class FileType01{
public static void main(String[] args) {
int data=0;
int size=0;
if (args.length <1){
System.out.println("USAGE : java FileType01 file_name");
System.exit(0);
}
String path=args[0];
try{
File f=new File(path);
FileInputStream fis=new FileInputStream(f);
//FileInputStream fis=new FileInputStream(path);
while((data=fis.read()) != -1){
System.out.write((char)data);
size++;
}
System.out.println("\n파일크기 : "+size+" byte");
}
catch(FileNotFoundException fe) {
fe.printStackTrace();
}
catch(IOException ie){
ie.printStackTrace();
}
}
}