@@ 객체 = iv 묶음!
인스턴스 메서드는 iv 사용가능 - 객체가 필요함
클래스메서드는 객체생성 안함. - iv 필요없음.
ex.
class MyMath2 {
long a, b; //인스턴스 변수(iv)
long add() { // 인스턴스 메서드 - iv사용, 객체있음/ iv사용하니까 매개변수 필요없음.
return a+b;
}
static long add(long a, long b) { // static메서드 - iv 말고 lv사용 매개변수 / 객체생성X
return a+b;
}
}
class MyMathTest2 {
public static void main(String[] args) {
System.out.println(MyMath2.add(200L, 100L); // static메서드 - '클래스이름.메서드이름(매개변수)' 형식따름, 객체생성 없음.
MyMath2 mm = new MyMath2(); // 인스턴스 객체 생성. iv생성
mm.a = 200L;
mm.b = 100L; //인스턴스 대입
System.out.println(mm.add()); //인스턴스 메서드 호출 - '참조변수.메서드이름()' 형식따름, 객체생성 필요함.
메서드 간의 호출 : 같은 클래스 내의 메서드는 서로 객체의 생성이나 참조변수 없이 직접 호출이 가능하지만 static메서드는 인스턴스 메서드를 호출할 수 없다.!!
ex.
class TestClass {
void instanceMethod() {}
static void staticMethod() {}
void instanceMethod2() {
instanceMethod();
staticMethod();
}
static void staticMethod() {
instanceMethod(); //에러!!! 인스턴스 메서드 호출 불가능
staticMethod(); //가능 항상
}
}
변수와 메서드간의 호출 : 인스턴스메서드는 iv 사용가능, static메서드는 iv 사용불가능.
ex.
class TestClass2 {
int iv; //인스턴스 변수 --> 객체 생성 후 사용가능
static int cv; //클래스 변수 --> 언제나 사용가능
void instanceMethod() { //인스턴스 메서드
System.out.println(iv); //iv사용 가능
System.out.println(cv); //cv도 사용 가능
}
static void staticMethod() { //static메서드
System.out.println(iv); //XXX iv사용불가능.
System.out.println(cv); //OOO cv 사용 가능.
}
}