commons.pool 글을 읽어보다가

 

http://cafe.naver.com/itinsuccess.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=43

 

에서

 

//스테틱 영역에서 xml파일에 저장되어 있는 데이터 베이스 정보를 가지고 온다.
 static{
  HashMap dbInfo = UtilStr.getXmlMessage(xmlChildernKey, xmlFilePath);
  driverClassName = String.valueOf(dbInfo.get("driverClassName")).trim();
  url = String.valueOf(dbInfo.get("url")).trim();
  userName = String.valueOf(dbInfo.get("userName")).trim();
  password = String.valueOf(dbInfo.get("password")).trim();
  maxActive = Integer.parseInt(String.valueOf(dbInfo.get("maxActive")).trim());
  maxWait = Long.parseLong(String.valueOf(dbInfo.get("maxWait")).trim());
  maxIdle = Integer.parseInt(String.valueOf(dbInfo.get("maxIdle")).trim());
  defaultReadOnly = Boolean.parseBoolean(String.valueOf(dbInfo.get("defaultReadOnly")).trim());
  defaultAutoCommit = Boolean.parseBoolean(String.valueOf(dbInfo.get("defaultAutoCommit")).trim());
  connectionFlg = false;
 }

 

 

이런식으로 변수를 선언한것 을 보았다.

static{}로 묶은건데  이렇게 할경우 장점은 뭘가?

가독성이 좋은건가?

저게 실제로 각 변수에 static를 붙은 효과만 내는걸가?

public 나 pravite 를 선언하려면 어떻게 해야한는걸까?

 

 

-------------------

 

출처 : http://okjsp.pe.kr/seq/118099

옥희의 답변 중에

driverClassName 값을 받아오는 과정에서
static으로 선언된 dbInfo 에서 값을 받아오고 있기때문에
static 하에서 실행되어야 할 필요가 있습니다.
그래서 그 과정을 한번에 static 으로 묶은게 아닐까요?

-------------------

말이 있다

그래서 테스트해봣다

private static final String driverClassName;

를 선언하고

driverClassName = "하하"; 를 다른 메쏘드에서 실행하려 했지만 안됐다

그러나

static{} 영역에서 선언을 하니 된다.

 

---------------------

 

추가 수정 :

private static final String driverClassName;
  
 static{
  String a = "1";
  driverClassName = a;
 }

 

다음의 코드를 보면

 

static 는 메모리가 클래스가 최초로 불러질때 실행이되고

a는 전역변수가 아니게 된다.

흠 한마디로 초기에만 쓰이는 프로그램이 되는 형태.

생성자랑 비슷하면서도 비슷하지 않은 형태가 되겠다.

 

Posted by 삽지리
,