일반적으로 this생성자에서만 사용 합니다.
this.something전역 변수와 이름이 같은 경우 매개 변수를 식별하는 데 사용됩니다 (을 사용하여 ).
그러나 thisJava 의 실제 의미 가 this도트 ( .) 없이 사용하면 어떻게 될지 알 수 없습니다 .
일반적으로 this생성자에서만 사용 합니다.
this.something전역 변수와 이름이 같은 경우 매개 변수를 식별하는 데 사용됩니다 (을 사용하여 ).
그러나 thisJava 의 실제 의미 가 this도트 ( .) 없이 사용하면 어떻게 될지 알 수 없습니다 .
답변:
this 현재 객체를 나타냅니다.
각 비 정적 메서드는 개체의 컨텍스트에서 실행됩니다. 따라서 다음과 같은 수업이 있으면
public class MyThisTest {
private int a;
public MyThisTest() {
this(42); // calls the other constructor
}
public MyThisTest(int a) {
this.a = a; // assigns the value of the parameter a to the field of the same name
}
public void frobnicate() {
int a = 1;
System.out.println(a); // refers to the local variable a
System.out.println(this.a); // refers to the field a
System.out.println(this); // refers to this entire object
}
public String toString() {
return "MyThisTest a=" + a; // refers to the field a
}
}
그런 다음 호출 frobnicate()에 new MyThisTest()인쇄됩니다
1 42 MyThisTest a = 42
따라서 여러 가지 용도로 효과적으로 사용합니다.
main방법이 필요 하다는 오류가 발생 합니다. 메인 메소드를 추가하면 거기에서 호출해야합니다. 그리고 main 내부에서 frobnicate ()를 호출하려고하면 정적 참조 내부에서 비 정적 참조를 호출 할 수 없다고 말합니다. 정적을 제거 main하면 기본 메소드를 찾을 수 없다는 오류가 다시 리턴됩니다. 설명 해주십시오.
this. 작동 . 나의 이해는 즉 this.당신이 호출하지 않고라고 존재하는 방법이나 변수의 다른 버전을 허용, 클래스의 인스턴스화 된 버전에 고유 한 방법 또는 변수를 호출 할 수 있습니다 this. 라는 간단한에서 Test.class나는 두 가지 방법이를 : public static void main()및 public Test() I main정적이며 생성자를 정적으로 만들 수 없으므로 메소드간에 정보를 전달할 수 없습니다. 새로운 질문으로 게시해야합니까?
static기본적으로 클래스를 호출 할 클래스의 인스턴스가 필요하지 않으며 this내부에 액세스 할 수 없다는 것을 의미 합니다.
다음은 here 의 복사 및 붙여 넣기 이지만 this키워드 의 모든 다른 사용법을 잘 설명 합니다.
정의 : Java의 this키워드는 사용되는 메소드의 현재 인스턴스를 참조하는 데 사용됩니다.
이를 사용하는 방법은 다음과 같습니다.
정적 또는 로컬 변수 대신 인스턴스 변수가 사용됨을 구체적으로 나타냅니다. 그건,
private String javaFAQ;
void methodName(String javaFAQ) {
this.javaFAQ = javaFAQ;
}
여기서 이것은 인스턴스 변수를 나타냅니다. 여기서 로컬 변수의 우선 순위가 높습니다. 따라서 부재this 는 지역 변수를 나타냅니다. 매개 변수 이름 인 로컬 변수가 인스턴스 변수와 동일하지 않은 경우에 관계없이 인스턴스 변수를 this나타냅니다.
This 생성자를 참조하는 데 사용됩니다
public JavaQuestions(String javapapers) {
this(javapapers, true);
}
두 개의 매개 변수가있는 동일한 Java 클래스의 생성자를 호출합니다.
This 현재 Java 인스턴스를 매개 변수로 전달하는 데 사용됩니다.
obj.itIsMe(this);위와 유사하게 현재 인스턴스를 반환하는 데 사용될 수도 있습니다.
CurrentClassName startMethod() {
return this;
}
참고 : 위 두 가지 점에서 내부 클래스에서 사용되는 경우 원하지 않는 결과가 발생할 수 있습니다. 이것은 외부 인스턴스가 아닌 내부 클래스를 참조하기 때문입니다.
This 현재 클래스의 핸들을 얻는 데 사용할 수 있습니다
Class className = this.getClass(); // this methodology is preferable in java
이 작업을 수행 할 수 있지만
Class className = ABC.class; // here ABC refers to the class name and you need to know that!항상 그렇듯이 this인스턴스와 연관되어 있으며 정적 메소드에서는 작동하지 않습니다.
완료하려면 this외부 객체를 참조하는 데 사용할 수도 있습니다
class Outer {
class Inner {
void foo() {
Outer o = Outer.this;
}
}
}
this내가 찾던 것입니다! ;)
super
특정 객체의 현재 인스턴스를 참조하므로 다음과 같이 작성할 수 있습니다.
public Object getMe() {
return this;
}
일반적인 사용 사례는 this그림자를 방지하는 것입니다. 다음 예제를 보자.
public class Person {
private final String name;
public Person(String name) {
// how would we initialize the field using parameter?
// we can't do: name = name;
}
}
위의 예에서 매개 변수 값을 사용하여 필드 멤버를 지정하려고합니다. 그것들은 같은 이름을 공유하기 때문에 필드와 매개 변수를 구별 할 수있는 방법이 필요합니다. this필드를 포함하여이 인스턴스의 멤버에 액세스 할 수 있습니다.
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
Swing ActionListener에서 현재 인스턴스 (예 : 'this') 를 구현 하고 컴포넌트의 ActionListener로 추가 하는 클래스를 작성하는 것이 일반적 입니다.
public class MyDialog extends JDialog implements ActionListener
{
public MyDialog()
{
JButton myButton = new JButton("Hello");
myButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
System.out.println("Hurdy Gurdy!");
}
}
programming.guide에서 기사 인용하기 :
this이 두 가지 용도를 자바 프로그램을.
이 경우 구문은 일반적으로 다음과 같습니다.
this.someVariable = someVariable;
이 사용 유형은 여기에 설명되어 있습니다 : 'this'참조 (예제 포함)
이 경우 구문은 일반적으로 다음과 같습니다.
MyClass() {
this(DEFAULT_VALUE); // delegate to other constructor
}
MyClass(int value) {
// ...
}
이 사용 유형은 여기에 설명되어 있습니다. this (…) 생성자 호출 (예제 포함)
이 키워드 (그래서 표준 자바 코드를 기대 해달라고, 그냥 exampple) 코드 아래 고려 예를 들어, 블록의 현재 변수를 참조하는 데 사용됩니다 :
Public class test{
test(int a) {
this.a=a;
}
Void print(){
System.out.println(a);
}
Public static void main(String args[]){
test s=new test(2);
s.print();
}
}
그게 다야. 출력은 "2"가됩니다. this 키워드를 사용하지 않으면 출력은 다음과 같습니다. 0
객체에는 this예약어가 사용되는 특정 객체에 속하는 메소드 및 변수를 지정하기 위해 클래스에서 파생 된 메소드 및 속성 (변수)이 있습니다 . 인스턴스 변수의 경우 암시 적 매개 변수와 명시 적 매개 변수의 차이점을 이해하는 것이 중요합니다. 객체 fillTank호출을 살펴보십시오 audi.
Car audi= new Car();
audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter
괄호 안의 값은 암시 적 매개 변수이고 객체 자체는 명시 fillTank적 매개 변수입니다.
클래스 의 fillTank메소드를 자세히 살펴 보겠습니다.Car
public class Car()
{
private double tank;
public Car()
{
tank = 0;
}
public void fillTank(double gallons)
{
tank = tank + gallons;
}
}
이 클래스에는 인스턴스 변수 "tank"가 있습니다. 인스턴스 변수 "tank"가 특정 객체에 사용되도록 지정하기 위해 tank 인스턴스 변수를 사용하는 많은 객체가있을 수 있습니다.이 경우 이전에 생성 한 "audi"객체는 thisreserved 키워드를 사용합니다 . 예를 들어 변수 는 메소드 에서 'this'를 사용합니다. 하면 인스턴스 변수 (이 경우 "tank")가 암시 적 매개 변수의 인스턴스 변수임을 나타냅니다.
Java 컴파일러는 this예약어를 자동으로 추가 하므로 추가 할 필요가 없습니다. 선호하는 문제입니다. thisjava (구문)의 규칙이므로 dot (.) 없이는 사용할 수 없습니다 .
요약해서 말하자면.
this하면 인스턴스 변수 가 내재적 매개 변수에 속하거나 내재적 매개 변수의 인스턴스 변수임을 나타냅니다.this 점 (.) 없이는 사용할 수 없습니다. 이것은 구문 상 유효하지 않습니다.this 동일한 이름을 가진 지역 변수와 전역 변수를 구별하는 데 사용될 수도 있습니다.this예약어 또한 방법은, 특정 개체에 속하는 표시하는 방법에 적용된다.인스턴스 변수는 생성하는 모든 객체에 공통입니다. 예를 들어 두 개의 인스턴스 변수가 있습니다
class ExpThisKeyWord{
int x;
int y;
public void setMyInstanceValues(int a, int b) {
x= a;
y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
}
class Demo{
public static void main(String[] args){
ExpThisKeyWord obj1 = new ExpThisKeyWord();
ExpThisKeyWord obj2 = new ExpThisKeyWord();
ExpThisKeyWord obj3 = new ExpThisKeyWord();
obj1.setMyInstanceValues(1, 2);
obj2.setMyInstanceValues(11, 22);
obj3.setMyInstanceValues(111, 222);
}
}
위의 코드를 발견하면 3 개의 객체를 시작했으며 3 개의 객체가 SetMyInstanceValues 메서드를 호출합니다. JVM이 모든 객체의 값을 올바르게 할당한다고 생각하십니까? 트릭이 있습니다. JVM은이 코드가 위에 어떻게 표시되는지 알 수 없습니다. 그 대신 아래 코드와 같이 보일 것입니다.
public void setMyInstanceValues(int a, int b) {
this.x= a; //Answer: this keyword denotes the current object that is handled by JVM.
this.y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
(나는 늦게 나는 알고 있지만, 나는 당신이 나를 보지 못한 비열한 boi 인 것입니다.)
이 가장 객체 지향 프로그래밍 언어 키워드가 모든 수단 경우 그 클래스의 현재 개체 인스턴스를 향한 자사의 참조. 기본적으로 메소드 외부에서 이름으로 해당 객체를 호출하는 것과 같습니다. 아마 이해가되지 않았으므로 정교하게 설명합니다.
클래스 외부에서 객체의 해당 인스턴스 내에서 무언가를 호출하려면 예를 들어 객체라는 객체가 있고 사용해야 할 필드를 원한다고 가정하십시오.
object.field
예를 들어 클래스 내부에서 object.field 에 액세스하려고하면 예를 들어 생성자를 사용할 수 있습니다.
this.field
이 키워드는 기본적으로 내부 클래스의 호출되는 개체 이름 키워드를 대체합니다. 이름이 같은 두 개의 변수 중 하나가 클래스의 필드이고 다른 하나는 메서드 내부의 변수 인 경우 일반적으로 외부 에서이 작업을 수행 할 이유가별로 없습니다. . 예를 들어 당신이 이것을 가지고 있다면 : (아, 알 겠어요? 이 ? Hehe .... 저만 요?
public String Name;
//Constructor for {object} class
public object(String Name){
Name = Name;
}
컴파일러는 생성자의 매개 변수에 정의 된 Name 변수와 클래스 필드 선언 내부의 Name 변수 사이의 차이점을 알 수 없으므로 대신 Name 매개 변수를 할당합니다. .. 유익하지 않고 문자 그대로 목적이없는 Name 매개 변수의 값. 이것은 대부분의 최신 프로그램에서 흔히 발생하는 문제이며 피해자이기도합니다. 어쨌든이 매개 변수를 정의하는 올바른 방법은 다음을 사용하는 것입니다.
public String Name;
//Constructor for {object} class
public object(String Name){
this.Name = Name;
}
이런 식으로 컴파일러는 할당하려는 Name 변수가 클래스의 일부이며 메서드의 일부가 아니라는 것을 알고 올바르게 할당합니다. 즉, Name 필드를 생성자에 넣은 모든 것에 할당합니다.
요약하자면, 기본적으로 작업중인 클래스의 객체 인스턴스 필드를 참조하므로 키워드 "this"는 이 객체 또는 이 인스턴스를 의미 합니다. 컴파일러가 바로 실행하는 동안 찾기 어려운 버그를 피하기 위해 이름을 사용하는 대신 클래스의 필드를 호출 할 때 이것을 사용하는 것이 좋습니다.
빠른 구글 검색 결과는 다음과 같습니다 : http://xahlee.org/java-a-day/this.html
"this"키워드는 현재 객체 (자체)에 대한 참조입니다.
this현재 객체에 대한 참조입니다 : http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html
이것은 당신이 지금 "있는"객체를 말합니다. 즉, 수신 객체를 나타냅니다. 이것을 사용하여 참조하는 변수를 명확하게합니다. Java_ 백서 페이지 : 37
class Point extends Object
{
public double x;
public double y;
Point()
{
x = 0.0;
y = 0.0;
}
Point(double x, double y)
{
this.x = x;
this.y = y;
}
}
위의 예제 코드에서 this.x / this.y는 Point 클래스 x 및 y 변수 인 현재 클래스를 나타냅니다. 여기서 (double x, double y)는 현재 클래스에 값을 할당하기 위해 다른 클래스에서 전달 된 이중 값입니다.
이 키워드에서 이해 한 내용을 공유하고 싶습니다. 이 키워드는 다음과 같이 Java에서 6 가지 사용법을 갖습니다.
1. 현재 클래스 변수를 참조하는 데 사용할 수 있습니다. 코드로 이해하자. *
아래 예에서이 키워드를 사용하지 않으면 문제를 이해하십시오.
class Employee{
int id_no;
String name;
float salary;
Student(int id_no,String name,float salary){
id_no = id_no;
name=name;
salary = salary;
}
void display(){System.out.println(id_no +" "+name+" "+ salary);}
}
class TestThis1{
public static void main(String args[]){
Employee s1=new Employee(111,"ankit",5000f);
Employee s2=new Employee(112,"sumit",6000f);
s1.display();
s2.display();
}}
산출:-
0 null 0.0
0 null 0.0
위의 예에서 매개 변수 (공식 인수)와 인스턴스 변수는 동일합니다. 따라서이 키워드를 사용하여 로컬 변수와 인스턴스 변수를 구별합니다.
class Employee{
int id_no;
String name;
float salary;
Student(int id_no,String name,float salary){
this.id_no = id_no;
this.name=name;
this.salary = salary;
}
void display(){System.out.println(id_no +" "+name+" "+ salary);}
}
class TestThis1{
public static void main(String args[]){
Employee s1=new Employee(111,"ankit",5000f);
Employee s2=new Employee(112,"sumit",6000f);
s1.display();
s2.display();
}}
산출:
111 ankit 5000
112 sumit 6000
2. 현재 클래스 메소드를 호출합니다.
class A{
void m(){System.out.println("hello Mandy");}
void n(){
System.out.println("hello Natasha");
//m();//same as this.m()
this.m();
}
}
class TestThis4{
public static void main(String args[]){
A a=new A();
a.n();
}}
산출:
hello Natasha
hello Mandy
3. 현재 클래스 생성자를 호출합니다. 생성자 체인에 사용됩니다.
class A{
A(){System.out.println("hello ABCD");}
A(int x){
this();
System.out.println(x);
}
}
class TestThis5{
public static void main(String args[]){
A a=new A(10);
}}
산출:
hello ABCD
10
4. 메소드에서 인수로 전달합니다.
class S2{
void m(S2 obj){
System.out.println("The method is invoked");
}
void p(){
m(this);
}
public static void main(String args[]){
S2 s1 = new S2();
s1.p();
}
}
산출:
The method is invoked
5. 생성자 호출에서 인수로 전달
class B{
A4 obj;
B(A4 obj){
this.obj=obj;
}
void display(){
System.out.println(obj.data);//using data member of A4 class
}
}
class A4{
int data=10;
A4(){
B b=new B(this);
b.display();
}
public static void main(String args[]){
A4 a=new A4();
}
}
산출:-
10
6. 현재 클래스 인스턴스를 반환
class A{
A getA(){
return this;
}
void msg(){System.out.println("Hello");}
}
class Test1{
public static void main(String args[]){
new A().getA().msg();
}
}
산출:-
Hello
또한이 키워드는 구문이 유효하지 않으므로. (점)없이 사용할 수 없습니다.