int[] arr = new int[5]; // 빈 배열 선언 int[] arr2 = new int[]{1,2,3,4}; int[] arr3 = {1,2,3};
객체 배열은 두번 작업한다!
- step1_ 방 만들기
Cat[] cats = new Cat[3]
- step2_ 방 채우기
for(int cat : cats){ cat = new Cat(); } // 또는 for(int i = 0; i<cats.length; i++){ cats[i] = new Cat(); }
두번의 작업을 한 줄로 쓰는 것도 가능하다.
Cat[] cats = Cat[] {new Cat(), new Cat(), new Cat()} // 또는 Cat[] cats = {new Cat(), new Cat(), new Cat()}
클래스 배열은 클래스의 주소값을 담을 수 있다.
class Human{
String name;
}
class OverClass{
int add (int i , int j ) {
return i + j;
}
void add(Human human) { // Human 타입의 주소값을 넣어주면 되는 구나***************** add(new Human())
System.out.println(human.name);
}
// 1. add(new Human());
// 2. Human h = new Human(); add(h);
// 반드시 해야 합니다^^
//배열은 객체다 == 배열도 타입이다.
int add(int param) {
return param + 100;
}
int[] add(int[] params) {// 주소값 받는다잉 // add(String ... values) >> add(1,2,3), add(1,2)
// int[] arr = {1,2} add(arr) // 배열타입의 주소값
// 안의 코드 여러분 마음
// add (new
int[] target = new int [params.length];
for(int i = 0; i< target.length; i++) {
target[i] = params[i] + 1;
}
return target; // 주소값(heap에있는 int[] target 배열 주소)
// return null; // 스택메모리에 생성되는 것 null 값 가질 수 있다. (배열 생성 때 heap 에서 null값 가지듯)
// *앞으로 코딩 할때 리턴 null 일단 정의 해놓고 코드작업하기*
}
}
public class Ex06_Array_Method {
public static void main(String[] args) {
OverClass overt = new OverClass();
int[] source = {10,20,30,40,50};
int[] ta = overt.add(source);
for(int value : ta) {
System.err.println(value);
}
}
}
/*
함수 사용시 parameter 값을 전달 or 주소값 (참조값) ref 전달
void m(int x) { x라는 변수는 값을 받는다
x값 출력 : 100
x = 10000;
}
int y = 100;
호출 m(y)
call by value
-----------------------------------------------------
void m2 (Car c) { // c라는 parameter는 Car 타입을 가지는 객체의 [주소값]을 받겠다
c.color 출력 : red
}
Car c2 = new Car(); //c2의 주소가 : 0xab..
c2.color = "red";
m2(c2) >> m2(0xab...)
call by ref
*/
class Data {
int i;
}
public class Ex10_Method_Call {
static void scall(Data sdata) { // Data 타입을 갖는 주소값을 받겠다 (ref)
System.out.println("함수 : " + sdata.i);
sdata.i = 1111; //0xaaa번지에 있는 i 라는 변수값을 1111변경
}
static void vcall (int x) { // 정수값을 받겠다(value)
System.out.println("before x : " + x);
x = 8888;
System.out.println("after x : " + x);
}
public static void main(String[] args) {
Data d = new Data(); //d변수는 주소값 0xab 번지
d.i = 100;
System.out.println("d.i : " + d.i);
scall(d); //0xab ; 주소값전달
System.out.println("d.i : " + d.i);
//////////////////////////////////////////////////////
vcall(d.i); //1111 ; 값전달
System.out.println("d.i : " + d.i);
}
}