static이 없는 코드
class InstCnt {
int instNum = 0;
InstCnt(){
instNum++;
System.out.println("인스턴스 생성 : " + instNum);
}
}
public class ClassVar {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
[Console]
인스턴스 생성 : 1
인스턴스 생성 : 1
인스턴스 생성 : 1
static이 있는 코드
class InstCnt {
static int instNum = 0;
// static 변수 / 공유 변수 / 클래스 변수 / 정적 변수
InstCnt(){
instNum++;
System.out.println("인스턴스 생성 : " + instNum);
}
}
public class ClassVar {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
[Console]
인스턴스 생성 : 1
인스턴스 생성 : 2
인스턴스 생성 : 3
class AccessWay{
static int num = 0;
AccessWay(){ incrCnt(); }
void incrCnt() { num++; }
}
public class JavaPractice {
public static void main(String[] args) {
AccessWay way = new AccessWay(); // 객체 생성할 때 1 증가
way.num++; // 직접 접근으로 1 증가
AccessWay.num++; // 클래스(생성자 함수)로 접근해서 1 증가
System.out.println("num = " + AccessWay.num); // 3 출력
}
}
[Console]
num = 3
class InstCnt {
static int instNum = 100;
InstCnt(){
instNum++;
System.out.println("인스턴스 생성 : " + instNum);
}
}
public class JavaPractice {
public static void main(String[] args) {
InstCnt.instNum -= 15; // 객체 생성을 하지 않아도 오류가 나지 않는다!
System.out.println(InstCnt.instNum);
}
}
class Circle {
static final double PI = 3.1415;
private double radius;
Circle(double rad) {radius = rad;}
void showPerimeter() {
double peri = (radius * 2) * PI;
System.out.println("둘레 : " + peri);
}
void showArea() {
double area = (radius * radius) * PI;
System.out.println("넓이 : " + area);
}
}
public class JavaPractice {
public static void main(String[] args) {
Circle c1 = new Circle(1.5);
c1.showPerimeter();
c1.showArea();
}
}
class Baby{
static int instNum = 0;
Baby(){
instNum++;
System.out.println("Baby 생성 : " + instNum);
}
}
public class JavaPractice {
public static void main(String[] args) {
Baby cnt1 = new Baby();
Baby cnt2 = new Baby();
Baby cnt3 = new Baby();
}
}
[Console]
Baby 생성 : 1
Baby 생성 : 2
Baby 생성 : 3