반응형

1. 참조 타입(reference type)

- 종류 : 배열, 열거, 클래스, 인터페이스

- 참조 타입 변수 -> 스택 영역에 생성되어 힙 메모리 영역의 번지(주소) 값 갖음.

- 주소 통해 객체를 참조한다 


2. 참조 변수 == , != 연산

-> 힙 영역의 객체 주소 ; 주소 값을 비교하는 것이 됨 / 동일 주소 값 => 동일한 객체 참조


3. 참조 타입 변수 null

-> 힙 영역의 객체를 참조하지 않는다 

-> null 값을 가질 경우 참조할 객체가 없으므로 -> 객체는 힙 메모리 영역에 생성X / 변수만 스택에 생성되 NULL 값 가짐

-> null 값을 가진 참조 타입 변수 ==, != 연산은 기본 타입과 동일

-> 참조 타입 변수가 null 값 가진 상황에서 프로그램 실행 경우(프로그램 실행 중 참조 타입 변수가 null값 가진 경우)

=> NullPointerException 예외 발생


4. String 타입

-문자열 저장하는 참조 타입

- 문자열 리터럴이 동일한 경우 객체 공유(new 연산자로 새로운 객체 생성 X -> 대입 연산자로 같은 문자열 저장)

- String 객체의 equals() 메소드 사용해 객체 상관없이 문자열 비교 

String x; // 기본값은 null 
 
= "hello"// 선언한 x에 문자열 값을 대입, " " (쌍따옴표) 사용
 
String y = "hello"// 선언과 동시에 문자열 저장 x == y 는 true
 
String z = new String("hello"); // 새로운 객체 생성, y == z 는 false 
 
if ( y.equals(z) ) {
 System.out.println("true"); // true 출력
 }
cs


5. 배열 

- 같은 타입 데이터를 메모리상에 연속적으로 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조

- 인덱스  :첨자값, [](대괄호) 사용

// 대괄호의 위치 차이
int[] intArray; //타입[] 변수(배열명);
int intArray[]; //타입 변수(배열명)[];
 
//null로 초기화
String[] stringArray = null;
 
//값 목록을 가진 배열 생성
String[] names = {"홍길동","전지현","지수","보람"};
int[] scores = {80909433};
 
//new 연산자로 바로 배열 객체 생성
double[] doubleArray = new double[5]; //배열의 길이 지정 [0-4]
 
//컴파일 에러 
String[] names = null;
 
//배열 변수 선언
names = new String[] {"홍길동","전지현","지수","보람"};
cs


-{ } : 주어진 값들을 가진 배열 객체를 힙 메모리 영역에 생성, 배열 객체의 번지(주소) 리턴

- 배열 변수는 리턴된 번지를 저장하여 참조

- names[0] = "홍길동"


- 배열의 값 바꾸기 

String[] names = {"홍길동""전지현","지수","보람"};
System.out.println("names[0] >" + names[0]); //홍길동
names[0= "혜원";
System.out.println("names[0] >" + names[0]); //혜원
 
//배열 값 바꾸기는 " = " 대입 연산자 
cs


-배열 길이 

-배열에 저장할 수 있는 전체 항목 수

-배열 객체의 length 필드 (field) 읽어야 한다

-필드(field) : 객체 내부의 데이터

- 배열의 마지막 요소의 인덱스 배열 길이 : -1

int[] intArray = { 100200300};
int len = intArray.length;
System.out.println("배열 intArray의 길이는 : " + len);
cs


-다차원 배열 

/*타입[][] 변수 = new 타입[][]*/
int[][] scores = new int[2][];
scores[0= new int[2]; //01
scores[1= new int[3]'    //012
cs


/*타입[][] 변수 = {{값1, 값2..}, {값1, 값2..}}*/
int[][] scores = { {9588}, {9320} };
int scores = scores[0][0]; //95
int scores = scores[1][1]; //93
cs


6.열거 타입 선언

public enum 열거타입이름//첫 문자는 대문자, 나머지는 소문자 {
    열거 상수 선언 //열거 타임의 값 사용, 관례적으로 모두 대문자 작성 / 여러 단어 구성될 경우 단어 사이 밑줄(_)
                  //열거 객체로 생성, 해당 열거 타입의 열거 상수 개수만큼 객체가 열거 타입 객체 생성
}
 
public enum Month {
    JANUARY,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE,
    JULY,
    ...  //Month의 경우 JANUARY부터 DECEMBER까지 12개의 열거 상수는 힙 영역에 Month 객체로 
}
cs


7. 열거 타입 변수 

//열거타입 변수 : null 값도 저장할 수 있다.
Month thisMonth;
Month birthMonth;
 
Month thisMonth = Month.JUNE;
cs

-열거 상수 Month.JUNE과 thisMonth 변수는 서로 같은 Month 객체를 참조 : true 가 된다.


Month month1 = Month.JUNE;
Month month2 = Month.MARCH;
 
//name() : 객체가 가지는 문자열 리턴
String month1 = thisMonth.name(); //month = "JUNE"
 
//ordinal() : 전체 열거 객체 중 몇 번째 열거 객체 인지 알려줌
int ordinal = thisMonth.ordinal(); // ordinal = 5
 
//compareTo() : 주어진 열거 객체 기준으로 전후 몇 번째 위치하는지 비교 
int result1 = month2.compareTo(month1); //-3(매개값이 열거객체보다 순번이 빠르다면)
int result2 = month1.compareTo(month2); //3
 
//valueOf() : 매개값으로 주어진 문자열과 동일한 문자열 가지는 열거 객체 리턴
Month thisMonth = Month.valueOf("JUNE");
 
//values() : 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴
Month[] months = Months.values();
for(Month month : months){
    System.out.println(month);
}//January ... december
cs


## 각 학생들의 점수를 입력받아 최고 점수 , 평균점수 구하는 프로그램

package firstproject;
import java.util.Scanner;
 
public class HelloWorld {
    public static void main(String[] args) {
        boolean run = true;
        int studentNum = 0;
        int[] scores = null;
        Scanner scanner = new Scanner(System.in);
        
        while(run) {
            System.out.println("============");
            System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
            System.out.println("============");
            System.out.println("선택>");
            
            int selectNo = scanner.nextInt();
            
            if(selectNo==1) {
                System.out.println("학생수>");
                studentNum=scanner.nextInt();
                scores = new int[studentNum];
            }
            else if(selectNo==2) {
                for(int i = 0; i <studentNum; i++) {
                    System.out.println("scores["+i+"]>");
                        int score = scanner.nextInt();
                        scores[i] = score;
                }
            }
            else if(selectNo==3) {
                for(int i =0; i<studentNum; i++) {
                    System.out.println("scores["+i+"]"+scores[i]);
                }
            }
            else if(selectNo==4) {
                int max = 0;
                int sum = 0;
                double avg = 0;
                for(int i=0;i<studentNum; i++) {
                    sum+=scores[i];
                    if(scores[i]>max)
                        max=scores[i];
                }
                avg=(double)sum/studentNum;
                System.out.println("최고 점수 :"+max);
                System.out.println("평균 점수 :"+avg);
            }
            else if(selectNo==5) {
                run = false;
                System.out.println("프로그램 종료");
            }
        }
    }
}
cs


반응형

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

제주에서 자바_Week2_1  (0) 2019.07.22
제주에서 자바_Week1  (0) 2019.07.20
4. 클래스  (0) 2019.05.29
2. 조건문 & 반복문  (0) 2019.05.27
1. 타입, 연산자  (0) 2019.05.27

+ Recent posts