19일차 강의 정리


1. 익명클래스(Anonymous Class)

익명이란 이름이 없는 것을 의미 - 한번만 사용하고 버려지는 객체를 사용할때 유용

참조할 수 있는 참조변수가 없어서 객체가 생성되고 두번다시 객체에 접근불가

클래스 이름이 없어서 생성자 또한 없다

- 인터페이스

소스1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Ex01 {
 
    interface Inner{
        int a=11;
        void inFunc01();
        void inFunc02();
    }
    
    public static void main(String[] args) {
        // 익명클래스-찍어낸 객체만필요 ,이름이 필요없다.
        Ex01 me = new Ex01();
        Inner inn = me.func01();
        inn.inFunc01();
        inn.inFunc02();
        System.out.println(inn.a);
 
    }//main end
    public Inner func01(){
        System.out.println("func01 start");
        System.out.println("func01 end");
        return new Inner(){
            int a=88;        //(자료,정보)은닉성
            public void inFunc01(){
            System.out.println(a+"내부클래스의 메소드 호출1");    
            }
            @Override
            public void inFunc02() {
                System.out.println(a+"내부클래스의 메소드 호출2");    
            }
        };
    }//func01() end
 
}//class end
cs

결과1

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
interface Anony01{
    void func01();
}
 
public class Ex02 {
    public static void main(String[] args) {
        Anony01 me = new Anony01(){
            @Override
            public void func01(){
                System.out.println("인터페이스를 통한 객체 생성1");
            }
        };        //;반드시 필요
        me.func01();
        
        System.out.println("----------------------------------");
        new Anony01(){
            @Override
            public void func01(){
                System.out.println("인터페이스를 통한 객체 생성2");
            }
        }.func01();
    
    }//main end
 
}//class end
cs

결과2


- 추상클래스

소스1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
abstract class Anony02{        //추상클래스
    int a=1000;
    public Anony02(){}
    void func02(){
        System.out.println("추상클래스입니다");
    }
    abstract void func02(int a);
    
}
 
public class Ex02 {
    public static void main(String[] args) {
 
        System.out.println("----------------------------------");
        Anony02 me2 = new Anony02(){//생성자를 호출하면서 구현도 함께하기위해{};한다
            int a=4;                    //필드는 공용값 사용하지말아라 여기서
            void func02(int a){        //구현과 실행문장
                System.out.println("인자"+a+",,"+this.a+"를 전달 받은 추상클래스의 메소드");
            }
        };        //객체 생성
        me2.func02();    //참조변수(객체의 주소)를 통해서 기능 호출
        me2.func02(3);
        System.out.println(me2.a);        
    }//main end
 
}//class end
cs

결과1

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
abstract class Am03 extends Object{
    String msg="super";
    public Am03(){
        super();
        System.out.println("Am03 class 생성자 호출");
    }
    void func01(){
        System.out.println("추상class(Am03) func03()");
    }
    abstract void func02();        //추상 메소드
}
 
public class Ex03 {
    
    public static void main(String[] args) {
        Am03 me = new Am03(){
            String msg="this";    //이것을 가리킬수있는 방법이없다(필드는 오버라이드가 되지않아서)
            @Override
            void func02() {
                System.out.println("자식class 재정의func03()");                
            }
            void func03(){}        //없는 기능 구현해도 사용x
            
        };
        me.func01();
        me.func02();
        System.out.println("msg:"+me.msg);
    }//main end
}//Ex03class end
cs

결과2



'* Programming > JAVA' 카테고리의 다른 글

DAY20 Object클래스,리플렉션  (0) 2016.08.02
DAY20 this/super  (0) 2016.08.02
DAY19 내부클래스,로컬클래스  (0) 2016.08.01
DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01

19일차 강의 정리


1. 내부클래스 (클래스 안의 클래스)

