My footsteps

code 실습 / 1️⃣3️⃣ 본문

국비수업/CODE

code 실습 / 1️⃣3️⃣

밀김 2023. 3. 6. 15:13
728x90

 
 
 
 

 
 
 
 
✏️  다음 각 절차를 따라 작성하시오. 
// 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); //값:널포인트 에러(안에 아무런 값이 없는데 참조하라고 해서 오류)
       }
}


 
 
 

 

 

728x90

'국비수업 > 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