반환타입이 void가 아닌 경우, 반드시 return문 필요
int multiply(int x, int y) {
int result = x * y;
return result; //반환 타입이 void가 아니므로 생략불가
}
int max(int a, int b) {
if(a > b) {
return a; //조건식이 참일 때만 실행된다.
}
}
메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
▶ 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다. (resd only) 변경불가
▶ 참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다. (read & write)
class MyMath2 {
long a, b;
long add(){ //인스턴스 메서드
return a + b;
}
static long add(long a, long b) { //클래스 메서드(static메서드)
return a + b;
}
}
class MyMathTest2 {
public static void main(String args[]) {
System.out.println(MyMath2.add(200L,100L)); //클래스메서드 호출
MyMath2 mm = new MyMath2(); //인스턴스 생성
mm.a = 200L;
mm.b = 100L;
System.out.println(mm.add()); //인스턴스메서드 호출
}
}
▶ 속성(멤버 변수)중에서 공통 속성에 static을 붙인다.
class Card {
//인스턴스 변수 (개별 속성)
Strign kind; // 무늬
int number; // 숫자
//클래스 변수 (공통 속성)
static int width = 100; // 폭
static int height = 250; // 높이
}
▶ 인스턴스 멤버를 사용하지 않는 메서드에 static을 붙인다.
class MyMath2 {
long a,b;
long add() { return a + b;} // a, b는 인스턴스변수
static long add(long a, long b) { return a + b;} // a, b는 지역변수
}
▶ static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.
class TestClass2 {
int iv; // 인스턴스 변수 (객체생성 후 사용가능)
static int cv; // 클래스 변수 (언제나 사용가능)
void instanceMethod() { // 인스턴스 메서드 (객체생성 후 호출가능)
System.out.println(iv); // 인스턴스 변수를 사용할 수 있다.
System.out.println(cv); // 클래스 변수를 사용할 수 있다. (언제든 사용)
}
static void staticMethod(){ // static메서드 (객체생성 없이 호출가능)
System.out.println(iv); // 에러!!!인스턴스 변수를 사용할 수 없다. (객체생성 후 호출가능)
System.out.println(cv); // 클래스 변수는 사용할 수 있다. (항상 가능)
}
} //end of class
▶ static 메서드는 인스턴스 메서드(im)를 호출할 수 없다.
class TestClass {
void instanceMethod(){} // 인스턴스메서드
static void staticMethod(){} // static메서드
void instanceMethod2(){ // 인스턴스메서드
instanceMethod(); // 다른 인스턴스메서드를 호출한다.
staticMethod(); // static메서드를 호출한다.
}
static void staticMethod2(){ // static메서드
instanceMethod(); // 에러!!! 인스턴스메서드를 호출할 수 없다.
staticMethod(); // static메서드는 호출할 수 있다.
}
} //end of class
static메서드 → 인스턴스메서드 호출이 안된다.
인스턴스메서드는 static메서드를 호출할 수 있다.
간단한 Q&A문제
Q. static메서드는 static메서드 호출가능?
A. 네
Q. static메서드는 인스턴스 변수 사용가능?
A. 아니오
객체라는 것은 iv묶음이라는것이다. iv를 쓸려면 객체가 생성되어야 사용 가능하다.
static메서드는 언제나 호출가능하다.
Q. static메서드는 인스턴스 메서드 호출가능?
A. 아니오
Q. 왜? static메서드 인스턴스 멤버를 쓸 수 없나요?
A. static메서드 호출시 객체(iv묶음)가 없을 수도 있어서