소스1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Ex03 {    
    
    static class Inner03{    //내부클래스
        static int a=100;
        int b=50;
        static class Inin03{
            static int a=10;
        }
        public Inner03(){    //내부클래스 생성자
        }
        
        static void func01(){
            System.out.println("Inner class func01() call");
        }
        void func02(){
            func();
            System.out.println("Inner class func02() call");
        }
        
    }//Inner03 class end
    
    public static void main(String[] args) {
        
//        com.hb.am.Ex03 me = new com.hb.am.Ex03();    //패키지 경로가 숨겨져있다
//        com.hb.am.Ex03.func();        //패키지 경로,내클래스명 숨겨있다
        Ex03.Inner03.func01();
        Inner03 in = new Inner03();    //내부클래스 객체생성
        in.func02();
        System.out.println(Ex03.Inner03.a);
        System.out.println(in.b);    //non-static
        System.out.println(Ex03.Inner03.Inin03.a);    //static 이면 접근 쉽다
        
    }//main end
 
    public static void func(){
        System.out.println("Ex03 class func02() call");
    }//func() end
 
}//Ex03 class end
cs

결과1

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Ex04 {    
    int a = 4;
    int b = 5;
 
    class Inner04{    //내부클래스
        int a=100;
//        static int b=50;    //static은 class가 static일경우에 사용가능
        
        public Inner04(){    //생성자
        }
        void func01(){
            System.out.println("Inner04 class func01()");
            System.out.println("Ex04-b :"+b);
            func02();
        }
//        static void func02(){
//            System.out.println("Inner04 class func02()");
//        }
    }
    
    public static void main(String[] args) {
        Ex04 me = new Ex04();
        Ex04.Inner04 inme;
        inme = me.new Inner04();        //Inner클래스의 생성자 객체 생성
        System.out.println(inme.a);        //Inner클래스의 변수 출력
        inme.func01();                    //Inner클래스의 메소드 호출
        
    }//main end
    
    public void func02(){
        System.out.println("Ex04 class func02");
    }
 
}
cs

결과2

2. 로컬클래스 (메소드 안의 클래스)

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Ex05 {
    int a=5;
    public Ex05(){    }    //Ex05 생성자
    
    public static void main(String[] args) {
        Ex05 me = new Ex05();
        me.func01();
        me.func02(4);
 
    }//main end
 
    void func01(){
        System.out.println("Ex05-func01()");    
    }
    
    void func02(final int m){    //인자도 상수화시키면 LocalC에서 사용가능
        System.out.println("Ex05-func02()");
        int i=10;    //LocalC에서 사용이 불가능(but 상수화(final)시키면 가능
        
        //LocalClass
        class LocalC{
            int i=11;    //오류가 나지 않는다
            LocalC(){
                
            }
            void func03(){
                System.out.println("로컬class-func03()-"+m);    //인자를 받은 지역변수를 사용할수없다(자바 ver.1.8에서는 가능)
            }
            void func04(){
                System.out.println("로컬class-func04()-"+a);    //필드 사용가능
            }
            void func05(){
                System.out.println("로컬class-func04()-"+i);    
            }
        }//LocalC class end
        
        LocalC inn = new LocalC();
        inn.func03();
        inn.func04();
        inn.func05();
        
        return;        //return 해서 메인에서 사용하고싶은 경우에 interface를 사용해서한다(소스 가져오기!!)
    }//func02() end
}//Ex05 class end
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY20 this/super  (0) 2016.08.02
DAY19 익명클래스  (0) 2016.08.02
DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01
DAY18 예외처리  (0) 2016.08.01

19일차 강의 정리


예외처리 다른소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
public class Ex01 {
    public static void main(String[] args) {
 
        System.out.println(">>>"+func1());
        
    }//main end
 
    public static String func1(){
        Scanner sc = new Scanner(System.in);
        System.out.print("금액 : ");
        int won=0;
        String input=null;
        String output=null;
        try{
            input=sc.nextLine();
            won = Integer.parseInt(input);
            output = won+"원";
        }catch(Exception e){
            e.printStackTrace();
            return input;
        }
        return output;
    }//func1() end
    
}//class end
cs

