메모리는 컴퓨터의 저장 역역
cpu는 연산하는 영역
자바 -> 설계 -> 프로그램 시작
(+) 패키지 : 자바 파일이 모여 있는 폴더
// 3번지의 4Byte 공간에 10을 넣음
int 3번지 = 10;
// 이렇게 쓰면 불편하기 때문에 변수를 생성함
// 변수는 알아서 번지를 설정
int n3 = 10;
package ch01;
public class VarEx01 {
public static void main(String[] args) {
boolean b1 = true; // 박스 = 1;
boolean b2 = false; // 박스 = 0;
int n1 = 1000; // 나 메모리에 4바이트 공간이 필요해
double d1 = 1000.1; // 나 메모리 8바이트 공간이 필요해
char c1 = '가'; // 나 메모리에 2바이트 공간이 필요해
//변수 : 메모리에 저장 할 값 , 변할 수 있는 수
System.out.println(c1);
System.out.println(n1);
n1 = 50; // 해당 번지의 값을 변경
System.out.println(n1);
}
}
package ch01;
// 1. 자바의 모든 코드는 클래스 내부에 존재해야 한다.
//int n3 = 30;
public class VarEx02 {
// n2를 실행하려면 n2를 main stack안에 넣거나 , n2를 static으로 선언
static int n2 = 20;
//자바는 실행전에 static 이라고 쓰여져 있는 모든 것을 static공간에 할당
public static void main(String[] args) {
int n1 = 10; // 현재라인이 실행될 때 10이라는 숫자가 n1라는 메모리 공간에 할당
System.out.println(n1);
System.out.println(n2);
}
}
그러나 20 , 'A'라는 것을 모두 저장할 수 있는 Type은 없다
=> 클래스 자료형을 이용
package ch01;
//MyVar은 클래스 자료형 = 개발자가 만드는 커스텀 자료형
// 여러가지 데이터를 가지고 있는 클래스를 Beans라고 부름
class MyVar{
static int n1 = 10;
static char c1 = 'A';
}
class MyVar2{
static int n1 = 20;
static char c1 = 'B';
}
public class VarEx03 {
static int num = 500;
public static void main(String[] args) {
System.out.println(MyVar.n1); // MyVar의 static영역 n1을 찾음
System.out.println(MyVar.c1); // MyVar의 static영역 c1을 찾음
System.out.println(VarEx03.num); // VarEx03의 static영역 num을 찾음
System.out.println(MyVar2.n1);
System.out.println(MyVar2.c1);
}
}
package ch01;
class Note1{
static int num = 1;
static int time = 1015;
static int price = 3000;
}
class Note2{
static int num = 2;
static int time = 1020;
static int price = 1000;
}
// 노트가 100개 필요하면 클래스 자료형을 100개 만들어야 하나???? -> 불편
//단점
//static은 프로그램 시작 전 ~ 프로그램 종료 까지 메모리에 존재
//많은 데이터를 저장하고 싶으면 클래스 자료형을 여러개 만들어야함
//따라서 static은 정적이다
//동적으로 해결할 수 있는 방법을 찾아야함
public class VarEx04 {
public static void main(String[] args) {
System.out.println();
}
}
동적인 방법
package ch01;
// VarEx05의 static영역-> main
// Note의 static 영역 -> x
class Note {
int price = 2000;
}
public class VarEx05 {
public static void main(String[] args) {
//new Note(); // heap 공간에 Note클래스가 가지고 있는 모든 데이터를 할당해! (대신 static은 제외하고 )
Note note1 = new Note(); // main stack에 note1을 할당하고 거기에 heap 공간에 할당한 것을 가리키게해
Note note2 = new Note(); // main stack에 note2을 할당하고 거기에 heap 공간에 할당한 것을 가리키게해
Note note3 = new Note(); // main stack에 note3을 할당하고 거기에 heap 공간에 할당한 것을 가리키게해
int age = 25; // main stack
System.out.println(note1.price);
note3.price = 30000;
System.out.println(note3.price);
}
}