: heap 메모리에 생성된 인스턴스 내의 인스턴스 변수를 초기화하는 역할
public 클래스명 ([변수, 변수, ...]) {
// 파라미터는 쓸 수도 안 쓸 수도.
}
public 클래스명() {
} // 기본생성자, default 생성자 : 파라미터가 없는 생성자
: heap 메모리에 올라간 자신의 인스턴스의 주소를 참조한다
public class Cat {
String name; // 인스턴스 변수
public Cat( String name ) { // 로컬 변수 (파라미터)
this.name = name;
}
}
public Cat(String name, int age, String gender) { // 로컬 변수
this.name =name;
this.age = age;
this.gender = gender; // heap의 gender에 stack의 gender 값을 넣는다
}
public Cat(String name, int age) {
this(name, age, "암컷"); // 위의 파라미터 3개인 생성자 호출
}
public class 클래스명 {
//인스턴스 변수 : 객체의 속성을 저장하는 용도 (this.변수 가능)(직접 접근 방지 위해 private으로 지정한다)
private int age;
//생성자 : 인스턴스 변수의 초기화 (오버로딩 가능)(this(값,...)이용해서 다른 생성자 호출 가능)
public Cat(int age) {
this.age = age;
}
//메서드 : 다양한 기능 처리 용도
}
public 리턴타입 메서드명([변수,변수,...]) {
문장1;
문장2;
[return 값;]
}
public 클래스명([변수,변수,...]) {
문장1;
}
- 리턴타입을 반드시 지정해야 됨
- 리턴값을 가질 수 있다
- 메서드명은 임의로 지정 가능 (생성자는 반드시 클래스명)
- 반드시 호출해야 한다
- 생성자 호출 : new 클래스명(); , this()
- 메서드 호출 : 객체 생성 후 (new) 호출 가능
Cat c = new Cat();
c.메서드();
step 1
클래스명 참조변수명 = new 클래스명([값,...]);
step 2
참조변수명.메서드([값,...]);
step 1
클래스명 참조변수명 = new 클래스명([값,...]);
step 2
this.메서드([값,...]);
또는
메서드([값,...]);
public class Util {
public void method1() {
System.out.println("method1");
}
}
// 사용 방법
Util u = new Util();
u.method1();
public class Util {
public void method2(int n) {
System.out.println("method2" + n);
}
public void method3(int n, int n2) {
System.out.println("method2" + n + " " + n2);
}
}
// 사용 방법
Util u = new Util();
u.method2(10);
u.method3(10,20);
오버로딩 메서드 (overloading method)
public class Util {
public int method1() {
return 100;
}
}
// 사용 방법
Util u = new Util();
int n = u.method1(); n에 method1()의 리턴값 넣어주기
public class Util {
public int sum(int n, int m) {
return n + m;
}
}
// 사용 방법
Util u = new Util();
int result = u.sum(10, 20);
(1) call by value
메서드 호출시 파라미터에 인자값으로 기본형 데이터를 전달 할 수 있다. 이 때, 전달받은 메서드에서 값을 수정할 수 있다. 원본값은 수정이 안 됨
(2) call by value reference
메서드 호출시 파라미터에 인자값으로 참조형 데이터 (클래스, 배열) 전달 할 수 있다. 이 때, 전달받은 메서드에서 값을 수정할 수 있음. 원본이 변경됨. 이유는 전달되는 인자값이 주소값이기 때문이다.