본문 바로가기

JAVA/기본다지기

JAVA 6일차 필기

ch04loop 패키지에 새로운 클래스 L03DoWhile.java 생성

package com.javalesson.ch04loop;

public class L03DoWhile {
    public static void main(String[] args) {
        //do while과 while의 차이
        //do while은 조건과 상관없이 무조건 최초 1회 실행한다.
        int i = 10;
        System.out.println("while 실행");
        while(i<10){
            System.out.println("i: "+i);  //실행되지 않음
            i++;
        }
       
        System.out.println("do while 실행");
        i = 10;
        do{
            System.out.println("i: "+i); //i: 10을 출력하고 빠져나감
        }while(i<10);
    }//main end
}//class end


ch04loop 패지키에 새로운 클래스 L04Loop.java 생성

package com.javalesson.ch04loop;

public class L04Loop {
    public static void main(String[] args) {
        //반복문에 이름을 붙이는 것
        Loop1: for(int i=1;i<=9;i++){
            Loop2: for(int j=2;j<=9;j++){
                if(j==5){ break Loop2;}
                System.out.print(j+"x"+i+"="+i*j+"\t");
            }
            System.out.println();
        }
    }//main end
}//class end



새로운 패키지 ch05method 생성하고 L01Method.java 생성

package com.javalesson.ch05method;

public class L01Method {
    L01Method(){
        System.out.println("L01Method 호출");
    } //public을 지우면 default 접근지정자로 패키지 내부에서만 쓸수있음
    static void stackMethod(){
        System.out.println("stackMethod 호출");

        heap();  //static영역에서 호출 하려면 아래와 같이 호출

        L01Method heap = new L01Method();//new 연산자로 heap메모리에 L01Method()객체를 생성하여 

        //메모리에 할당. -> 변수heap이 위치를 참조 

        //일반 메소드는 thread가 실행될 때 heap영역에 메모리를가진다.

        //heap();에 오류가 뜨는 이유는 참조 할 메모리 위치가 없기 때문이다.

        heap.heap();//객체 heap이 가지고 있는 자원 heap()을 실행하는 설계

    }
    void heapMethod(){
        System.out.println("heapMethod 호출");

        this.heap(); //this는 해당 클래스 내부의 static이 아닌 것 접근
        L01Method.heap();//class명으로 접근하는 것은 static만 가능하다.   

        //heap()을 사용할 수 있는 이유

        //heapMethod()가 메모리에 할당되는 시점은 new 연산자로 heap메모리에 생성할 때 이다.

        //new 연산자로 생성된 객체 내부에는 heapMethod()와 heap()이 모두 존재한다.

        //때문에 this(객체내부 접근) 접근자로 this.heap()을 접근할 수 있다.

        L01Method.stackMethod();

        //stackMethod()는 static으로 선언된 메소드로 JVM이 class 파일을 실행 준비할 때 stack메모리에 할당.

        //stackMethod()는 이미 메모리에 할당되서 참조할 위치가 있다.

        //그래서 class명.method();으로 접근 가능

    }
    public static void main(String[] args) {
        //heapMethod(), stackMethod()를 호출해 보시오
        //heap메모리를 참조하는 메소드는 new 연산자로 객체를 생성후 호출
        //stack메모리를 참조하는 메소드는 바로 호출가능/같은 스택영역에 있어서
       
        //stack메모리에 있는 static 함수
        L01Method.stackMethod(); //다른 클래스 메소드 접근시 사용
        stackMethod(); //클래스 내부이기 때문에 가능
       
        L01Method heap = new L01Method();//생성자 호출
        //new 연산자로 생성된 객체는 heap 메모리에 저장
        heap.heapMethod();
        heap.stackMethod();//호출은 가능하지만 권장하지 않는다.
        //The static method stackMethod() from the type L01Method should be accessed in a static way
    }//main end
}//class end


Stack(RAM) 

JVM이 class A를 실행하면서 미리 할당하는 자원

Heap(Hard) 

main이 thread를 실행하기 위해 필요한 자원을 heap에 할당하는 행위

main함수는 JVM을 호출한다.

(stack영역에 main이 있는 이유)

JVM(Stack영역이 heap영역보다 훨씬 빠름)

static main()

static stackM()

A.stackM() -> static 영역을 접근하는 접근법

GC(선언하고 사용하지 않으면 바로 삭제

JVM을 heap영역에서 돌리지 않는 이유)

객체

(new A())

A.stackM()  Stack은 

Stack과 heap 모두에서 호출가능

heapM()은 class가 가지고 있는 설계도일 뿐이며 

단독으로 실행 될 수 없다.


new A()로 객체를 생성 하고

A.heapM() 으로 호출해주어야한다

내가 static으로 선언한 변수나 Method는 JVM이 실행될 때 Stack메모리에 할당된다.

static이 아닌 경우에는 main에서 객체를 생성할 때 메모리를 할당.


ch05method 패키지에 새로운 클래스 L05Parameter.java 생성

package com.javalesson.ch05method;

