public class TestStaticClass {
static int staticCounter = 0;
public TestStaticClass() {
staticCounter++;
}
public static void main(String[] args) {
new TestStaticClass();
new TestStaticClass();
new TestStaticClass();
System.out.println( TestStaticClass.staticCounter );
}
}
실행 결과
3
위 프로그램에서 보면 staticCounter 변수는 TestStaticClass클래스의 static 변수이기 때문에 모든 TestStaticClass 객체와 공유되고 있고, 따라서 TestStaticClass 의 생성자가 호출될 때 마다 staticCounter가 1씩 증가한다.
그리고 staticCounter 변수를 사용하기 위해서 TestStaticClass 클래스의 인스턴스를 생성할 필요가 없고, TestStaticClass 클래스 이름을 이용해서 직접 접근하여 출력하는 모습을 볼 수 있다.
class Calculator {
// static 메서드 선언
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
}
public class TestCalculator {
public static void main(String[] args) {
// 객체 생성 없이 클래스 이름을 통해 static 메서드 호출
int result1 = Calculator.add(5, 3);
int result2 = Calculator.subtract(10, 4);
System.out.println("5 + 3 = " + result1);
System.out.println("10 - 4 = " + result2);
}
}
실행 결과
5 + 3 = 8
10 - 4 = 6
위 프로그램에서 보면 Calculator 클래스에는 두 개의 static 메소드가 있는 걸 볼 수 있는데, 객체 생성없이 해당 메소드들을 사용하는 모습을 볼 수 있다.
public class StaticBlockExample {
// 정적 변수 선언
static int[] numbers;
// static 블록을 사용하여 numbers 배열 초기화
static {
numbers = new int[5];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = (i + 1) * 2;
}
}
public static void main(String[] args) {
// 정적 변수 numbers에 접근하여 값 출력
for (int num : numbers) {
System.out.println(num);
}
}
}
출력결과.
2
4
6
8
10
위 소스에서 numbers 배열은 static 블록 내에서 초기화되고 있고, 이 블록은 StaticBlockExample 클래스가 처음 로드될 때 실행되어 numbers 배열을 초기화하고, main 메소드에서 이 배열의 값들을 출력한다.