java 对象this的引用

一 this关键字总是指向调用该方法的对象,根据this出现的位置不同,this作为对象的默认引用有2种情形。 (this关键字最大的作用就是让类中的一个方法,访问该类里的另一个方法或实例变量)

1 构造器中引用该构造器正在初始化的对象

2 在方法中引用调用该方法的对象

pubic class Dog{

public void jump() {

System.out.println("jump");

}

public void run(){

1  Dog d=new Dog();//产生一个对象,这意味着一个Dog对象的方法需要依赖另一个Dog对象。不符合逻辑

d.jump();

2 this.jump();

3 jump();//java允许对象的一个成员直接调用另一个成员,省略this


System.out.pritnln("run")

}

}

public class DogTest{

public static void main(String[]args){

Dog dog=new Dog();

d.run();

}

}

二 this 不能用static修饰 ,java语法规定静态成员不能直接访问非静态成员

public class staticAccessNonStatic{

public void info(){


}

public static void main(String[] args){

info();//main方法是静态方法 ,info()是非静态。main方法是该类本身,不是类的实例。因此无法指向info();

new StaticAccessNonStatic().info;可以访问到

}

}

注意 java编程时不要使用对象去调用static修饰的成员变量,而是用类调用。

三 this引用用于构造器作为默认引用

public class ThisInConstructor{

public int foo;

public ThisInConstructor(){

int foo=0;

this.foo=6;//下面的代码将会把构造器正在初始化的对象的foo成员变量设为6;

}

public static void main(String[]args){


System.out.println(new ThisInConstrutor().foo);//都输出6;

}

}

四 方法的参数传递机制 (值传递)

1 基本类型

public class PrimitiveTransferTest{

public static void swap(int a,int b){

int tmp=a;

a=b;

b=tmp;

// a=9;b=6

}

public static void main(String[]args){

int a=6;

int b=9;

swap(a,b);

//a=6,b=9

}

}

交换结束后a和b的值不变,说明swap的a和b是main方法中a和b的复制品。系统在main栈区产生2个变量,swap栈区产生2个变量。即4个变量。

值传递实质:当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋给方法的形参变量,方法里操作的并不是实际的实参变量;


2 引用类型

public class ReferenceTransferTest{

  public static void swap(DataWrap dw){

int tmp=dw.a;

dw.a=dw.b;

dw.b=tmp;

//a=9,b=6

}

public static void main(Stirng []args){

DataWrap dw=new DataWrap();

dw.a=6;

dw.b=9;

swap(dw);

//a=9,b=6

}

}

创建 DataWrap对象时, dw(main栈区)引用指向对象(保存在堆内存) ,把该对象a,b两个成员变量分别赋值为6,9。

接下来main方法开始调用swap()方法,系统再为swap开辟出栈区。main把dw作为实参赋给swap中dw形参。

因为dw是一个引用变量,所以系统复制了dw变量,但并未复制DataWrap对象。所以dw实际操作的是同一对象,swap相当于把对象的a,b值重新赋值。

五 形参个数可变的方法

public class Varargs{

public static void test(int a,String...books){

//作为数组处理

for(String tmp:books){

System.out.println(tmp)

}

}

public static void main (String []args){

test(5,"aaaaa","bbbbb","ccccc")

}

}

一个方法中最多只能有一个个数可变的形参。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值