当前位置:首页 » 编程语言 » java里的this

java里的this

发布时间: 2023-06-01 01:46:47

‘壹’ java中this的用法

java中this有两种用法:
1、代表当前类
public class Dog{
private String name;
private float age;
public setName(String name){
this.name = name;
}
.......
}
这里的this就代表的当前的这个Dog类。this.name可以理解为dog.name,只是理解,不是等于。
2、在构造函数中的使用
public class Dog{
private String name;
private int age;
//有一个参数的构造函数
public Dog(String name){
this.name = name;
}
public Dog(String name,int age){
this.name = name;
this.age = age;
}
//这个无参构造方法里调用的有两个参数的构造方法,这个也就是this的第二种用法了!
public Dog(){
this("nihao",20);
}
}

‘贰’ java中一般方法里的this是代表调用本方法的对象,但是构造方法里的this代表的是什么呢。

this代表你正在构造的对象。

publicclassTest{
publicTest(){
System.out.println(this.toString());
}
publicstaticvoidmain(String[]args){
Testobj=newTest();
System.out.println(obj.toString());
}
}

输出的两个字符串相同(后面的数字是对象地址),说明this和obj是同一个对象。


这里this就是正在构建的CommunicationDemo的对象,作为参数传给Thread的构造函数。


内幕是:java对象的建立其实是在构造函数开始执行之前,就是说构造函数执行的时候,被构造的对象其实已经存在了,所以构造函数中可以用this引用当前被构造的对象进行处理(比如 this.name=“Jack”)。

‘叁’ java中this作为参数指什么

java中的this随处可见,用法也多,现在整理有几点:

1. 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!");
}
}
运行结果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果; 第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!

2. 把this作为参数传递
当你要把自己作为参数传递给别的对象时,也可以用this。如:
public class A {
public A() {
new B(this).print();
}

public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;

public B(A a) {
this.a = a;
}

public void print() {
a.print();
System.out.println("Hello from B!");
}
}
运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。

‘肆’ 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得到的是什么

你这个问题应该是问在3g平台下面把,那么得到的是上下文对象-context。在j2se得到是当前类的一个对象

‘陆’ java 中this的用法

用this可以调用本类的属性,方法,构造方法,
this(x,y,0)是用来调用public
Point3D(int
x,
int
y,
int
z)这个构造方法的,这个时候本类的3个属性就都有值了:x,y是外来传入的值,z的值直接就是0了!
为什么要用this.x=x
,this.y=y
,
this.z=z,是为了区分外来的值名与本类下属性名的重名,this.x就是调用的属性!
还可以调用方法,如:this.方法名(),这样就调用本类下的这个方法!

‘柒’ java里this是什么意思

Java关键字this只能用于方法方法体内。

个对象创建后,Java虚拟机(JVM)就会给这 个对象分配一个引用自身的指针,这个指针的 名字就是 this。因此,this只能在类中的非静 态方法中使用,静态方法和静态的代码块中绝 对不能出现this,这在“Java关键字static、fina l 使用总结”一文中给出了明确解释。并且this只 和特定的对象关联,而不和类关联,同一个类 的不同对象有不同的this。

‘捌’ Java中this的作用和用法以及含义!

this指直译是“这个”,在java中指“当前的”。不管在哪里,只要用到this,指的一定就是当前的这个对象。最常见的用法是在写java bean中。比如下面的代码

publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this();
this.setName(name);
this.age=age;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnthis.age;
}
}

上面的代码是一个java bean。所谓的java bean就是一个类,这个类有一些属性,方法只有这些属性的Getter 或者Setter (从Object类继承的方法不算在此列)。

这个bean有两个属性,在构造器中为属性赋值的时候写的this.setName(name).意思是调用当前你创建的这个对象的Setter给这个对象的属性赋值。而setName里面的this.name = name;这一句,等号之前的this.name表示当前对象的name,也就是在类里面定义的private String name这个变量,而等号之后的name表示从外界调用这个方法时候传进来的参数。所以这句话的意思就是将外界传来的字符串变量的值赋给当前对象的name属性。

那么构造器第一行的this()是做什么的呢?这句话是调用当前这个对象的无参构造,就是调用上面的public Student(){}这个构造器。在这段代码里this()体现不出来什么作用。但是我们知道构造器的作用是在构造对象的时候给属性赋值的。如果上面个无参构造里面写一些赋值语句的话那么这里就可以避免代码的重复了。但是请注意,调用this()的时候一定要写在该方法的第一行,否则会报错。