결과

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;
 
public class Ex02 extends Exception{
    public Ex02(){
        super("내클레스로 에러처리");
    }
    public Ex02(String s){
        super(s);
    }
    public static void main(String[] args) throws Exception{    //try 쓰지않아도 throws Exception이 생략된것이라 오류처리가 된다
        System.out.print("숫자 입력 : ");
        try{
            func01();
        }catch(NumberFormatException e){
            System.out.println("NumberFormatException에러 처리 완료");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }//main end
 
    public static void func01() throws Exception{
        Scanner sc;
        sc = new Scanner(System.in);
        String input = sc.nextLine();
        int su = Integer.parseInt(input);
        System.out.println("입력한수는 "+su);
        Ex02 exc = new Ex02("Ex02클래스는 에러처리가능");
//        Exception exc = new Exception();
        throw exc;    //Exception에러를 던진다
    }//func01() end
}//class end
cs

결과2


'* Programming > JAVA' 카테고리의 다른 글

DAY19 익명클래스  (0) 2016.08.02
DAY19 내부클래스,로컬클래스  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01
DAY18 예외처리  (0) 2016.08.01
DAY17 추상클래스&인터페이스  (0) 2016.07.26

Q. 숫자입력 : 

0000000 -> 0,000,000

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    
    System.out.print("숫자 입력 : ");
    String num = sc.nextLine(); 
 
    //반복문, StringBuffer이용
    StringBuffer sb = new StringBuffer(num);
    for (int i = sb.length() - 3; i > 0; i = i - 3) {
        sb.insert(i, ",");     //i위치에 콤마(,) 추가           
    }
    System.out.println("********결과********");
    System.out.println(sb.toString());
}
cs

결과


실수0000000.000 -> 0,000,000.000

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {
 
    Scanner sc = new Scanner(System.in);
    System.out.print("숫자 입력 : ");
    String num = sc.nextLine();
    
    String[] s = num.split("\\.");    //'.' 기준으로 잘라서 저장
 
    num=s[0];
    for (int i = num.length()-3; i > 0; i-=3) {
        String tmp1 = num.substring(0, i);
        String tmp2 = num.substring(i);
        num=tmp1+","+tmp2;
    }
    System.out.println("********결과********");
    System.out.println(">>> "+num+"."+s[1]);    //실수입력시 
}
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY19 내부클래스,로컬클래스  (0) 2016.08.01
DAY19 예외처리2  (0) 2016.08.01
DAY18 예외처리  (0) 2016.08.01
DAY17 추상클래스&인터페이스  (0) 2016.07.26
DAY17 상속2(+캡슐화, 다형성)  (0) 2016.07.26

18일차 강의 정리


1. 예외처리

try { 

~~~

}catch(에러 e){

~~~

}

소스1

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
    
    int[] arr = {1,2,3,4,5};
    
    try {
        for(int i=0; i<=10; i++) {
            System.out.println("arr[" + i + "]=" + arr[i]);
        }
    } catch (ArrayIndexOutOfBoundsException ex) {     //예외처리->배열 인덱스오류(RuntimeException 도 가능)
        System.out.println(ex);
    }    
}
cs

결과1

-> System.out.println(ex);

-> ex.printStackTrace(); //콘솔창에 에러이름과 에러난 줄등의 상세한 정보출력

-> System.out.println(ex.toString());

-> System.out.println(ex.getMessage());

소스2-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int input = 0;
        
        try{
        System.out.print("숫자를 입력해주세요>>");
            input = Integer.parseInt(sc.nextLine());
            System.out.println("input: "+3/input);
//        }catch(NumberFormatException ex){
        }catch(RuntimeException ex){        //catch도 순서중요, 넓은 범위로 내려가는것이 좋다
            System.out.println(ex.getMessage());
            System.out.println("숫자!!!!!!!!!!!!!");
//        }catch(ArithmeticException ex){        //0으로 나누는지
//            System.out.println("0으로 나눌수 없습니다");
//            ex.printStackTrace();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
}//main end
cs

