728x90
반응형
Java에서 배열은 객체이다. (랜덤이면 랜덤 참조변수를 만든다. )
int[] aaa=new int[3];
단, 앞 참조 변수 안에 [ ]안에 숫자를 넣지 않는다!
- 객체는 자기의 멤버에 쓰레기값이 있는걸 싫어한다. 아무것도 안 해도 자동 0으로 초기화한다.
- 참조 변수는 배열은 아니지만, 배열처럼 행동한다. aaa[0]=10;
- pr(aaa)는 주소를 출력한다
- 인덱스, 배열의 요소
- 객체니까 기능(method)를 갖고 있다.
- 한꺼번에 관리하고 싶어서
배열은 참조변수만 여러개 있는것이다. (배열 안에 객체가 여러개 있는게 아니다)
객체를 만든게 아니다 객체를 만드려면 ( ) 을 뒤에 붙여야함.
new textview[] >>> 배열을 만든것임
배열의 초기값 (지역변수X 지역변수는 내가 초기화 해줘야한다.)
자료형 | 초기값 |
int | 0 |
double | 0.0 |
boolean | false |
한문자 | 아스키코드 ‘0’ |
참조형 | null |
기본형이 아닌애들의 초기값(Random,String등등)은 null이다(2천여개 다 null이다)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Java언어에서 배열은 객체임.
// int형 3개짜리 배열객체 생성
int[] aaa=new int[3]; //배열의 요소들은 자동으로 0에 해당하는 값으로 초기화 된다.
//int는 0, double0.0 , boolean이면 false가 나온다
System.out.println(aaa); //배열 객체의 .toString()이라는 기능이 자동 발동함.
// 이렇게 하면 배열의 설명이 콘솔창에 뜸.
//진짜 주소는 아니고 고유번호 : 해쉬코드라고 한다. (C에서 주소는 8자리였다)
System.out.println(aaa[0]);
System.out.println(aaa[1]);
System.out.println(aaa[2]);
//System.out.println(aaa[3]); 인덱스 범위를 벗어나면 에러!
//요소별로 넣는다. 배열 요소에값대입
aaa[0]=10;
aaa[1]=20;
aaa[2]=30;
//배열객체에게 배열 요소의 개수(길이)를 가진 멤버변수 존재,
//함수면 뒤에 length()을붙여야함. 함수가아니다
int len=aaa.length; //()이 없으면 값이라는뜻, 함수가 아니다
//배열 요소값을 반복문을 이용하여 출력해보기
for(int i=0;i<len;i++) { //배열의개수를 이용한다.
System.out.println(aaa[i]);
}
System.out.println( );
System.out.println( );
//배열객체를 생성하면서 배열요소값들을 초기화해보기
int[] bbb=new int[] {10,20,30}; //초기화할때는 배열개수를 명시하면 안됨.
//뒤에 초기화로 개수를 알수있다. 초기화 안했을때는 반드시해야함 차이점! 기억!
//배열객체 생성 및 초기화할때 축약표현문법
int[] ccc= {100,200,300}; //자동 new int[]
System.out.println(ccc[0]);
System.out.println(ccc[1]);
System.out.println(ccc[2]);
int n=3; //배열개수 n의 값을 키보드로 입력받을수도 있다
int[] ddd=new int[n];
//배열 생성할때 개수지정을 상수가 아니라 변수로 지정할 수 있다.
//c에서는 이러면 에러! c에서는 상수만써야한다.
Scanner scan=new Scanner(System.in);
//System.out.print("배열 개수 입력 : ");
//n=scan.nextInt();
for(int i=0;i<ddd.length;i++) {
System.out.print(ddd[i]+", ");
}
System.out.println( );
//배열객체의 초기화할때도 변수로 값 지정가능함
int k=10;
int[] eee=new int[] {k,k+1,12};
for(int i=0;i<eee.length;i++) {
System.out.print(eee[i]+", ");
}
//배열요소의 개수가 0개짜리인 배열객체도 존재 할 수 있음.
int[] fff=new int[0]; //
System.out.println("배열길이 : "+fff.length);
System.out.println( );
//배열참조변수끼리의 대입
double[] ggg=new double[] {3.14,2.48,7.23};
double[] hhh=ggg;
//객체대입이 아니라 주소값 복사 - 하나의 객체를 공유하게 됨.
for(int i=0;i<ggg.length;i++) {
System.out.print(ggg[i]+", ");
}
System.out.println( );
for(int i=0;i<hhh.length;i++) { //값 복사가 아니라 객체를 공유하는중이다
System.out.print(hhh[i]+", ");
}
System.out.println( );
//공유된 객체를 참조하는 참조변수 중 하나를 이용하여 요소값 변경하면
// 당연히 다른 참조변수의 값도 영향을 받음.
hhh[1]=6.49;
System.out.println(ggg[1]);
//배열객체를 copy해보기 [배열요소값들을 복사하기]
int[] mmm=new int[] {50,60,70};
int[] nnn=new int[mmm.length]; // 변수지정가능.
// mmm배열과 같은 개수의 값이 0인 배열객체 생성
for(int i=0;i<nnn.length;i++) {
nnn[i]=mmm[i];
}
//mmm과 nnn이 참조하는 배열객체는 서로 다른 객체임!
System.out.println( );
System.out.println("=================================");
System.out.println( );
//참조형 자료형의 배열객체 생성해보기 스트링을 참조한다는게 아님
//배열 여러개를 참조한다는것
String[] sss=new String[3];
//스트링 참조변수 3개짜리 배열객체를 생성 (스트링 객체 3개가 아니다) 리모컨만 3개 만듬
System.out.println(sss);//자동 투스트링()기능발동
System.out.println(sss[0]); //참조형변수의 기본값은 null이다
System.out.println(sss[1]);
System.out.println(sss[2]);
//배열객체의 요소들(참조변수들)에 값(객체) 대입
sss[0]=new String("Sam");
sss[1]=new String("Robin");
sss[2]="Hong"; //자동 new String()이 된다.
System.out.println(sss[0]);
System.out.println(sss[1]);
System.out.println(sss[2]);
System.out.println( );
//각 배열요소(String참조변수)의 기능메소드 사용해보기
System.out.println("배열길이 : "+sss.length);
//배열을 참조한다, 배열에게 명령 내리는것 여기에 점 찍은거랑 밑에 점찍은거랑 구별 못함
System.out.println(sss[0].length());
//.찍으면 스트링의 기능을 쓸수있다 배열 sss에 점찍은거랑 sss[0]
// 즉 배열요소 에 점 찍은거랑은 다르다
System.out.println(sss[1].length()); //.찍으면 스트링의 기능을 쓸수있다
System.out.println(sss[2].length()); //.찍으면 스트링의 기능을 쓸수있다
System.out.println( );
//char ch=sss.; 이러면 배열의 능력
//char ch=sss[1].; 이러면 스트링의 기능
char ch=sss[1].charAt(2); //세번째 글자를 꺼내온다
System.out.println(ch);
ch=sss[2].charAt(3);
System.out.println(ch);
//참조형 배열객체 생성하면서 배열요소들 초기화 해보기
int[] xxx=new int[] {10,20,30};
String[] uuu=new String[] {new String("android"), new String("ios"),new String("web")};
//객체를 만들어서 넣는다 정신없다
uuu=new String[] {"androis" ,"ios" ,"web"}; //new String() 축약표현
String[] ttt= {"android" ,"ios" ,"web"};
//배열 참조변수 초기화하면서 배열객체 초기화할때는 축약표현 가능
for(int i=0; i<ttt.length; i++) {
System.out.println(ttt[i]);
}
System.out.println( );
//당연히 개발자가 만든 class도 배열로 만들 수 있다
Person p=new Person();
p.name="san";
p.age=20;
p.show();
Person[] people=new Person[3];//참조변수 3개짜리 배열을 만듬 퍼슨객체X
people[0]=new Person();
people[1]=new Person();
people[2]=new Person();
people[0].show();
people[1].show();
people[2].show();
System.out.println( );
// 배열처럼 여러개의 요소를 가진 객체의 요소제어를 위한 반복문을 쉽게 사용하기 위해 등장한 새로운 for문법
// 확장된 for문 [for each문법이라고 부른다. ]
int[] nums=new int[] {10,20,30};
//반복문이용하여 요소값 출력
for(int i=0;i<nums.length;i++) {
int t=nums[i]; //t의 역할을 알아야한다 임시변수는 요소 하나하나를 잠깐동안 보관하는 것
System.out.println(t);
}
System.out.println( );
//확장된 for문법으로 배열의 요소값을 간결하게 출력해보기 for each문
for(int t : nums) { //배열의 이름만써도 배열의 개수만큼 반복한다 176,177 줄을 요약한것 그렇지만 3번부터 9번까지 범위지정은 불가
System.out.println(t);
}
System.out.println( );
double[] www=new double[] {3.14,2.56,8.79};
for(double t : www) {
System.out.println(t);
}
String[] rrr=new String[] {"aaa","bbb","ccc",};
for(String t:rrr) {
System.out.println(t+" : "+ t.length());
}
}
}
//사용자 정의 class
class Person{
String name; //멤버변수
int age;
void show() { //멤버함수
System.out.println(name+" : "+age);
}
}
2차원 배열
2차원 배열 객체라는 것은?
1차원 배열을 참조하는 참조 변수를 여러개 가진 배열 객체
(1차원 배열이 여러 개 있는게 아니다 )
int[] >> 참조변수
참조변수만 3개이다
int[3][] ; 3개짜리인데 1차원배열이 3개 있다. 앞이 층이다 >> 총 3봉지인데 안에 몇개 들어있는지 모른다
int[3][5]; 1차원 배열(각5개)이 3봉지가 있다
객체 3명, 5개씩사탕
aaa[0][2]=30;
aaa[2][3]=50; 2바이3
728x90
반응형
'Java' 카테고리의 다른 글
Java_접근제한자 (0) | 2023.01.27 |
---|---|
Java_객체 지향 프로그래밍 OOP (0) | 2023.01.27 |
Java_String (2) | 2023.01.26 |
Java_키보드 입력 Scanner (0) | 2023.01.26 |
Java_화면 출력 객체 System.out (0) | 2023.01.24 |