另外,this关键字不能使用在有static关键字修饰的方法和代码块里面。因为static是这个类的所有对象共用的,而this指的只是当前这个对象的“私人”的一些东西,在属性上面就冲突了。


说到this就得顺带提一下super关键字了。super关键字的用法同this差不多,同样不能与static一起使用。同样有super()的写法,且需要写在方法第一行。但是super所指示的东西可不一样,一般指的是当前这个类的直接父类。如果在子类中需要使用父类的构造器或者属性的时候可以使用super关键字。比如下面的代码:

{
publicStudent(){
super();
}
@Override
publicbooleanequals(Objectobj){
returnsuper.equals(obj);
}
}

上面这段代码就是在实现equals方法的时候调用其直接父类的Object类的equals方法。而在构造这个类的对象的时候也调用了其父类的构造方法。

注:上面代码中的extends Object其实完全不必写,因为所有的类都直接或者间接是Object类的子类(除了Object类本身)。如果不写extends的话默认继承Object类。这里为了需要所以这样写

‘玖’ java当中this应该怎么理解

在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。现在让大家看一个小例子,给你分享一下JAVA中“this”的用法!
本示例为了说明this的三种用法!
public class ThisTest {
private int i=0;
//第一个构造器:有一个int型形参
ThisTest(int i){
this.i=i+1;//此时this表示引用成员变量i,而非函数参数i
System.out.println("Int constructor i——this.i: "+i+"——"+this.i);
System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));
//从两个输出结果充分证明了i和this.i是不一样的!
}
// 第二个构造器:有一个String型形参
ThisTest(String s){
System.out.println("String constructor: "+s);
}
// 第三个构造器:有一个int型形参和一个String型形参
ThisTest(int i,String s){
this(s);//this调用第二个构造器
//this(i);
/*此处不能用,因为其他任何方法都不能调用构造器,只有构造方法能调用他。
但是必须注意:就算是构造方法调用构造器,也必须为于其第一行,构造方法也只能调
用一个且仅一次构造器!*/
this.i=i++;//this以引用该类的成员变量
System.out.println("Int constructor: "+i+"\n"+"String constructor: "+s);
}
public ThisTest increment(){
this.i++;
return this;//返回的是当前的对象,该对象属于(ThisTest)
}
public static void main(String[] args){
ThisTest tt0=new ThisTest(10);
ThisTest tt1=new ThisTest("ok");
ThisTest tt2=new ThisTest(20,"ok again!");
System.out.println(tt0.increment().increment().increment().i);
//tt0.increment()返回一个在tt0基础上i++的ThisTest对象,
//接着又返回在上面返回的对象基础上i++的ThisTest对象!
}
}

运行结果:
Int constructor i——this.i: 10——11
String constructor: ok
String constructor: ok again!
Int constructor: 21
String constructor: ok again!
14
细节问题注释已经写的比较清楚了,这里不在赘述,只是总结一下,其实this主要要三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

‘拾’ this()在java中什么意思

this表示类实例本身。

this的用法:

1、表示对当前对象的引用!

publicclassA{

publicAgetA(){

returnthis;//表示获取当前实例本身

}

}

2、表示类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!

publicclassA{

privateinta=0;//位置1

publicAgetA(inta){

this.a=a;//前面this.a表示位置1的a,赋值=号右侧的表示参数a

}

}

3、用于在构造方法中引用满足指定参数类型的构造器。

publicclassA{

publicA(inta){

}

publicA(){

this(1);//这里调用自身的构造函数publicA(inta){

}

}

热点内容
微博上传原图 发布:2024-05-05 10:20:05 浏览:747
服务器换电脑需要什么东西 发布:2024-05-05 09:52:28 浏览:753
老算盘算法 发布:2024-05-05 09:43:10 浏览:840
ps存储显示不含通道 发布:2024-05-05 09:32:35 浏览:102
如何用安卓做一个识物界面表 发布:2024-05-05 09:29:28 浏览:98
如何编译linux内核模块 发布:2024-05-05 09:27:25 浏览:168
为什么apple验证无法连接服务器 发布:2024-05-05 09:20:35 浏览:660
linuxscript 发布:2024-05-05 09:19:49 浏览:324
asp编程词典 发布:2024-05-05 09:09:50 浏览:526
引流群控脚本 发布:2024-05-05 08:42:14 浏览:178