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 |