210811_클래스와 객체(예제)
//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