[TIL] this , this()
this 란?
현재 클래스의 인스턴스로 객체 자신에 대한 참조 값을 갖는다.
this는 현재 클래스의 인스턴스를 참조하기 때문에 생성자나 인스턴스 메소드 내에서만 사용하며 클래스 메소드에서는 사용할 수 없다.
특징"
지역변수(메소드 내에 선언된 변수나 메소드 인수)와 멤버변수(인스턴스 변수나 클래스 변수)의 이름이 동일한 경우
지역 변수가 우선순위가 높다.
따라서 인스턴스 변수를 명확하게 접근하기 위해서 this키워드를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package ex0804;
public class This_Ex1 {
public static void main(String[] args) {
Demo4 ob1 = new Demo4();
Demo4 ob2 = new Demo4();
ob1.set1(10);
ob1.write(); //0:1
System.out.println(ob1);
ob1.set2(10);
ob1.write();
System.out.println("----------------");
System.out.println(ob2);
ob2.set2(5);
ob2.write();
}
// 0:1
// 0:1
// ex0804.Demo4@15db9742
// ex0804.Demo4@15db9742
// 20:1
// 20:1
// ----------------
// ex0804.Demo4@6d06d69c
// ex0804.Demo4@6d06d69c
// 15:1
// 15:1
}
class Demo4 {
int a;
int b;
public void set1(int a) {
//지역변수와 인스턴스 변수의 이름이 같으면
// 지역변수가 우선순위가 높다.
a = a + 10;
b = 1;
}
public void set2(int a) {
System.out.println(this);
this.a= a+10;
this.b=1;
}
public void write() {
System.out.println(a+":"+b);
System.out.println(this.a+":"+this.b);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package ex0804;
public class This_Ex2 {
public static void main(String[] args) {
Demo5 ob = new Demo5();
ob.sub();
ob.write(); //0:0
ob.sub2();
ob.write(); //5:10
}
// sub:10,20
// 0:0
// 5:10
}
class Demo5{
int a;
static int b;
public void sub() {
int a;
int b;
a=10;
b=20;
System.out.println("sub:"+a+","+b);
}
public void sub2() {
int a;
int b;
// a=1;
// b=2;
// System.out.println("sub2:"+a+","+b);
this.a=5; // 인스턴스 변수
//this.b=10; // 경고 : 일반적으로 클래스변수는 this 대신 클래스명으로 접근
Demo5.b=10;
}
public void write() {
System.out.println(a+":"+b);
}
}
|
cs |
this()란?
- 생성자에서 중복 정의된 다른 생성자를 호출하기 위해 사용한다.
- 하나의 클래스에 여러개의 생성자가 오버로딩된 경우 중복된 코드가 존재할 수 있는데, this(인수)를 이용하여 다른 생성자를 호출 코드의 중복을 최소화 할 수 있다.
- 생성자의 최상단에 한번만 사용 가능하며 super()와 같이 사용할 수 없다.
'Language > JAVA' 카테고리의 다른 글
[TIL] JVM :Java Virtual Machine (0) | 2020.08.04 |
---|---|
[TIL] 생성자 , 초기화 (0) | 2020.08.04 |
[TIL] 비정형 인자 (가변 인수) (0) | 2020.08.04 |
[TIL] 재귀 호출 (0) | 2020.08.04 |
[TIL] 메소드 오버로딩 (0) | 2020.08.03 |
댓글