假设我有一个简单的示例控制台程序,如下所示。我的问题是关于this
。仅仅使用this
是否可以使用输入变量名来分配给实例变量?我想知道this
的用法除了在这个程序的上下文中使用了什么之外?
public class SimpleClass {
int numberOfStudents;
public SimpleClass(){
numberOfStudents = 0;
}
public void setStudent(int numberOfStudents){
this.numberOfStudents = numberOfStudents;
}
public void printStudents(){
System.out.println(numberOfStudents);
}
public static void main(String[] args) {
SimpleClass newRandom = new SimpleClass();
newRandom.setStudent(5);
newRandom.printStudents();
}
}
以前,当我需要为与输入值具有相似性的实例变量名称分配值时,我必须使用我的命名方案(或缺少)来创造。例如,setStudent()
方法如下所示:
public void setStudent(int numberOfStudentsI){
numberOfStudents = numberOfStudentsI;
}
从上面的例子来看,似乎使用this
取代必须这样做。这是它的用途,还是我错过了什么?
答案 0 :(得分:2)
事情与你现在如何看待它们完全相反:this
是Java / C#中一个如此重要且经常使用的项目,它有许多特殊的语法规则,允许它们在哪里假设。这些规则导致您实际上很少看到this
写出来。
但是,除了您的示例之外,还有许多其他无法避免显式this
的情况(Java):
this
作为参数传递给其他方法; this
(使用 Builder 模式定期发生); this
分配给变量; ......等等。
答案 1 :(得分:1)
this
:
someMethod(this);
除了这种语法之外别无选择(双关语)。
它也用于调用共同构造函数和C#扩展方法。
答案 2 :(得分:1)
'this'只是指对象本身。
当编译器查找'numberOfStudents'的值时,它会匹配具有此名称的'nearest'变量。在这种情况下函数的参数。 但是如果你想将它分配给类变量,你需要使用'this。' - 表示法!
方法
public void setStudent(int numberOfStudents){
this.numberOfStudents = numberOfStudents;
}
例如。
'this.numberOfStudents'引用名为'numberOfStudents'的类变量 'numberOfStudents'引用方法的参数
因此,这个方法简单地将参数的值赋给类变量(具有相同的名称)。
答案 3 :(得分:0)
在c#中你使用它来引用类对象的当前实例immagine你有这样的类来自msdn
class Employee
{
private string name;
private string alias;
private decimal salary = 3000.00m;
// Constructor:
public Employee(string name, string alias)
{
// Use this to qualify the fields, name and alias:
this.name = name;
this.alias = alias;
}
// Printing method:
public void printEmployee()
{
Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
// Passing the object to the CalcTax method by using this:
Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
}
public decimal Salary
{
get { return salary; }
}
}
class Tax
{
public static decimal CalcTax(Employee E)
{
return 0.08m * E.Salary;
}
}
class MainClass
{
static void Main()
{
// Create objects:
Employee E1 = new Employee("Mingda Pan", "mpan");
// Display results:
E1.printEmployee();
}
}
/*
Output:
Name: Mingda Pan
Alias: mpan
Taxes: $240.00
*/
答案 4 :(得分:0)
Java / C#中有不同的变量范围。以下面的例子为例。虽然this.numberOfStudents
和numberOfStudents
具有相同的名称,但它们并不完全相同。
public void setStudent(int numberOfStudents){
this.numberOfStudents = numberOfStudents;
}
this.numberOfStudents
是一个名为numberOfStudents
的变量,它位于此类的实例中。 this
始终指向当前实例。
public void setStudent(int numberOfStudents)
numberOfStudents
是此方法中可用的新变量。
答案 5 :(得分:0)
关键字“this”指的是当前类的对象(SimpleClass)。
public class SimpleClass(){
private int a;
private int b;
private int c;
public SimpleClass(int a, int b){
this.a = a;
this.b = b;
}
public SimpleClass(int a, int b, int c){
// this constrcutor
this(a,b);
this.c = c;
}
}