My footsteps
code 실습 / 1️⃣3️⃣ 본문
✏️ 다음 각 절차를 따라 작성하시오.
// 1-1. nums라는 이름으로 정수 15개를 저장할 수 있는 배열 객체를 생성한다.
// 1-2. res/data.txt 파일에 저장된 값들을 nums 배열에 로드한다.
{
// 코드를 작성하는 공간
System.out.println(“로드 완료”);
}
int[] nums = new int[15];
{
FileInputStream fis = new FileInputStream("res/data.txt");
Scanner fsc = new Scanner(fis);
//배열,콘솔에 쏴주는 과정
for(int i=0; i<nums.length; i++) {
nums[i] = fsc.nextInt();
System.out.println(nums[i]);
}
System.out.println("로드 완료");
}
// 1-3. 0~14 범위의 랜덤값 2개를 얻어서 그 위치의 값을 서로 바꾼다. 그것을 50번 반복한다.
{
// 코드를 작성하는 공간
System.out.println(“번호 섞기 완료”);
}
{
Random rand = new Random();
for(int r=0; r<50; r++) {
int a = rand.nextInt(15);
int b = rand.nextInt(15);
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
System.out.println("번호 섞기 완료");
}
// 1-4. res/data-out.txt 파일로 배열의 값들을 저장
{
// 코드를 작성하는 공간
System.out.println(“저장 완료”);
}
{
FileOutputStream fos = new FileOutputStream("res/data-out.txt");
PrintStream ps = new PrintStream(fos);
//파일에 쏴주는 과정
for(int i=0; i<nums.length; i++) {
ps.printf("%d ", nums[i]);
//파일에 직접적으로 쏴주려면 이 과정이 꼭 필요하다
System.out.println(nums[i]);
}
System.out.println("저장 완료");
}
✏️Heap냥이-1

public class HeapCat {
public static void main(String[] args) {
Cat cat1; // line 1
cat1 = new Cat(); // line 2
Cat cat2 = cat1; // line 3
cat2.age = 3; // line 4
}
}
class Cat {
int age;
}
JVM 메모리 영역의 Heap이 뭘까요? 한번 알아보아요
: 참조형 객체가 저장되는곳
System.out.print(cat1.age);의 출력이 어떻게 되나요?
: 3
왜 이런일이 일어나는지 line1부터 line4까지 무 조 건! 그림으로 그려보세요.
:

Heap에는 어떤 것들이 생성될까요? 기본타입, 배열도 Heap에 생성될까요?
: 기본타입,참조변수는 스택에 생성, 배열과 객체는 힙에 생성
다음 링크는 딥한 학자 분들을 위해 참고용 공식문서에요
https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-2.html#jvms-2.5
✏️ Heap냥이-2

다음 코드도 똑같이 한줄한줄 그림을 그려가며 이해해보세요
public class HeapCat {
public static void main(String[] args) {
Cat[] cats;
cats = new Cat[3];
cats[0] = new Cat();
cats[0].age = 1;
cats[2] = new Cat();
Cat cat1 = cats[0];
Cat cat2 = cats[1];
System.out.println(cat1.age); // ?
System.out.println(cat2.age); // ?
}
}


public class HeapCat {
public static void main(String[] args) {
Cat[] cats; //cat배열에 cats참조변수 생성되는데 객체가 만들어지지 않았으니 그냥 이름만 존재
cats = new Cat[3]; //cats참조변수가 new cat배열을 참조한다.new cat의 0,1,2이름은 cats
cats[0] = new Cat();//cats 0번째 배열에서 새로운 객체가 생성됨
cats[0].age = 1; //cats 0번째 배열에 생성된 객체에 age=1값이 들어감
cats[2] = new Cat();//cats 2번째 배열에서 새로운 객체가 생성됨
Cat cat1 = cats[0];//cats[0]을 cat1이 참조함
Cat cat2 = cats[1];//cats[1]을 cat2가 참조함
System.out.println(cat1.age); //값:1(cat1이 cats[0]을 참조했는데 cats[0].age = 1이기 때문에
System.out.println(cat2.age); //값:널포인트 에러(안에 아무런 값이 없는데 참조하라고 해서 오류)
}
}
'국비수업 > CODE' 카테고리의 다른 글
code 실습 / 1️⃣5️⃣ (0) | 2023.03.08 |
---|---|
code 실습 / 1️⃣4️⃣ (0) | 2023.03.07 |
code 실습 / 1️⃣2️⃣ (0) | 2023.03.03 |
code 실습 / 1️⃣1️⃣ (0) | 2023.03.02 |
code 실습 / 🔟 (0) | 2023.02.28 |