在java中的this如何使用?实际代码详解

BSO 2020-09-03 08:58:50 java常见问答 5053

随着时代与科技的进步与发展,java的应用越加广泛和深刻。今天就来为大家介绍一下,在java中的this这个关键字该如何使用,并且通过具体的代码来为大家详细展示。

首先,我们需要了解的是:

一、当成员变量和局部变量重名,在方法中使用this时,表示的是该方法所在类中的成员变量。也就是说this是当前对象自己。代码展示如下:

public class Hello
{
    String s = "Hello";
    public Hello(String s)
    {
        System.out.println("s = " + s);
        System.out.println("1 -> this.s = " + this.s);
        this.s = s; //把参数值赋给成员变量,成员变量的值改变
        System.out.println("2 -> this.s = " + this.s);
    }
    public static void main(String[] args)
    {
        Hello x = new Hello("HelloWorld!");
        System.out.println("s=" + x.s); //验证成员变量值的改变
    }
}
结果为: s = HelloWorld!
    - > this.s = Hello -
    >
    this.s = HelloWorld!
    s = HelloWorld!

在上面这个例子中,我们可以很清晰地看出来,构造函数Hello中,参数s与类Hello的成员变量s同名,这时如果直接对s进行操作则是对参数s进行操作。

二、把自己当作参数传递时,也可以用this。这个时候this作为当前参数进行传递,代码展示如下:

 class A
 {
     public A()
     {
         new B(this)
             .print(); // 调用B的方法
     }
     public void print()
     {
         System.out.println("HelloAA from A!");
     }
 }
 class B
 {
     A a;
     public B(A a)
     {
         this.a = a;
     }
     public void print()
     {
         a.print(); //调用A的方法
         System.out.println("HelloAB from B!");
     }
 }
 public class HelloA
 {
     public static void main(String[] args)
     {
         A aaa = new A();
         aaa.print();
         B bbb = new B(aaa);
         bbb.print();
     }
 }
 结果为:
 HelloAA from A!
     HelloAB from B!
     HelloAA from A!
     HelloAA from A!
     HelloAB from B!

在上面这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。

三、有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这个时侯如果我们要使用外部类的方法和变量的话,就需要加上外部类的类名。代码展示如下:

public class HelloB
{
    int i = 1;
    public HelloB()
    {
        Thread thread = new Thread()
        {
            public void run()
            {
                for (int j = 0; j < 20; j++)
                {
                    HelloB.this.run(); //调用外部类的方法
                    try
                    {
                        sleep(1000);
                    }
                    catch (InterruptedException ie)
                    {}
                }
            }
        }; // 注意这里有分号
        thread.start();
    }
    public void run()
    {
        System.out.println("i = " + i);
        i++;
    }
    public static void main(String[] args) throws Exception
    {
        new HelloB();
    }
}

在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的run函数里用到了外部类的run函数。这时由于函数同名,直接调用就不行了。这种情况下有两种办法:1.把外部的run函数换一个名字;2.用这个例子中的办法,用外部类的类名加上this引用来说明要调用的是外部类的方法run。

四、在构造函数中,通过this可以调用同一类中别的构造函数,代码展示如下:

public class ThisTest
{
    ThisTest(String str)
    {
        System.out.println(str);
    }
    ThisTest()
    {
        this("this测试成功!");
    }
    public static void main(String[] args)
    {
        ThisTest thistest = new ThisTest();
    }
}

为了进一步明确说明this的用法,再举一个例子,代码如下:

public class ThisTest
{
    private int age;
    private String str;
    ThisTest(String str)
    {
        this.str = str;
        System.out.println(str);
    }
    ThisTest(String str, int age)
    {
        this(str);
        this.age = age;
        System.out.println(age);
    }
    public static void main(String[] args)
    {
        ThisTest thistest = new ThisTest("this测试成功", 25);
    }
}
结果为:
this测试成功
25

同时需要注意的是,⑴在构造调用另一个构造函数,调用动作必须置于最起始的位置;⑵不能在构造函数以外的任何函数内调用构造函数; ⑶在一个构造函数内只能调用一个构造函数。

五、this同时传递多个参数,代码展示如下:

public class TestClass
{
    int x;
    int y;
    static void showtest(TestClass tc)
    { //实例化对象
        System.out.println(tc.x + " " + tc.y);
    }
    void seeit()
    {
        showtest(this);
    }
    public static void main(String[] args)
    {
        TestClass p = new TestClass();
        p.x = 9;
        p.y = 10;
        p.seeit();
    }
}
结果为: 9 10

这里面的showtest(this), this就是把当前实例化的p传给了showtest()方法,才得以运行。

以上就是关于在java 中的this使用方法的详细解读。想要了解更多java经典例子,敬请关注奇Q工具网。

推荐阅读:

在java中如何生成webservice的接口?详细图文解析

在java中怎么用SOAP调用webservice,如何写它的接口?

在java中如何用Apche CXF开发webservice,实际操作展示