> # static 메서드
객체생성없이 클래스이름.메서드이름()으로 호출한다.
인스턴스 멤버 사용이 불가
인스턴스 메서드
객체생성 후 참조변수.메서드이름()으로 호출한다.
인스턴스 멤버를 사용한다.
=> 둘의 가장 큰 차이점은 인스턴스 변수 사용여부
예제를 통해 알아봅시다.
public class MyMath2 {
long a,b; //iv-인스턴스변수
long add() {
return a+b; //iv-인스턴스변수
}
static long add(long a, long b) {// lv-지역변수
return a+b;//lv-지역변수
}
}
public class MyMath2test {
public static void main(String[] args) {
// static 메서드 호출
System.out.println(MyMath2.add(200L, 100L));
//Static메서드의 파라미터값
MyMath2 m = new MyMath2();
m.a=200L;
m.b=100L; // IV인스턴스 변수
System.out.println(m.add()); //인스턴스 메서드 호출
}
}
[자바의 정석 예제 6-6]
public class Exercise6_6 {
//[6-6] 두 점의 거리를 계산하는 메소드를 완성하시오
getDistance() .
//[Hint] 제곱근 계산은 Math.sqrt(double a)를
사용하면 된다 .
// (x,y) (x1,y1) . 두 점 와 간의 거리를 구한다
static double getDistance(int x, int y, int x1, int y1) {
// 거리를 구하는 공식
return Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
public static void main(String args[]) {
System.out.println(getDistance(1,1,2,2));
MyPoint p = new MyPoint(1,1);
// p (2,2) . 와 의 거리를 구한다
System.out.println(p.getDistanceS(2,2));
}
}
//[6-7] getDistance()를 MyPoint클래스에서 getDistanceS() 인스턴스 메서드로 정의하시오.
class MyPoint {
int x;
int y;
MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
double getDistanceS(int x1, int y1) {
return Math.sqrt((x-x1)(x-x1)+(y-y1)(y-y1));
}
}