java构造方法this
⑴ 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语句进行构造方法之间的调用,
两个构造方法不能用this相互调用,this调用构造方法的最大个数只能是构造方法总数-1
否则会出现无限递归调用。
也就是说两个构造方法不能同时用this调用另一个,会产生无限的递归调用。
如下代码:就会无限递归。
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 形参是空的构造器 让里面的代码在这个有参的构造器中再跑一遍