什么是“本”在Java中的含义是什么?
通常情况下,我只在构造函数使用this
。什么是“本”在Java中的含义是什么?
我明白,这是用来标识参数变量(通过使用this.something
),如果它有一个全局变量相同的名称。
但是,我不知道this
在Java中的真正意义,以及如果我使用this
没有点(.
)会发生什么。
它是指特定对象的当前实例,所以你可以编写类似
public Object getMe() {
return this;
}
调用它时要小心使用正确的样式:o.getMe()。getMe().outOfHere() – 2010-09-16 15:31:09
这是“一个在当前上下文对象引用”有效。例如,要打印出“这个对象”你可能会这样写:
System.out.println(this);
请注意,您的“全局变量”的使用是有点过......如果你使用this.variableName
然后通过定义它不一全局变量 - 它是特定于此特定实例的变量。
这可以某些方法或构造内使用。
它返回参照当前对象。
它指的是在其上调用方法
class A {
public boolean is(Object o) {
return o == this;
}
}
A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false
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
您使用它的许多内容:
- 澄清,和你谈话有关字段,当有其他人也具有相同名称的东西作为一个字段
- 指当前OBJ ECT整体
- 调用当前类的其他构造在构造函数
这不起作用。我得到一个错误,说需要一个'main'方法。如果我添加主要方法,那么我必须从那里调用。任何试图在main中调用frobnicate()的方法都表示你不能从静态引用中调用非静态引用。并且从'main'中移除静态函数会再次返回错误,表示没有找到主要方法。请解释。 – dbconfession 2014-09-11 21:34:26
@dbconfession:这里的代码不是作为一个独立的自运行程序。你的意思是*阅读*代码* **和**文本,而不是运行它!它是有效的代码,但它仅用于演示目的(这就是为什么它没有合适的主体)。有关主要方法的帮助,请参阅http://*.com/questions/146576/why-is-the-java-main-method-static。 – 2014-09-12 12:40:55
@Joachim谢谢!我错过了一些基本的东西,它意味着让一个方法变成静态的,以及'this.'如何工作。我的理解是,'this.'允许你调用一个方法或变量,这个方法或变量对于类的实例化版本是唯一的,允许另一个方法或变量版本存在,而不会调用'this.'。在一个简单的调用'Test.class'我有两个方法:'公共静态无效的主要()'和'公共测试()'我不能在方法之间传递信息,因为'main'是静态的,并且构造函数不能静态。我应该发布一个新问题吗? – dbconfession 2014-09-12 20:32:23
在挥杆的相当普遍编写实现ActionListener
一类,并添加当前实例(即“本”),作为一个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!");
}
}
以下是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
与它的实例相关联,这在静态方法中不起作用。
我希望我能够upvote 10次,尤其是第一和第五点。我一直努力了解'这个'的意义,直到我找到这个为止。精致! – 2014-01-13 13:01:41
如果你打电话myObject.method()
那么this
将指里面method
。
是完整的,this
也可用于指外对象
class Outer {
class Inner {
void foo() {
Outer o = Outer.this;
}
}
}
这是我正在寻找的! ;) – forresthopkinsa 2017-06-27 18:32:29
对象有方法和属性被从类派生的(变量),以指定哪些方法和变量属于使用了一个特定的对象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”用于特定对象,在我们的例子中,我们使用了前面构建的“audi”对象,我们使用this
保留关键字。对于实例变量在方法中使用“this”指示实例变量(在本例中为“tank”)是隐式参数的实例变量。
java编译器会自动添加this
保留字,所以您不必添加它,这是一个偏好问题。你不能使用没有点(。)的this
,因为这些是java的规则(语法)。
综上所述。
- 对象由类定义并具有方法和变量
- 在方法上实例变量采用
this
表明,实例变量属于隐式参数,或者说,它是隐式参数的实例变量。 - 隐式参数是在这种情况下调用方法的对象“audi”。
- Java编译器自动将这个保留字,将其添加是偏好的问题
-
this
不能没有点(。)这是句法无效 -
this
还可以使用的局部变量来区分使用和具有相同名称的全局变量 -
this
保留字也适用于方法,用于指示方法属于特定对象。
的此关键字被用于指一个块的当前可变的,例如考虑下面的代码(只是一exampple,所以不要指望标准Java代码):
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”。 如果我们没有使用这个关键字,那么输出将是:0
如果作为在构造函数中声明的变量,然后我们用实例变量相同的“本”来分配数据。
class Example{
int assign;// instance variable
Example(int assign){ // variable inside constructor
this.assign=assign;
}
}
希望这有助于。
在Java中,“this”是一个预定义的变量。如果我们在方法中使用“this”,这意味着我们正在获取当前运行对象的引用(地址)。举一个例子。
this.age --->当前运行对象的年龄。
给回复者:http://meta.stackexchange.com/questions/15775/do-you-delete-your-own-answer-when-its-a-duplicate – BalusC 2010-09-16 15:19:35
Yakshemash! SO朋友。你可能想在这里引用我的问题 - https://*.com/questions/23334336/this-in-java-exception-in-thread-main-java-lang-*error Chenqui。 – 2014-04-28 17:16:34