1. 참조 타입(reference type)
- 종류 : 배열, 열거, 클래스, 인터페이스
- 참조 타입 변수 -> 스택 영역에 생성되어 힙 메모리 영역의 번지(주소) 값 갖음.
- 주소 통해 객체를 참조한다
2. 참조 변수 == , != 연산
-> 힙 영역의 객체 주소 ; 주소 값을 비교하는 것이 됨 / 동일 주소 값 => 동일한 객체 참조
3. 참조 타입 변수 null
-> 힙 영역의 객체를 참조하지 않는다
-> null 값을 가질 경우 참조할 객체가 없으므로 -> 객체는 힙 메모리 영역에 생성X / 변수만 스택에 생성되 NULL 값 가짐
-> null 값을 가진 참조 타입 변수 ==, != 연산은 기본 타입과 동일
-> 참조 타입 변수가 null 값 가진 상황에서 프로그램 실행 경우(프로그램 실행 중 참조 타입 변수가 null값 가진 경우)
=> NullPointerException 예외 발생
4. String 타입
-문자열 저장하는 참조 타입
- 문자열 리터럴이 동일한 경우 객체 공유(new 연산자로 새로운 객체 생성 X -> 대입 연산자로 같은 문자열 저장)
- String 객체의 equals() 메소드 사용해 객체 상관없이 문자열 비교
String x; // 기본값은 null x = "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 = {80, 90, 94, 33}; //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 = { 100, 200, 300}; 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 = { {95, 88}, {93, 20} }; 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 |