有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在方法内部使用“this”(不用于调用方法、构造函数或变量)

我试图在不使用Vector类中的构造函数参数的情况下更改向量的容量。所以我创建了一个MyVector类,并从Vector扩展了它。这段代码中的一切都正常工作,但我无法理解在setCapacityIncrement(int capacityIncrement)方法中使用“this”

public class App {
    public static void main(String [] args)
    {
        MyVector<Integer> v = new MyVector<>(4);

        System.out.printf("Capacity=%d%n", v.capacity());

        for (int i = 0; i < 5; ++i)
            v.add(i);

        System.out.printf("Capacity=%d%n", v.capacity());

        v.setCapacityIncrement(10);

        for (int i = 0; i < 5; ++i)
            v.add(i);

        System.out.printf("Capacity=%d%n", v.capacity());
    }
}

MyVector类:

class MyVector<T> extends Vector<T> {
    public MyVector()
    {
        super();
    }

    public MyVector(int capacity)
    {
        super(capacity);
    }

    public MyVector(Collection<? extends T> coll)
    {
        super(coll);        
    }

    public MyVector(int capacity, int capacityIncrement)
    {
        super(capacity, capacityIncrement);
    }

    public void setCapacityIncrement(int capacityIncrement)
    {
        this.capacityIncrement = capacityIncrement;
    }
}  

共 (2) 个答案

  1. # 1 楼答案

    您需要this.capacityIncrement,因为字段被参数capacityIncrement遮挡,因为它们具有相同的名称

    如果您这样做了capacityIncrement = capacityIncrement;,您将为您的capacityIncrement参数指定相同的值,这将不会产生任何效果

    如果它们没有相同的名称,则不需要this,如下所示:

    public void setCapacityIncrement(int increment)
    {
        capacityIncrement = increment;
    }
    

    根据您的编辑,在MyVector类中使用capacityIncrement字段也是一个坏主意,因为父Vector中已经有一个同名的受保护变量

    这将导致Vector capacityIncrement字段被您自己的字段遮挡

  2. # 2 楼答案

    当您使用“this”时,您指的是类的对象。 所以这个。capacityIncrement是指从中调用的向量类tat的对象中的可变capacityIncrement。请注意,传递到方法中的参数也称为capacityIncrement。所以如果你只是写信, 电容增量=不带“this”的电容增量编译器只会假设您引用的是局部变量,即参数

    可变电容增量是vector类中的受保护变量。这意味着只有vector类或扩展vector类的类可以直接访问它