728x90
static은 한단어로 말하면 "공유"이다.
-> 클래스의 필드(변수)를 공유할수있게해준다.
+ 객체를 생성하지 않아도 메소드를 호출할 수 있도록 해준다. (메서드에서는 클래스 변수만 사용가능)
<인스턴스 변수>
클래스에서 객체를 만들면 각 객체마다 변수가 생성된다.
각 변수는 독립적이다.
-> 객체가 생성될때 함께 생성되며 객체가 소멸되면 함께 소멸된다.
<static 변수>
static 키워드로 지정하여 클래스의 모든 객체가 공유하는 변수다. (클래스 변수라고도 한다)
-> 객체 생성전에도 접근이 가능하다.
-> 객체를 여러개 생성한다고 해도 static변수는 하나뿐이다.
=> 인스턴스 변수는 객체 생성 후에만 호출이 가능 && static변수는 객체 생성 전에도 호출이 가능하다.
정적멤버 접근법
클래스 이름. 정적변수이름
클래스 이름. 정적메서드이름()
객체의 이름이 아닌 클래스의 이름으로 호출해야한다.
예시 코드 )
class Circle{
double radius;
static int numofCircles = 0; // static변수
int numCircles = 0; //인스턴스 변수 //객체마다 별도의 공간 사용
public Circle(double radius) {
this.radius = radius;
numofCircles++;
numCircles++;
}
}
public class CircleDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle my = new Circle(10.0);
Circle your = new Circle(5.0);
System.out.println("원의 개수는 " + Circle.numofCircles);
System.out.println("원의 개수는 " + my.numCircles);
}
}
numofCircles는 정적변수이므로 클래스당 한개이다. 그러므로 객체가 생성될때마다 1씩 증가하여 2가 출력된다.
접근을 할때는 클래스의 이름으로 Circle.numofCicles로 접근한다.
numCircles는 인스턴스 변수로 객체마다 하나씩 생긴다. 즉 객체마다 numCircles를 위한 기억공간이 존재한다.
즉 my.numCircles를 하든, yourCircles를 하든 0에서 시작하므로 결과적으로 1이 출력된다.
+) main은 정적메서드이다.
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - 배열의 선언과 생성(7) + String (0) | 2021.08.26 |
---|---|
java - 문자열[==,!=,compareTo, equals](6) (0) | 2021.08.23 |
자바 - this, this메서드(4) (0) | 2021.08.21 |
자바 - [객체지향프로그래밍]-생성자와 생성자 오버로딩(3) (0) | 2021.07.28 |
자바 - JAVA [메서드,오버로딩](2) (0) | 2021.07.26 |