결과2-1

소스2-2

catch 순서 중요 -> Exception 을 상속하는 하위의 오류가 아래에 나와있으면 오류

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int input = 0;
    
    try{
    System.out.print("숫자를 입력해주세요>>");
        input = Integer.parseInt(sc.nextLine());
        System.out.println("input: "+3/input);
//        }catch(NumberFormatException ex){
//        }catch(RuntimeException ex){        //catch도 순서중요, 넓은 범위로 내려가는것이 좋다
//            System.out.println(ex.getMessage());
//            System.out.println("숫자!!!!!!!!!!!!!");
    }catch(ArithmeticException ex){        //0으로 나누는지
        System.out.println("0으로 나눌수 없습니다");
        ex.printStackTrace();
    }catch(Exception ex){
        ex.printStackTrace();
    }
    
}//main end
cs

결과2-2

소스3 (메소드에서 오류 던지기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) throws Exception {
    
    try {
        func01();
    } catch (NumberFormatException e) {        //다중
        System.out.println("오류-숫자값이 아닙니다");
    } catch (ArithmeticException e) {
        System.out.println("오류-0으로 나눌수없습니다");
    } catch (Exception e) {
        e.printStackTrace();
    }
}//main end
 
public static void func01() throws Exception {     //오류시 던져
    System.out.println(Integer.parseInt("a"));    
    System.out.println(3 / 0);
}//func01() end
cs

결과3

func01() 의 내용 변경

1
2
3
4
public static void func01() throws Exception {     //오류시 던져
    System.out.println(Integer.parseInt("1"));    
    System.out.println(3 / 0);
}//func01() end
cs

결과3-1

소스4 (finally)

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    try{
        System.out.println(3/0);
    }catch(Exception e){
        System.out.println("오류");
        return;
    }finally{    //반드시 실행한다
        System.out.println("1프로그램을 종료합니다.");
    }
    System.out.println("2프로그램을 종료합니다.");
}
cs

결과4

소스5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;
 
class NumOutException extends Exception{        //Exception 을 상속하는 하위의 오류 class
    NumOutException(String msg){
        super(msg);
    }
}
 
public class Ex04 {
    public static void main(String[] args) {
        try{
            func01();
        }catch(NumOutException e){
            System.out.println("나이입력오류");
            e.printStackTrace();
        }
    }//main end
    
    public static void func01() throws NumOutException{
        Scanner sc = new Scanner(System.in);
        
        System.out.print("나이를 입력 : ");
        int age = Integer.parseInt(sc.nextLine());
        
        if(age<1){
            throw new NumOutException("나이를 " + age+"살로 입력했음");
        }
        
        System.out.println("당신의 나이는 "+age+"세 입니다");
    }//func02 end
}//class end
cs

결과5


*내가 만든 에러

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Am05 extends Exception{
    public Am05(){
        super("내가만든에러");
    }
    @Override
    public String toString(){
        return "오류메시지";
    }
    public void func01(){
        System.out.println("이렇게도 가능");
    }
}
 
public class Ex05 {
    public static void main(String[] args) {
        Ex05 me = new Ex05();
        try{
            me.func01(1);
            System.out.println("여기까지 수행");
        }catch(Am05 e){
            System.out.println(e.toString());
            System.out.println(e.getMessage());
            e.func01();
            e.printStackTrace();
        }catch(Exception e){
            System.out.println("~~");
            e.toString();
        }
    }//main end
    void func01(int a) throws Am05{
//        System.out.println(3/0);
        Am05 ex = new Am05();
        throw ex;
    }//func01() end
}//class end
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01
DAY17 추상클래스&인터페이스  (0) 2016.07.26
DAY17 상속2(+캡슐화, 다형성)  (0) 2016.07.26
DAY16 상속1  (0) 2016.07.26

+ Recent posts