当前位置:首页 » 编程语言 » java构造方法this

java构造方法this

发布时间: 2022-09-06 22:26:34

java中“this”的用法是什么

一、指自己所在的对象。
比如在一个方法中,调用其他对象的变量或方法时,可以使用那个对象的对象名,比如aa.abc();
而调用自己所在对象的方法或变量时,不知道别人给起了什么名,所以直接用this.abc()就可以了。
二、看一个小例子中“this”的用法!

/**

* @author feng-neusoft

*

* 本示例为了说明this的三种用法!

*/

package test;

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方法中使用!

⑵ java 构造函数 this

你先要去弄懂this的三种用法:
有三种用法:
1、表示对当前对象的引用!

2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!
你的实例中 在类B的构造方法中
public B(A a)
通过方法重载 带了A的一个实例 通过this.a=a;
给类B中的A对象赋值
在类A中 b=new B(this);
因为B b=new B(new a());
而this表示当前类的实例

⑶ java中this的作用及用法是什么

使用this调用本类中的属性

现在观察以下代码,看会有那些问题:

public void setName(String name){

name = name ;

}

这里面的两个name都是setName方法中的name参数。

此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。

class Person{

private String name ;

private int age ;

public Person(String name,int age){

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo35{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

};

使用this还可以从一个构造方法中调用其他构造方法。

例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

}

public Person(String name,int age){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo36{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

};

注意点1:

如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。

public void fun(){

// 发现在调用fun方法的时候,必须先设置name的值

this("zhangsan") ;

}

public Person(String name,int age){

this.setAge(age) ;

this(name) ; //--> 必须放在首行

}

注意点2:

使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。

public Person(){

this("a",10) ;

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ; //--> 必须放在首行

this.setAge(age) ;

}

this最重要的特性 —— 表示当前对象

当前对象在程序中用以下形式体现:

· 当前操作此方法的对象,就称为当前对象。

class Demo{

public void print(){

System.out.println(this) ;

}

};

public class Demo38{

public static void main(String args[]){

Demo d1 = new Demo() ;

System.out.println(d1) ;

d1.print() ;

System.out.println("---------------------") ;

Demo d2 = new Demo() ;

System.out.println(d2) ;

d2.print() ;

}

};

回顾:

之前讲解的两个对象比较的程序。

// 在类的内部增加一个比较的方法

public boolean compare(Person p){

Person p1 = this ;

Person p2 = p ;

if(p1.name.equals(p2.name)&&p1.age==p2.age){

return true ;

}else{

return false ;

}

}

分析程序的运行过程:

class A{

private B b = null ;

public A(){

this.b = new B(this) ;

this.b.fun() ;

}

public void hello(){

System.out.println("Hello World!!!") ;

}

};

class B{

private A a = null ;

public B(A a){

this.a = a ;

}

public void fun(){

this.a.hello() ;

}

};

public class OODemo40{

public static void main(String args[]){

A aa = new A() ;

}

};

⑷ Java 构造方法重载后,在构造方法中可以使用this语句进行构造方法之间的调用,

  1. 两个构造方法不能用this相互调用,this调用构造方法的最大个数只能是构造方法总数-1

  2. 否则会出现无限递归调用。

  3. 也就是说两个构造方法不能同时用this调用另一个,会产生无限的递归调用。

  4. 如下代码:就会无限递归。

classA{

inta;

intb;

A(inta){

this(a,0);

}

A(inta,intb){

this(a);

thia.b=b;

}

}

⑸ 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);
}
}

⑹ 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){

}

}

⑺ java构造方法中“this.x=a”与“this.x=x”分别是什么意思

我想你对java中的 成员变量和局部变量 的定义和范围不太了解吧。
先简单的解释一下
1、成员变量
指代在类中,方法外 定义的 基本数据类型 称之为 成员变量,当然了,也是可以定义对象的,那样就称为成员属性。
2、局部变量
指代在方法中定义出来的变量,可以是方法内声明的,也可以是方法的传入参数。

再解释你上面的情况:
private int x ; 就是 成员变量了
public Abc(int a ){this.x=a; }

这个里的 int a 是方法的参数,也是局部变量 。
而内部使用的this.x 指代的是获取当前类的属性,这个属性可以是方法,可以是变量,可以是对象。
因此,这个this.x 就是获取了成员变量的 x

而你后面的方法
public Abc(int x ){this.x=x; }

这2个 x 是不同的 一个是 局部变量 ,一个是成员变量
this的都是成员的东西~

⑻ 关于Java中构造方法中使用this的问题,新手求大神解答

this 就是指的当前对象 也就是 你例子中 Person 的对象 this(name) 相当于调用了public Person(String name) 构造函数

你应该知道 super 指的是当前对象的父类对象 你经常在 当前对象的构造函数中看到 super();
这个就是在调用 父类对象的 空函数构造方法, this() 当然就是调用当前对象的空函数构造方法了
this(name) 自然就是调用当前对象带一个参数的构造方法

⑼ java的构造方法里面用this();再调用构造方法有什么好处,有什么用啊

java中this关键字有三个作用:
区别全局变量和局部变量
在方法中this表示谁调用该方法 this就代表谁
例如:public void show(){
Synchronized(this){
……}
}
同步代码块表示 哪个对象调用该方法 就得到哪个对象的对象锁
构造器中this()表示调用形式参数相同的同一个类中的另一个构造器,这样就可以代码复用
就拿你那段代码来说 this()就表示调用该类中 名称是Note 形参是空的构造器 让里面的代码在这个有参的构造器中再跑一遍

热点内容
oicq服务器地址 发布:2025-01-13 17:34:19 浏览:928
默认管理密码是什么 发布:2025-01-13 17:33:33 浏览:443
系列影视广告文案脚本 发布:2025-01-13 17:31:57 浏览:792
防盗器编程 发布:2025-01-13 17:24:39 浏览:899
联通电信服务器怎么不卡顿 发布:2025-01-13 17:21:30 浏览:821
科沃兹低配可以升级哪些配置 发布:2025-01-13 17:09:26 浏览:330
android判断数据库是否存在 发布:2025-01-13 17:08:17 浏览:334
ie脚本运行错误 发布:2025-01-13 17:08:05 浏览:623
python中或者怎么表示 发布:2025-01-13 16:32:33 浏览:291
易达加密锁 发布:2025-01-13 16:27:23 浏览:516