public class L02Parameter {
    public void paramDemo(int score, String param_name){
        char grade = 'A';
        switch(score/10){
        case 10: case 9: grade = 'A'; break;
        case 8: grade = 'B'; break;
        case 7: grade = 'C'; break;
        case 6: grade = 'D'; break;
        default : grade = 'F'; break;
        }
        char plus = ' ';
        plus = (((score+5)/10-score/10)==1)||score==100?'+':' ';//조건을 더해서 100점일때 A+가 되도록해라
        System.out.println(param_name+" 학생의 성적은 "+grade+plus+"입니다.");
    }//성적 프로그램
    public static void main(String[] args) {//args 파라미터->매개변수
        int score = 100;
        String name = "홍길동";
        //학생성적을 출력하자.
        //paramDemo() 매개변수를 준다.
        new L02Parameter().paramDemo(score, name);
        //L02Parameter p = new L02Parameter();
        //p.paramDemo(score);
    }//main end
}//class end


ch05method 패키지에 새로운 클래스 L06MultiParameter.java 생성

package com.javalesson.ch05method;

import java.util.Scanner;

public class L03MultiParameter {
    public static void main(String[] args) {

        LoginTest L = new LoginTest(); // 생성자 호출

        String id; int pw;

        boolean login = false;

        do{

        try{ //id, pw에 잘못된 자료형을 입력했을 시 예외처리

            Scanner scan = new Scanner(System.in);

            //Scanner가 밖에 있을 때와 안에 있을 때의 차이
            //Scanner가 enter를 가지고  있어서 while을 실행시 id입력창을 enter로 넘긴다.
            //while문 반복시 새로운 객체를 생성하면 비밀번호 입력시 남아 있던 enter가 새로운 객체에서는
            //존재하지 않는다.(새로 생성자를 호출하면 인스턴스가 초기화된다.)

            System.out.print("아이디는: ");
            id = scan.nextLine();
            System.out.print("비밀번호는: ");
            pw = scan.nextInt();
            new LoginTest().printLogin(login = L.loginDemo(id,pw)); // 출력메소드(참거짓메소드(매개변수))

            }catch (Exception e){ }

        }while(!login); // 로그인이 성공할 때 까지 반복
        //LoginTest.loginDemo()를 호출해서 login 성공하시오
        //printLogin()를 호출해서 상태를 출력하시오
    }//main end
}//class end
class LoginTest{
    public boolean loginDemo(String input_id, int input_pw){  //ID,비번을 받아서 대조, 참거짓 판별
        String id = "javalesson"; //회원 ID

        int pw = 1234; //비밀번호
        if(id.equals(input_id) && pw==input_pw){  // 참인지 거짓인지 판별
            return true; //맞으면 true를 반환
        }else{
            return false; //틀렸으면 false를 반환
        }
    }
    public void printLogin(boolean log){ //위 메소드에서 참 거짓을 받아 출력하는 메소드
        if(log){           
            System.out.println("login 성공"); //참이면 성공 출력
        }else{
            System.out.println("login 실패"); //거짓이면 실패 출력
        }
    }
}


L06MultiParameter.java 심화 -> printLogin에 매개변수를 주지 않고 출력해보기


package com.javalesson.ch05method;

import java.util.Scanner;

public class L03MultiParameter {
    public static void main(String[] args) {

        LoginTest L = new LoginTest(); // 생성자 호출

        String id; int pw;

        do{

        try{ //id, pw에 잘못된 자료형을 입력했을 시 예외처리

            Scanner scan = new Scanner(System.in);

            System.out.print("아이디는: ");
            id = scan.nextLine();
            System.out.print("비밀번호는: ");
            pw = scan.nextInt();

            L.loginDemo(id,pw)  //값을 받아 참 거짓 판별

            L.printLogin(); //로그인 성공실패 여부 출력

            }catch (Exception e){ }

        }while(!L.login); // 로그인이 성공할 때 까지 반복
    }//main end
}//class end
class LoginTest{

    boolean login; //전역변수 : class의 성격

    public boolean loginDemo(String input_id, int input_pw){  //ID,비번을 받아서 대조, 참거짓 판별
        String id = "javalesson"; //회원 ID

        int pw = 1234; //비밀번호
        if(id.equals(input_id) && pw==input_pw){  // 참인지 거짓인지 판별
            login = true; //맞으면 true를 반환
        }else{
            login = false; //틀렸으면 false를 반환
        }
    }
    public void printLogin(){ //매개변수를 받지 않고 출력하기
        if(login){           
            System.out.println("login 성공");
        }else{
            System.out.println("login 실패");
        }
    }
}

미리보기

*JSP(Java Server Page)

기본적으로 Java에 대해서 알아야한다.

c:/main/main.jsp->요청->html페이지를 보내줌->

www.naver.com

파일의 이름은 www.naver.com으로 매핑되어있다.

html페이지 출력



'JAVA > 기본다지기' 카테고리의 다른 글

JAVA 8일차 필기  (0) 2016.08.10
JAVA 7일차 필기  (0) 2016.08.09
JAVA 5일차 필기  (1) 2016.08.05
JAVA 4일차 심화  (0) 2016.08.04
JAVA 4일차 필기  (0) 2016.08.04