java-static

ezzange·2022년 8월 31일
0

java

목록 보기
16/16
post-thumbnail

static(1)

공유 정보는 어디서든 접근이 가능하다.
공유 안에 인스턴스 등 제한적인 필드는 있을 수 없다(-->접근권한이 없다.)

package statics;

public class StaticTest01 {
	String color;//일반 멤버
	static double pi=3.141592;//정적(공유) 멤버(static)
 
	void setColor(String color) {
		this.color=color;
		System.out.println(color);
	}
	static int plus (int x, int y) {
		return x+y;
	}
	public static void main(String[] args) {
		
		System.out.println(StaticTest01.pi);
		//System.out.println(color); 메인메서드와 메모리 할당하는 곳이 다르기때문에 사용불가 
		//color를 표현하기 위해서는 객체표현식을 사용 해야한다.
		StaticTest01 obj=new StaticTest01();
		System.out.println(obj.color);
	}
}//class
3.141592
null

static(2)

공유 특징을 사용해서 다른 창구에서도 번호를 공유할 수 있다.


package statics;

public class Teller {
	
	static int no;//번호표
	int pos;//창구번호
	String name;//텔러이름
	void call() {
		System.out.println(++no+"번 고객님 "+ pos +"번 창구에서 안내 도와드리겠습니다.");
	}
	
	public Teller(String name,int pos) {//생성자
		this.name=name;
		this.pos=pos;
	}

}
package statics;

import java.util.Random;

public class BankTest {
	public static void main(String[] args) throws InterruptedException {
		
		
		Teller[] tellers=new Teller[4];
		/*
		tellers[0]=new Teller("텔러1");
		tellers[1]=new Teller("텔러2");
		tellers[2]=new Teller("텔러3");
		tellers[3]=new Teller("텔러4");
		*/
		for(int i=0; i < tellers.length; i++) {
			tellers[i]=new Teller("텔러"+(i+1),i+1);
			
		}//for문
//		tellers[0].call();
//		tellers[0].call();
//		tellers[0].call();
//		tellers[1].call();
//		tellers[2].call();
		
		Random random = new Random();
		while(true){
			if(Teller.no<10) {
				Thread.sleep(1000);
				int pos=random.nextInt(4);//0~3
				tellers[pos].call();
			}
		}//while문 
		
	}//main

}//class
1번 고객님 3번 창구에서 안내 도와드리겠습니다.
2번 고객님 4번 창구에서 안내 도와드리겠습니다.
3번 고객님 3번 창구에서 안내 도와드리겠습니다.
4번 고객님 3번 창구에서 안내 도와드리겠습니다.
5번 고객님 1번 창구에서 안내 도와드리겠습니다.
6번 고객님 4번 창구에서 안내 도와드리겠습니다.
7번 고객님 3번 창구에서 안내 도와드리겠습니다.
8번 고객님 1번 창구에서 안내 도와드리겠습니다.
9번 고객님 2번 창구에서 안내 도와드리겠습니다.
10번 고객님 2번 창구에서 안내 도와드리겠습니다.

static(3)

package statics;

public class MyDB {
	static MyDB myDb= new MyDB();
	//객체를 만들려면 생성자 필수!인데 생성자를 잠금해놔서 스테틱을 달아줘야함
	public static MyDB getInstance() { 
	return myDb;
	}
	
	private MyDB() {
		
	}
}
package statics;

public class MyDBTest {
	public static void main(String[] args) {
		
		MyDB obj= MyDB.getInstance();
		System.out.println(obj);
		
		MyDB obj2= MyDB.getInstance();
		System.out.println(obj2);
		//System.out.println(MyDB.myDb);
		
	}
}

statics.MyDB@372f7a8d
statics.MyDB@372f7a8d

위치값이 나온다.

static(4)

package statics;

public class MyDB {
	//static field 보통 선언과 동시 초기화하는게 일반적
	private static MyDB myDb= new MyDB();
	//static field 초기화 블럭 사용이 가능
	
	int a;
	void disp() {}
	static {
		myDb= new MyDB();
		//a=10;
		//disp();
	}
	
	public static MyDB getInstance() {
		//a=10;
		//disp();
		return myDb;
	}
	
	private MyDB() {
		
	}
}

0개의 댓글