4 13 Javaクリーンアップ


TIP


1.Quiz 3 5コメント


昨日intに選ばれた方も良かったのですが、ユーザーが文字を入力中にエラー
そこで、Stringが受け取った次のコードに変更!
package com.jinho.Lesson03;

import java.util.Scanner;

public class code02 {
    public static void main(String[] args) {

        System.out.println("[메뉴] 1:검색 2:등록 3:삭제 4:변경 ");
        Scanner sc = new Scanner(System.in);
        String selected = sc.nextLine();
        switch (selected) {
            case "1":
                System.out.println("검색합니다");
                break;
            case "2":
                System.out.println("등록합니다");
                break;
            case "3":
                System.out.println("삭제합니다");
                break;
            case "4":
                System.out.println("변경합니다");
                break;
            default:
        }


    }
}

2.scanfを入力する2つの方法

package com.jinho.Lesson03;

import java.util.Scanner;

public class code1 {
    public static void main(String[] args) {

        int selected1;
        int selected2;
        int selected3;
        int selected4;

        //입력하는 방법 1
        selected1 = new Scanner(System.in).nextInt();
        selected2 = new Scanner(System.in).nextInt();

        //입력하는 방법 2 (성능상 조금더 이득이 있음)
        Scanner sc = new Scanner(System.in);
        selected3 = sc.nextInt();
        selected4 = sc.nextInt();

        //출력 확인
        System.out.println(selected1);
        System.out.println(selected2);
        System.out.println(selected3);
        System.out.println(selected4);


    }
}

クラスの使い方2の方が性能的に優れているので、これをメインに書きましょう

整列


1.イニシアチブの初期化


他の変数がコンパイルを初期化しないときにエラーが発生しました.
整列自動初期化
  • インチアレイ-->024579182
  • リングアレイ-->null
  • ブール型配列-->false
  • デュアルモードアレイ-->0.0
  • 長方形アレイ-->0 L
  •  package com.jinho.Lesson03;
    
    public class code04 {
        public static void main(String[] args) {
    
            //c언어에서는 초기화 안해도 실행은 되고 쓰레기값이 들어가지만 자바는 초기화 안하면 오류난다
    
            int x;
            //System.out.println(x); 오류난다 따라서 변수는 무조건 초기화 해야한다
            //다만 배열은 자동으로 전부 0으로 초기화 한다
            int[] score = new int[5];
            System.out.println(score[0]);
    
        }
    
    }

    2.戻り配列サイズ


    Javaには、配列サイズを返す機能->配列があります.length
    package com.jinho.Lesson03;
    
    public class code03 {
       public static void main(String[] args) {
    
           //c언어 에서 배열 int score[5]; 만들기와 동일함
    
           int[] score;        //배열 변수 선언
           score = new int[5]; //요소의 작성과 대입
           int count = score.length; //배열 크기 반환
    
           score[0] = 1;
    
           System.out.println(score[0]);
           System.out.println(count);
    
       }
    }

    stringの文字列は、スペースと文字を含まない1文字でカウントされます.
    package com.jinho.Lesson03;
    
    public class code10 {
       public static void main(String[] args) {
           //string 의 문자열은 공백,문자 할거없이 1문자로 카운트한다
    
           String s = "test test";
           int count = s.length();
    
           System.out.println(count); //9
       }
    }

    2 D配列のサイズは?次の例を検証します.
    package com.jinho.Lesson03;
    
    public class code11 {
       public static void main(String[] args) {
           int[][] scores = {{10, 20, 30}, {30, 40, 50}};
    
           System.out.println(scores.length);
           System.out.println(scores[0].length);
       }
    }
    

    つまり点数です.lengthは{10,20,30}を束と見なしている

    3.省略手法


    配列内の値(new int[])は省略しても問題ありません
    「int[]配列名」とともに使用している場合のみ省略できます
    package com.jinho.Lesson03;
    
    public class code05 {
       public static void main(String[] args) {
    
           //생략기법
    
           int[] score1 = new int[]{20, 30, 40, 50};
           int[] score2 = {20, 30, 40, 50};
    
           for (int i = 0; i < score1.length; i++) {
               System.out.printf("%d  ", score1[i]);
           }
           System.out.println("");
           for (int i = 0; i < score2.length; i++) {
               System.out.printf("%d  ", score2[i]);
           }
    
       }
    }
    

    4.異常発生


    配列サイズを超えた要素の使用中に例外が発生しました
    
    package com.jinho.Lesson03;
    
    public class code06 {
        public static void main(String[] args) {
    
            //범위를 벗어난 요소를 이용할 때 예외발생  --> 에러!!
            int[] names = new int[3];
            names[3] = 10;
            System.out.println(names[3]);
        }
    }
    

    5.各ドア


    通常for文を使用できます.
    並びの中で最初から最後まで使う場合は、forを使うとドアごとに便利です
    各メソッドの使用例
    package com.jinho.Lesson03;
    
    public class code07 {
        public static void main(String[] args) {
            //배열 사용하면 앞에서 변수로 여러개 선언한 프로그램을 훨씬 간단하게 작성가능
            int[] scores = {20, 30, 40, 50, 80};
            int sum = 0;
    
            /*
            일반 for 문
            for (int i = 0; i < scores.length; i++) {
                sum += scores[i];
            }
             */
    
            //for each 문
            //for 문 돌면서 value 에 scores[0]~scores[4] 가 하나씩 들어간다
            //무조건 처음부터 끝가지 다 돌아야만한다
            for (int value : scores) {
                sum += value;
            }
    
            int avg = sum / scores.length;
            System.out.println("총점 " + sum);
            System.out.println("총점 " + avg);
    
        }
    }
    

    6.アレイメモリ


    Javaでは,配列はc言語でmallocを動的に割り当てるような感覚で行われる.
  • アレイ->リファレンスタイプ、
  • int->オリジナルタイプ
  • 次のコードを実行すると、どのような値が得られますか?
    package com.jinho.Lesson03;
    
    public class code08 {
        public static void main(String[] args) {
            //과정 아래 그림 참고
            int [] a = {1,2,3};
            int [] b;
            b = a;
            b[0] = 100;
            System.out.println(a[0]);
    
    
            //즉 배열은 reference type 이다
            // int 등등은 primitive type 이다
        }
    }
    答えは100
    コードの手順を下図に示します.

    以下の添付の場合(nullをaに代入する)は何が起こりますか?
    
    package com.jinho.Lesson03;
    
    public class code08 {
        public static void main(String[] args) {
            //과정 아래 그림 참고
            int [] a= {1,2,3};
            int [] b;
            b=a;
         
            a = null; //아무런 메모리도 가리키지않게됨
            a[0] = 10; //오류발생
            System.out.println(a[0]);
        }
    }

    上図のようにエラーが発生しました

    7.ゴミ収集(gc)


    newが確保する要素は通常の変数とは異なるため,ブロックが終了しても寿命は終了しない.
    ブロック内で生成された配列は、その後、任意の方法で読み書きできず、メモリを消費します.
    つまり、実際にはメモリのゴミです.
    そうでないメモリはプログラマーがクリーンアップする必要があります.
    しかしJavaはゴミ収集(GC,ゴミ収集)という設備を
    使用しないメモリの整理