首页 > 其他分享 >this关键字

this关键字

时间:2024-08-01 12:51:33浏览次数:9  
标签:String void System 关键字 println public 构造函数

当局部变量和成员变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this指的是当前对象自己)
如:public class World {

String s = "World";



public World(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) {

   World x = new World("HelloWorld!");

   System.out.println("s=" + x.s);//验证成员变量值的改变

}

}

结果为:s = HelloWorld!

1 - this.s = World

2 - this.s = HelloWorld!

s=HelloWorld!

在这个例子中,构造函数World中,参数s与类World的成员变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果; 第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!而第四行是主函数中直接打印类中的成员变量的值,也可以验证成员变量值的改变。

2.把自己当作参数传递时,也可以用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的构造函数。

3. 有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中用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 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

4. 在构造函数中,通过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

值得注意的是: 1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。 2:不能在构造函数以外的任何函数内调用构造函数。 3:在一个构造函数内只能调用一个构造函数。

5.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

标签:String,void,System,关键字,println,public,构造函数
From: https://www.cnblogs.com/luoyiwen123/p/18336439

相关文章

  • super关键字
    super关键字目录super关键字两种途径语法格式常见用法访问父类的构造方法访问父类的成员变量访问父类的方法在多态上下文中使用在静态上下文中使用在匿名内部类中使用两种途径调用父类的方法调用父类的构造方法语法格式super.属性名//访问父类的属性super.方法名(参数);......
  • final关键字
    final关键字目录final关键字修饰类修饰方法修饰变量修饰成员变量修饰局部变量修饰基本数据类型修饰引用数据类型修饰类当final修饰类时,表示该类不可被继承。修饰方法当final修饰方法时,表示方法不可被子类覆盖,但是可以重载。修饰变量修饰成员变量如果final修饰的是类变量,......
  • await 调用的函数不一定必须是 async 函数。 await 关键字通常用于 async 函数内部,用
    await调用的函数不一定必须是async函数。 await关键字通常用于async函数内部,用来等待一个Promise对象的解决。但如果被await调用的对象不是Promise,那么它会被直接返回。 functionnotPromiseFunction(){return42;}asyncfunctionexample(){const......
  • 关键字和保留字
    目录关键字(Keyword)定义:特点:保留字(ReservedWord)特点:关键字(Keyword)定义:关键字是被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。它们对Java的编译器有特殊的意义,用于表示一种数据类型或者表示程序的结构等。特点:关键字中的所有字母都是小写。关键字不能用作变量名、方......
  • 关键字和保留字
    1.1概念Java关键字(KeyWord):对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构.保留字(ReserveWord):即它们在Java现有版本中没有特殊含义,以后版本可能会作为有特殊含义的词,或者该词虽然在Java中没有特殊含义,以后版本也不打算使用,但在其它语言中有特殊含义,......
  • 关键字和保留字
    关键字和保留字1.关键字(Keyword)关键字是被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。它们是Java语法的一部分,用于表示特定的数据类型、程序结构等。特点:关键字中的所有字母都是小写。关键字不能用作变量名、方法名、类名等标识符。Java中的关键字:访问......
  • 关键字和保留字
    关键字Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等关键字列表(依字母排序共51组):abstract,assert,boolean,break,byte,case,catch,char,class,const,continue,default,do,double,else,enum,extends,final,finally,......
  • 关键字和保留字
    关键字和保留字关键字访问控制:public,protected,private:用于控制类、方法和变量的访问级别。类和接口:class,interface:用于定义类和接口。extends:用于实现继承。implements:用于实现一个或多个接口。对象和实例:new:用于创建对象实例。this:引用当前......
  • C++11 中引入的auto关键字
    什么是auto关键字?    在C++11中,auto关键字被引入作为一种类型推断的机制(在编译期间执行),它允许编译器自动推断变量的类型。auto使用时需要注意的问题:1、auto与指针和引用结合使用:首先说一下auto和auto*为什么一样,因为在autoa=&x;这里auto类型推......
  • 如何通过关键字显示这些信息?
    我需要通过关键字查找单元格并显示相邻单元格的信息。我只需要显示一个数字。我该怎么做?这里我必须手动插入表格、行号和行号。但我想自动化这个。如何通过关键字自动搜索页面、行和列?importrefromdocximportDocumentdocument=Document('889411.docx......