생성자
객체를 생성할 때 항상 실행되는 것으로, 객체를 초기화해주기 위해 맨 처음 실행되는 메소드이다.
Duck myDuck = new Duck();
Duck 이라는 메소드를 호출?? -> Duck 생성자를 호출하는 것
생성자에는 객체를 생성할때 실행되는 코드들이 들어간다.
Public class Duck{
public Duck(){ //직접 생성한 생성자. -객체 생성시 실행
system.out.println(“Quack”);
}
}
Public class UseADuck {
public static void main (String[] args){
Duck d = new Duck();
}
}
생성자는 정의해 주지않아도 default로 생성자가 정의됨
만약 입력값을 갖는 생성자(Person(1))만 있다면 어찌될까? (기본형 Person() )
- Default 형인 Person() 이 먹히지않는다.
생성자의 특징
-클래스에는 반드시 생성자가 존재해야 한다.
-인스턴스 생성시 딱 한번 호출 된다.
-인스턴스 변수의 초기화가 목적이다.
-클래스 이름과 동일한 이름을 가진 메소드이다.
-반환형이 존재하지 않는다. 즉 return이 없다.
객체의 라이프
1.
Void go() {
Life z = new Life();
} -> 메소드 종료시 죽어버림.
2.
Life z = new Life();
Z = new Life(); -> 다른 객체로 변경하면 첫 객체는 버려짐
3.
Life z = new Life();
Z = null; -> 참조 객체를 잃어버릴때
생성자를 이용한 객체 상태 초기화
Public class Duck{
Int size;
public Duck(int duckSize){ //직접 생성한 생성자. -객체 생성시 실행
system.out.println(“Quack”);
size = duckSize;
system.out.println(“size is” + size);
}
}
Public class UseADuck {
public static void main (String[] args){
Duck d = new Duck(24);
}
}
원하는 초기화 코드를 가진 생성자를 만들어 객체를 생성하자마자 원하는 값을 가지며 초기화 할수 있다.
단 인자값을 가지는 생성자를 만들시에는 인자값이 없는 default 생성자도 직접 선언해줘야합니다.(default 형식이 없을 경우 Duck() 같은 객체 생성이 먹히지 않으며 인자값을 갖는 생성자만 이용 가능하다)
생성자가 두개 이상이라면 생성자의 인자 목록은 반드시 서로 달라야합니다.
생성자 오버로딩을 이용하여 한클래스에 두개 이상의 생성자를 만들 수 있다.
정적메소드
일반적인 메소드는 인스턴스가 필요하지만 정적메소드의 경우
일반 메소드와 다르게 인스턴스 없이 메소드를 실행 할 수 있습니다.
1.정적 메소드는 정적 변수가 아닌 변수를 쓸 수 없습니다.
public class Duck{
private int size;
public static void main(String[] args) {
system.out.println(“Size of duck is “ + size);
}
public void setSize(int s){
size = s;
}
public int getSize(){
return size;
}
}
2. 정적 메소드는 정적메소드가 아닌 메소드도 사용 할 수 없다.
public class Duck{
private int size;
public static void main(String[] args) {
system.out.println(“Size of duck is “ + getSize());
}
public void setSize(int s){
size = s;
}
public int getSize(){
return size;
}
}
정적변수
정적 메소드와 마찬가지로 static 을 통해 고정적인 값을 가지도록 하는 변수입니다.
정적 변수는 클래스가 처음 로딩 될때만 초기화 됩니다.
매번 인스턴스가 만들어질때마다 초기화 되지 않습니다.
정적변수초기화
정적 변수는 클래스가 로딩될때 초기화 됩니다.
보통 JVM에서 로딩할때가 되면 로드합니다.
클래스의 새로운 인스턴스를 처음으로 만들때 와 그 클래스의 정적메소드 또는 정적 변수를 사용할려고할때
JVM에서 클래스를 불러옵니다.
class Player{
static int playerCount = 0;
private String name;
public Player(String n){
name = n;
playerCount++;
}
}
Public class PlayerTestDrive{
public static void main(String[] args) {
System.out.println(Player.playerCount);
Player one = new Player(“Tiger Woods”);
System.out.println(Player.playerCount);
}
}
Static final
1. Static final 로 선언된 변수는 상수로 선언됩니다.
2. Final로 지정한 변수는 일단 초기화 되고 나면 절대 변할 수 없는 수가 됩니다.
Public static final doubl PI = 3.141592;
3. Public 으로 어디서든 접근이 가능하며 static 이기 때문에 인스턴스 없이 바로 사용이 가능합니다.
4. Final로 되어있기때문에 값이 변하지 않습니다.
5. 변수를 상수로 지정하는 유일한 방법입니다 .
6. 보통 알기 쉽게 상수의 변수명은 모두 대문자로 씁니다.
Static final 로 선언된 변수의 초기화 법
1.선언할 때 초기화 방법
public class Foo{
public static final int FOO_X = 25;
}
2.정적 초기화 부분에서 초기화 방법
public class Foo{
public static final int FOO_X;
static{
FOO_X = (int) Math.random();
}
}
Static final 로 선언된 메소드 , 클래스
1. 변수는 final로 지정하면 값을 바꿀 수 없습니다.
2. 메소드는 그 메소드를 오버라이드 할 수 없습니다.
3. 클래스는 그 클래스를 확장할 수 없습니다. (하위클래스 x)
댓글작성시 Code-Highlighter 삽입방법
Syntax [code title="..." theme="..."]coding...[/code]
Example [plsql title="현재시간 출력문" theme="classic"] select now() [/plsql]
Code-List plsql, mysql, java, objc, js, c#, c++, delphi, apache, php, css ...
Theme-List ado, arduino-ide, bncplusplus, cg-cookie, cisco-router, classic, eclipse, epicgeeks, familiar, feeldesign, github, idle, inlellij-idea, iris-vfx, mirc-dark, monokai, neon, secrets-of-rock, solarized-dark, solarized-light, son-of-obsidian, ssms2012, terminal, tomorrow, tomorrow-night, turnwall, twilight, vs2012 View Theme Demo
Alert 댓글에서 직접 코드 작성시 줄바꿈은 (Enter)값 대신 (Shift+Enter) 사용할 것