javathis有什么用(java中this的作用及用法是什么)
老铁们,大家好,相信还有很多朋友对于javathis有什么用和java中this的作用及用法是什么的相关问题不太懂,没关系,今天就由我来为大家分享分享javathis有什么用以及java中this的作用及用法是什么的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
java中this的作用
在Java中,this关键字表示当前对象的引用,它是一个引用类型的变量。this关键字只能在非静态方法中使用,因为静态方法没有this关键字。this关键字指的是当前对象,因此只有在创建对象之后才能使用this关键字。同时,使用this关键字需要遵守Java的变量作用域规则,避免产生歧义和错误。
在Java中,this关键字具有以下作用:
1、区分局部变量和实例变量
当局部变量和实例变量同名时,使用this关键字可以明确指定使用实例变量,而非局部变量。例如:
public class Person{ private String name; public void setName(String name){ this.name= name; }}
在上面的代码中,使用this.name表示实例变量,而name表示方法参数。
2、调用当前对象的方法
在一个对象的方法中,可以使用this关键字调用该对象的其他方法。这种方式可以提高代码的可读性和重用性。例如:
public class Person{ private String name; public void setName(String name){ this.name= name; } public void printName(){ System.out.println("My name is"+ this.name); }}
在上面的代码中,使用this.printName()调用了对象的printName()方法。
3、在构造函数中调用其他构造函数
当一个类有多个构造函数时,可以使用this关键字调用其他构造函数,简化构造函数的代码。在构造函数中使用this关键字调用其他构造函数时,必须放在构造函数的第一行。例如:
public class Person{ private String name; private int age; public Person(String name){ this(name, 0); } public Person(String name, int age){ this.name= name; this.age= age; }}
在上面的代码中,使用this(name, 0)调用了另一个构造函数。
4、作为返回值返回当前对象的引用
在一个对象的方法中,可以使用this关键字返回当前对象的引用。这种方式可以支持方法链式调用,提高代码的简洁性和可读性。例如:
public class Person{ private String name; private int age; public Person setName(String name){ this.name= name; return this; } public Person setAge(int age){ this.age= age; return this; }}
在上面的代码中,setName()和setAge()方法都返回当前对象的引用,支持链式调用。
综上所述,this关键字可以区分局部变量和实例变量,调用当前对象的方法,简化构造函数的代码,以及作为返回值返回当前对象的引用。
java中this的作用及用法是什么
使用this调用本类中的属性\x0d\x0a\x0d\x0a现在观察以下代码,看会有那些问题:\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0aname= name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a这里面的两个name都是setName方法中的name参数。\x0d\x0a\x0d\x0a此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name;\x0d\x0a\x0d\x0aprivate int age;\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setName(name);\x0d\x0a\x0d\x0athis.setAge(age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name= name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age= age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo35{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1= new Person("张三",30);\x0d\x0a\x0d\x0ap1.print();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a使用this还可以从一个构造方法中调用其他构造方法。\x0d\x0a\x0d\x0a例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name;\x0d\x0a\x0d\x0aprivate int age;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。");\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。");\x0d\x0a\x0d\x0athis.setName(name);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。");\x0d\x0a\x0d\x0athis.setName(name);\x0d\x0a\x0d\x0athis.setAge(age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name= name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age= age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name;\x0d\x0a\x0d\x0aprivate int age;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。");\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a//最终都是调用无参构造方法\x0d\x0a\x0d\x0athis();\x0d\x0a\x0d\x0athis.setName(name);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name);\x0d\x0a\x0d\x0athis.setAge(age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name= name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age= age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo36{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1= new Person("张三",30);\x0d\x0a\x0d\x0ap1.print();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a注意点1:\x0d\x0a\x0d\x0a如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0a//发现在调用fun方法的时候,必须先设置name的值\x0d\x0a\x0d\x0athis("zhangsan");\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setAge(age);\x0d\x0a\x0d\x0athis(name);//-->必须放在首行\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a注意点2:\x0d\x0a\x0d\x0a使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0athis("a",10);\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。");\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a//最终都是调用无参构造方法\x0d\x0a\x0d\x0athis();\x0d\x0a\x0d\x0athis.setName(name);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name);//-->必须放在首行\x0d\x0a\x0d\x0athis.setAge(age);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0athis最重要的特性——表示当前对象\x0d\x0a\x0d\x0a当前对象在程序中用以下形式体现:\x0d\x0a\x0d\x0a·当前操作此方法的对象,就称为当前对象。\x0d\x0a\x0d\x0aclass Demo{\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println(this);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo38{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aDemo d1= new Demo();\x0d\x0a\x0d\x0aSystem.out.println(d1);\x0d\x0a\x0d\x0ad1.print();\x0d\x0a\x0d\x0aSystem.out.println("---------------------");\x0d\x0a\x0d\x0aDemo d2= new Demo();\x0d\x0a\x0d\x0aSystem.out.println(d2);\x0d\x0a\x0d\x0ad2.print();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a回顾:\x0d\x0a\x0d\x0a之前讲解的两个对象比较的程序。\x0d\x0a\x0d\x0a//在类的内部增加一个比较的方法\x0d\x0a\x0d\x0apublic boolean compare(Person p){\x0d\x0a\x0d\x0aPerson p1= this;\x0d\x0a\x0d\x0aPerson p2= p;\x0d\x0a\x0d\x0aif(p1.name.equals(p2.name)&&p1.age==p2.age){\x0d\x0a\x0d\x0areturn true;\x0d\x0a\x0d\x0a}else{\x0d\x0a\x0d\x0areturn false;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a分析程序的运行过程:\x0d\x0a\x0d\x0aclass A{\x0d\x0a\x0d\x0aprivate B b= null;\x0d\x0a\x0d\x0apublic A(){\x0d\x0a\x0d\x0athis.b= new B(this);\x0d\x0a\x0d\x0athis.b.fun();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void hello(){\x0d\x0a\x0d\x0aSystem.out.println("Hello World!!!");\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0aclass B{\x0d\x0a\x0d\x0aprivate A a= null;\x0d\x0a\x0d\x0apublic B(A a){\x0d\x0a\x0d\x0athis.a= a;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0athis.a.hello();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class OODemo40{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aA aa= new A();\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};
java this什么意思
想理解this首先要理解两个概念,类和对象。一个一般的类可以new很多对象,每一个对象都有一个this来指向这个对象本身。类本身是没有this的,因为类本身是一个抽象的概念。要想用类的方法和属性,就必须new一个他的对象,这时会产生一个对应的this,就是this object;或者用静态方法,静态方法可以不用new对象,因为是属于类的方法,所以所有静态方法里是不能出现this的。
比如:
class A{
private int data;
public void setData(int data){
this.data= data;////这个this表示的是这个类new的一个对象,而不是类本身。就是这个类没有new出一个对象之前,是不能调用这个方法的。
}
public int getData(){
return this.data;////
}
public static void print(){
System.out.println("This IS a static functions.");//这是一个静态方法,里面是不允许有this的,因为静态的属性和方法属于类,属于公共的东西,而不专属于某一个对象
}
}
关于本次javathis有什么用和java中this的作用及用法是什么的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。