final변수는 한번초기화하면 바뀌지 않는 변수를 말한다.
보통 변수이름을 대문자로 적는다.

스타크래프트에서 유닛을 업그레이드하면 이미 있는 유닛뿐만 아니라
새로 생성되는 유닛들도 업그레이드된 채로 생성된다.

static 변수를 이용하여 업그레이드하면 가능.

package stars;

class Zealot {
	final String NAME; // 한번 초기화하면 Read Only , 대문자로 적는 것이 약속
	int hp;
	static int attack = 10;

	public Zealot(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

class Dragoon {
	final String NAME;
	int hp;
	static int attack = 15;

	public Dragoon(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

public class GameStart {
	public static void main(String[] args) {
		// 공격력 업그레이드하기
		Zealot.attack++;

		// 질럿 생성하기
		Zealot z1 = new Zealot("1번질럿");
		System.out.println(Zealot.attack);
	}
}

'Programming Language > Java' 카테고리의 다른 글

자바 생성자 자동 생성하는법  (0) 2020.03.27
자바 생성자와 오버로딩  (0) 2020.03.27
200323 // STACK, 표현식, DAEMON  (0) 2020.03.23
이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23

stack이 들고있으면 지역변수

stack안에 없으면 모두 전역공간

---------------------------

for () {}  와 같이 메서드와 비슷하게 생긴것들은
표현식이라고 한다.(호출이 필요없이 바로 실행된다)

--------------------------------

while
어느정도 시간을 정해서 돌려야한다.
그렇지 않으면 자원을 너무 많이 사용한다.

daemon (데몬 프로세스) - 프로그램에서 끝없이 반복되는 기능 (감시)
리스너 - 감시한 것을 듣는 역할

---------------------------------

'Programming Language > Java' 카테고리의 다른 글

자바 생성자와 오버로딩  (0) 2020.03.27
자바 final과 static 변수 이해하기  (0) 2020.03.27
이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23
자바for문 2의 승수 구하기, 구구단  (0) 2020.03.23

 

 

 

 

package array03;

public class StringEX01 {
	public static void main(String[] args) {
		String s1 = new String("나무");
		String s2 = new String("나무");
		System.out.println(s1 == s2);

		String s3 = "나무";
		String s4 = "나무";
		System.out.println(s3 == s4);

		System.out.println(s1 == s4);

		System.out.println(s1.equals(s4));

	}
}

 

String은 첫글자가 대문자이기때문에 클래스다

하지만 String s = new String("나무"); 
->heap에 만들어짐

값을 바꿔도 주소가 그대로 값만 바뀐다

String s = "나무";  
-> StringConstantPool에 만들어짐

String은 heap안의 StringConstantPool에 저장된다(자바만의 특징)
heap과 다르게
StringConstantPool에 같은 값이 있는지 찾고
있다면 같은 주소를 저장하고
없다면 새로운 주소를 만들어서 저장 

String s = "나무";
s =  s+ "안녕";
s 주소에 넣는 것이 아니라
새로운 주소를 만들어서 저장

문자열을 계속 더하고 싶다면
새로운 주소를 만들지 않는 new로 바꿔서 사용하는 것이 좋다

check.equals("n")
는 처음에 == 으로 값을 비교하고 같으면 break
주소값이면 주소로 찾아가 서로 비교함.

 

 

포문

 

2의 승수 구하기

package array03;

public class ArrayEx01 {

	public static void main(String[] args) {
		// 반복 stack
		int num = 1;
		for (long i = 2L; i <= 4000000000000000000L; i = i * 2) { // 콤마가 없으니 인수가 1개, 세미콜론은 구분자
			System.out.println("2의 " + num + "승 : " + i);
			num++;
		}
	}
}

 

 

구구단

package array03;

public class Gugudan {

	public static void main(String[] args) {
		for (int n = 2; n < 10; n++) {
			for (int i = 1; i < 10; i++) {
				System.out.println(n + "*" + i + "=" + (n * i));
			}
			System.out.println();
		}
	}
}

(2단부터 9단까지)

 

 

구구단 단수 지정

package array03;

import java.util.Scanner;

public class Gugudan2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("구구단을 시작합니다.");
		boolean confirm = true;
		while (confirm) {
			System.out.println("숫자를 입력하세요. 2~9");
			int num = sc.nextInt();

			for (int i = 1; i <= 9; i++) {
				System.out.println(num + "*" + i + "=" + (num * i));
			}
			System.out.println("계속 진행할까요? y or n");
			String check = sc.next();
			if (check.equals("n")) {
				//break; // 가장 가까운 반복문을 빠져나갈때 사용
				confirm = false;
			}
		}
		System.out.println("구구단 프로그램 종료");
	}
}

 

 

 

 

'Programming Language > Java' 카테고리의 다른 글

이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23
자바 value passing, reference passing  (0) 2020.03.23
자바 static, heap, stack 영역 구분  (0) 2020.03.20
자바 함수 쓰는 위치  (0) 2020.03.20
package ch03;

class Data {
	int num = 10;
}

public class MethodEx02 {
	
	static void 증가(int num) {
		num++;
		System.out.println("증가 num : " + num);
	}
	
	// 값이 소중하다면 return을 하거나 heap에 옮겨담아야한다
	static int 증가1(int num) {
		num++;
		System.out.println("증가 num : " + num);
		return num;
	}
	
	static void 감소(int num) {
		num--;
		System.out.println("감소 num : " + num);
		
	}
	
	static void 감소1(Data d) {
		d.num--;
		System.out.println("감소1 num : " + d.num);
		
	}
	
	public static void main(String[] args) {
		
		int myNum = 100;
		증가(myNum); // call by value passing
		System.out.println("myNum : " + myNum);
		
		myNum = 증가1(myNum); // call by value passing
		System.out.println("myNum : " + myNum);
		
		
		Data data = new Data();
		감소(data.num); // call by value passing
		System.out.println("data.num : " + data.num);
		
		
		감소1(data); // call by reference passing
		System.out.println("data.num : " + data.num);
		
	}
}

 

프로그램을 실행하면 메모리에 올라가고 프로세스가 된다
(파일 -> 프로세스)

cpu는 메모리에 올라온 것만 읽을 수 있다

------------------------


JVM이 실행되면

1. 클래스를 메모리에 로딩

2. static 을 메모리(static영역)에 올림

3. main(함수) 을 실행

----------------------


static은 프로그램을 실행할때 메모리(static영역)에 로딩되고 프로그램을 종료하면 없어진다.

stack은 함수를 실행할때 메모리(stack영역)에 로딩되고 함수를 종료하면 없어진다.

heap은 static이 아닌 것들을 부를 때 메모리(heap영역)에 로딩되고, 직접 종료 시키면 없어진다. 
(JVM에서는 필요없는 구간부터 알아서 없애줌)

 

예제 코드

package ch03;

class 자판기 {

	static String cola = "코카콜라";
	static String water = "물";

	static String 작동(int money) {
		System.out.println("자판기가 작동합니다.");
		System.out.println(money + "원을 받았습니다.");
		return cola;
	}
}

class MemoryExample {

	
	int money = 500;

	int 용돈받기(String msg) {
		System.out.println(msg);
		System.out.println("용돈을 받았습니다.");
		return money;
	}

	public static void main(String[] args) {
		MemoryExample me = new MemoryExample();
		int money = me.용돈받기("아빠 만수무강하세요.");
		String output = 자판기.작동(money);
		System.out.println(output + "을 받았습니다. 잘 마실께요!!");
	}
}

 

 

작동순서

 

----------------- 
(1) 자판기 (static) 
----------------- 
cola = "코카콜라"; 
water = "물";  
작동() 


--------------------------- 
(2) MemoryExample (static) 
--------------------------- 
main() 


-------------------- 
(3) main (stack영역) 
-------------------- 
me 
money = me.용돈받기() 
output = 자판기.작동() 


-------------------- 
(4) me (heap영역) 
-------------------- 
money = 500 
용돈받기() 


-------------------- 
(5) me.용돈받기 (stack영역) 
-------------------- 
msg = "아빠 만수무강하세요."


-------------------- 
(6) 5번영역 소멸 
-------------------- 


-------------------- 
(7) 자판기.작동(stack영역) 
-------------------- 
money = 500



-------------------- 
(8) 7번 영역 소멸 
-------------------- 



-------------------- 
(9) 4번 영역 소멸 
-------------------- 



-------------------- 
(10) 3번 영역 소멸 
-------------------- 



-------------------- 
(11) 1, 2번 영역 소멸 
--------------------

package ch03;

// 자바 기준
// 메소드(함수)는 클래스 안에 작성할 수 있다.
// 메소드(함수)는 메소드 (함수)안에 작성할 수 없다.

public class MethodEx01 {

	// 전역공간

	// void는 리턴하지 않는다는 뜻이다

	static int add(int n1, int n2) {
		int result = n1 + n2;
		// System.out.println("result : " + result);
		return result;
	}

	public static void main(String[] args) {
		
		int num = MethodEx01.add(5, 3);
		System.out.println("결과 : " + num);

	}
}

// 자바 기준
// 메소드(함수)는 클래스 안에 작성할 수 있다.
// 메소드(함수)는 메소드 (함수)안에 작성할 수 없다.

 

 

 

+ Recent posts