접근지정자 생성자명(parameter,,,){
public : 클래스 외부에서 객체 생성 가능
protected : 동일 패키지의 다른 클래스에서 객체 생성 가능
패키지가 다르다면 자식 클래스만 객체 생성 가능
private : 클래스 안에서만 객체 생성 가능 (signletom pattern)
default : 동일 패키지의 다른 클래에서 객체 생성 가능
패키지가 다르다면 객체 생성 불가능
생성자를 호출하거나, heap주소(생성된 객체의 주소)를 가지는 keyword
method(생성자를 호출할 때)형식과 keyword(생성된 객체(instance변수)의 주소를 사용할 때)형식으로 사용
method 형식 : 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
· 내 클래스의 overloading 된 생성자를 호출할 때
· 규칙 : 생성자의 첫번째줄에서만 사용 가능
· 문법 ) this();//매개변수 없으니까 기본생성자 호출
this(인수값);//인자있는 생성자 호출할 때
method 형식 :
· 생성된 객체(heap에 올라감)의 주소를 저장한 keyword
· static(객체 생성 전)영역 안에서는 사용할 수 없다. instance영역에서만 사용가능
· 문법) this.변수명
this.method명();//변수를 쓰거나 method를 쓸 때
public class Test{
public Test(){
this(11);//기본생성자에서 인자있는 생성자 부름
}//instance(Test t=new Test();)로 돌아가
public Test(int i) {
this();//기본생성자불러 기본생성자일처리하고 인자있는 생성자로...(재귀호출 에러)
this(20);//재귀호출 에러(나를부름)
}//호출한 곳으로 돌아가라
Test t=new Test();
Test t=new Test(10);//인자있는 생성자만 호출하고 돌아감
class Test() {
int i;//instance변수 parameter(지역변수) =>변수명이 같으면 지역변수부터
public void temp(int i,Test t) {
sop(i);//1000
t.i=i;//지역변수로감
}
public static void main(String[] args){//main method가장먼저실행
Test t =new Test();
t(생성된 t의주소 같다).temp(1000,t(넘겨준t의주소));
sop(t.i);//0
}
------------------------------------------------------------------------------
class Test() {
int i;//instance변수 parameter(지역변수) =>변수명이 같으면 지역변수부터
public void temp(int i,Test t) {
sop(i);//1000
this.i=i;//instance
}
public static void main(String[] args){//main method가장먼저실행
Test t =new Test();
t(생성된 t의주소 같다).temp(1000,t(넘겨준t의주소));
sop(t.i);//0
}
this : method를 호출하는 객체의 주소로 변경되는 keyword
package day0525;
/**
* method를 호출하는 객체의 주소로 변경되어 사용되는 this.
*/
public class ThisKeyword {
int i;//instance변수
/**
* parameter의 이름과 instance변수의 이름이 같을 때
* this를 사용하지 않고 parameter의 값을 인스턴스 변수로 저장할 때
*/
public void useInstance(int i, ThisKeyword t) {
t.i=i;//t.i=instance변수/ parameter 변수(stack)의 값을 instance변수(heap)에 할당하겠습니다.
System.out.println("전달받은 객체"+t);
}//useInstance
/**
* 파라메터의 이름과 인스턴스변수의 이름이 같을 때마다 객체를 넘기고
* 받아서 사용하려면 코딩시 불편함이 따라온다. 개선하기 위해 this가 제공
* @param i
*/
public void useThis(int i) {
//this는 method를 호출하는 객체의 주소로 변환되는 키워드/this=tk
//매개변수로 객체를 받을 필요가 없다.(ThisKeyword t 필요없음!)
this.i=i;
System.out.println("method를 호출한 객체의 주소 :"+this);
}//useThis
public static void test() {
// this.i=10; //static method안에서는 this keyword를 사용할 수 없다.
System.out.println("static method");
}
public static void main(String[] args) {
ThisKeyword tk = new ThisKeyword();
System.out.println("생성된 객체"+tk);
tk.useInstance(300, tk);
System.out.println("전달한 객체의 인스턴스 변수의 값"+tk.i);
System.out.println("=================================================");
tk.useThis(900);//instance
System.out.println("this를 사용하여 변경한 인스턴스변수의 값"+tk.i);
ThisKeyword.test();//static
}//main
}//calss