this关键字/数组初始化/可变参数的数组

this关键字表示”调用方法的那个对象”的引用。

我们有时在写程序时会有这种需求,想要在方法内部获得当前对象的引用(就是调用当前方法的那个对象),那么就可以在方法内部使用this关键字代指当前对象的引用。
比如

public class Test {
    public static void main(String[] args) {
        new At().aa().sout();
    }
}
class At{
    public void sout(){
        System.out.println(123);
    }
    public At aa(){
        return this;
    }
}

这段代码输出的就是123。
但要注意的是,如果在方法内部调用属于同一个类的另一个方法,不用使用this,直接调用即可,当中方法中的this引用会自动应用于同一个类中的其他方法。
当然也可以this来引用,不过编译器能帮你自动添加。


this另外一个应用就是在一个构造器内调用另一个构造器
在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用;这样,调用其他构造器就有了直接的途径:

public class Test {
    public Test(){
        System.out.println("无参构造方法。。。");
    }
    public Test(int a){
        this();
        System.out.println("有一个参数为" + a + "的构造方法。。。");
        //this(); this应放在第一行
    }
    public Test(int a,int b){
        //this();  一个构造方法内不能使用两个this
        this(12);
        System.out.println("有两个参数分别为" + a + "和" + b + "的构造方法。。。");
    }
    public static void main(String[] args) {
        new Test(12,23);
    }
}

在这里插入图片描述


在Java中,可以将一个数组赋给另一个数组

int[] a1 = {1, 2, 3, 4, 5};
int[] a2;
a2 = a1;

但真正做的只是复制了一个引用。
比如

public static void main(String[] args) {
        int [] a1 = {1, 2, 3, 4, 5};
        int [] a2;
        a2 = a1;
        for(int i = 0 ;i < a2.length; i++)
            a2[i]++;
        for(int i = 0; i < a1.length; i++)
            System.out.print(a1[i] + " ");
    }

结果:
在这里插入图片描述
可以看到代码中给出了a1的初始值,但a2没给,a2是在后面被赋给另一个数组的。由于a2和a1是相同的数组别名,因此通过a2所作的修改在a1还可以看到。


数组的可变参数方便了我们写代码,可以传任意个参数进去,甚至可以传0个,还支持自动装箱。
但在涉及到可变参数的重载时,就要注意了:

public class H2 {

    public static void main(String[] args) {
        f(1, 'a');
        f('a', 'a');
    }

    static void f(float i, Character... args) {
        System.out.println("first");
    }

    static void f(Character... args) {
        System.out.print("second");
    }
}

比如这段代码,在ide里不会报错,但编译时,就会出现如下情况:
在这里插入图片描述
可以看出来,这里‘a’字符被提升到了float类型,导致与重载方法都匹配的问题。
所以Think in java上建议我们应该总是只在重载方法的一个版本上使用可变参数列表,或者压根就不是用它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值