자바 참조타입 / 배열 /

- 메모리의 번지를 값으로 지정
- 기본타입(스택영역에 이름과 값이 함께 저장)과 다르게 힙영역(주방의 조리대역할)에 저장된 메모리 주소를 참조받음
메소드(클래스/static) 영역 : (static) , 로딩된 클래스 바이트 코드 내용을 분석 후 저장 / 모든 스레드가 공유
힙 영역 : 객체 / 배열 저장 , JVM이 사용하지 않는 객체를 G.C를 실행시켜 자동 삭제해주는 영역
배열 생성
new 연산자
값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶을때
타입[] 변수 = new 타입[길이];
intArray : 스택영역으로 , 저장될 수 있는 공간을 확보하는
String[] names = new String[10]; : String배열을 생성했다면 name 0~9까지 모두 null값으로 초기화된다.
배열 길이
배열변수.lenght;
int num1 = Integer.parselnt(strNum1 ); : 문자열을 정수로 변환
인덱스
- 각 요소에 자동으로 붙는 번호
- int[] score = new int[5];
- score의 길이는 5이지만 인덱스는 0 ~ 4까지이다
== . !=
- 기본타입 : 변수의 값이 같은지 다른지 조사
- 참조타입 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사 ( 동일한 주소값을 갖는지)
.equals
값이 같은지 비교 (주소가 아닌)
문자열을 비교할 때 사용
NullPointerException : 예외
참조 변수가 null값을 가지고 있을 때
null인 변수에 값을 지정했을때
null인 변수를 지정할때
String 타입 : 문자열
문자열을 저장하는 클래스 타입
- 하나씩 저장 ___String name; name = “ 신용권”;
- 동시에 저장 ___ String name2 = “신용권”;
- ⇒ 문자열 리터럴이 동일하다면 하나의 힙 영역에 저장됨
- 바로 대입이 아닌, new 연산자 이용
- new라는 연산자가 힙이라는 하나의 영역을 갖게한다.
- 문자열 리터럴이 동일하더라도 new라는 연산자를 이용하면 각각의 힙 영역에 저장할 수 있다.
- 비교 연산자의 값이 달라질 수 있으니 주의
- String타입에 null; 대입할 수 있따.
- null을 대입하면 더이상 참조하지 않는다.
배열 타입 [ ]
똑같은 타입의 값을 한 곳에 모아놓고 저장하고 작업하는 자료구조
여러개의 데이터들의 저장 위치를 인덱스 부여해 접근
- 변수 선언과 동시에 값 목록 대입 : 인덱스와 접근 “ 변수 [인덱스주소] : “ + 변수[0]);
- 변수 선언 후 값 목록 대입
- new 연산자로 배열 생성 ,
- 공간만 만들어 놓을시 int 값이 기본값
배열 복사
- for문으로 복사 (이미 만들어진 클래스 = 대입 )
- System.arraycopy ( 변수, 몇번째부터, 어떤배열에다가 , 몇번째인덱스부터, 몇개를 카피할것인가);
향상된 for문 __(변수 : 메소드)
- 배열 및 컬렉션의 항목 요소를 순차적으로 처리
- 인덱스 이용하지 않고 바로 반복
(배열이 가진 모든 값만큼 반복하고 싶을 때 사용)
열거 타입__(한정된)
상수를 묶어놓고 쓸때 사용 (실무에선잘 사용은 안함)
import
import java. until* :
import 패키지명.클래스명;
import 패키지명.*; -> 모든 클래스
import문은 패키지문과 클래스 선언의 사이에 선언한다.
- 패키지 선언 2. import문 3. 클래스 정의
- 참조타입은 null값으로 초기화 할 수 있다
- 클래스 변수에 만들어지는 블록
- 메소드 변수에 만들어지는 블록 = 로컬변수
스택영역에 생성되고 실행 블록이 끝나면 소멸됨
- 배열 객체 = 힙 에 저장
- 변수 = 메소드 “
- String타입의 메모리 주소값 비교는 ==
- 불린타입의 초기값은 false임
- 나눗셈 avg = (double (sum) / count
배열을 이용한 예제풀이
Scanner scn = new Scanner(System.in);
int i, cnt = 0; ___ while문의 초기식 (for문도 초기식 사용)
cnt ++; ___ 증감해라
5개의 정수를 입력받아
int[] arr = new int[5];
int i;
차례로 출력해라
arr [i] = scn.nextlnt();
System.out.print(arr[i] +” “);
문자 5개를 저장할 수 있는 배열을 선언
char[] arr = new char[10];
int i;
문자를 이어서 출력해라
arr [i] = scn.next().charAt(0);
System.out.print(arr[i]);
세번째, 다섯번째와 마지막으로 입력받은 정수를 차례로 출력
System.out.print(arr[2] + “ “ + arr[4] + “ “ + arr[arr.lenght - 1);
인덱스번지는 0부터 시작하니 2 , 4 그리고 arr의 길이에서 -1을 빼주면 마지막 글자가 됨
짝수번수에서
for ( i=1; i<cnt; i+=2)
가장 나중에 입력된 정수부터 차례대로 출력
for (i=cnt-1; i≥0; i—)f
for문에서의 0 이 되면 빠져나와라
if ( arr[i] == 0)
break;
100개의 정수를 저장할 수 있는 배열선언
int[] arr = new int [100];
0이 입력되면 0을 제외하고
if ( arr[i] == 0)
break;
cnt ++; ( 이건 증감하라는 거)
해당 월의 날수를 출력 ( 2월 28일 / 4,6,9,11월은 30일 / 나머지는 31일 ..)
if( i==2) { day[i] = 28; } else if( i==4 || i==6 || i==9 || i==11) { day[i] = 30; } else { day[i] = 31; }
while을 이용한 0이 되면 종료
while(true)
if (i ==0)
break;
홀수중 가장 큰 값
if (n[i]%2!=0)
n[i] 를 2로 나눈 나머지가 0이 아닐때
if (n[i] < min)
(평균은 소수 첫째자리까지 출력)
오름차순으로 정렬하는 프로그램
if(n[i]>n[j]) { tmp = n[i]; n[i] = n[j]; n[j] = tmp;
비교를 하며 자리를 바꾸면서 오름차순으로 나오도록