JAVA

210811_클래스와 객체(예제)

요옫 2021. 8. 11. 17:15

//static 변수 사용은 여러 객체가 사용하므로 메모리의 효율화

//static변수는 메모리에 한번 할당

public class VarCountTestEx4 {

 

int count=0;

//static int count=0; -> c1,c2 값이 1,2로 바뀜

 

//생성자

public VarCountTestEx4() {

count++;

System.out.println(count);

}

 

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

VarCountTestEx4 c1=new VarCountTestEx4();

VarCountTestEx4 c2=new VarCountTestEx4();

//1,1이 나오는 이유

//c1,c2의 count는 서로 다른 메모리를 가지므로 카운트가 증가하지 않음

//객체변수는 독립적이므로

 

//public class에서 static int count=0;이라고 변경하면 하나의 메모리를 공유하게 되어 1,2가 됨

 

//결과

1

1

 

 

~~~~~~~~~~~~~~~~~~~~

 

 

(예제)

class TestA{

 

String name="이수진";

static String message="Hi~~Java";

}

 

public class ObTestEx5 {

 

int a;  //자동초기화되어 0

static int b;  //자동초기화되어 0

 

 

public static void main(String[] args) {

 

//static멤버변수는 바로 사용가능

b=20;

System.out.println("b="+b);

 

//인스턴스 변수

ObTestEx5 ob1=new ObTestEx5();

ObTestEx5 ob2=new ObTestEx5();

 

ob1.a=10;

ob2.a=20;

 

System.out.println("ob1.a="+ob1.a);

System.out.println("ob2.a="+ob2.a);

 

//staric변수는 클래스명.변수명 으로 접근가능

//단 같은 클래스에서는 클래스명 생략 가능

System.out.println("정적변수 b="+ObTestEx5.b);

 

//이수진출력하려면 생성해줘야 함

TestA ta=new TestA();

System.out.println(ta.name);

System.err.println(TestA.message);

 

//결과

b=20

ob1.a=10

ob2.a=20

정적변수 b=20

이수진

Hi~~Java

 

 

~~~~~~~~~~~~~~~~~~~~

 

 

(예제)

class NumTest{

 

int num;  //인스턴스변수, 0

 

//생성자가 여러개일땐 디폴트 생성자 자동으로 생기지 않는다

//1.()안에 인자가 없으면 디폴트생성자라 부른다

public NumTest() {

//num=10;

System.out.println("디폴트 생성자 호출");

}

 

    //2.인자있는 생성자

    public NumTest(int num) { //지역변수

    

    this.num=num; // -> 인스턴스변수=지역변수; 이름이 같기에 인스턴스변수에 this. 붙이기

    System.out.println("생성자호출_2");

    

    }

    

    //3.메소드

    public int getNumber() {

    //어떤 값을 가져오고 싶으면 get (필수적이진 않으나 가독성 좋게 하기 위해)

    //어떤 값을 세팅하고 싶으면 set (필수적이진 않으나 가독성 좋게 하기 위해)

    num=50;

    return num;  //int값이 있으면 반드시 return값이 있어야 함. void는 안 해줘도 됨

    

    }

    

 

}

public class ConstTestEx6 {

 

public static void main(String[] args) {

 

//메인메서드에서 인스턴스가 생성될때마다 생성자호출-자동초기화

 

//디폴트생성자를 new로 생성해야 디폴트생성자호출이 출력됨

NumTest nt1=new NumTest();

System.out.println(nt1.num);  // //로 닫아놔서 초기값0으로 뜸

 

//2번 생성자 생성

NumTest nt2=new NumTest(30);  //생성과 동시에 인자값을 넘기며 초기화 가능

System.out.println(nt2.num);

 

//3번 메소드

NumTest nt3=new NumTest();

System.out.println(nt3.getNumber());

 

//결과

디폴트 생성자 호출

0

생성자호출_2

30

디폴트 생성자 호출

50