首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

小弟我看this,值传递,引用传递

2013-03-29 
我看this,值传递,引用传递一、this关键字this的用途1.区分属性和参数(加了this的就表示属性,没有加的则是参

我看this,值传递,引用传递
一、this关键字
      this的用途
          1.区分属性和参数(加了this的就表示属性,没有加的则是参数)。
  2.this关键字可以用来调用类中的构造方法,注意:所带的参数必须要完全一致。
例如:1、  public Sister(String name,int age){
                  this.name=name;
                  this.age=age;
                                          }
         this.name表示属性,name表示参数;把name的值传给this.name。就修改了属性值。
       2、    当要调用此构造方法时,用this(name,age)语句即可实现。


     那么this到底表示谁呢?
           当我们运行main函数Girl时,
        public class Girl{
           public static void main(String []args){
                  Sister sis=new Sister(null,0);
                  sis.getName("莉莉");
                  int i=18;
                  sis.changeAge(i);
          System.out.println(i);    
                 Pet p=new Pet();
                 p.setName("小猫");
                System.out.println("给她一只"+this.name);
                 sis.havePet(p);
                System.out.println("她原来有"+p.getName());
                                                 }

                  }

         会出现结果:莉莉的年龄为19
                     18
                     莉莉有一只小狗
                     她原有一只小狗
         而我们的类Pet和类Sister中都有用到了this,但是根据结果我们可以看出,当调用方法sis.setName(“莉莉”)时,输出name的结果是“莉莉”;当调用p.setName("小狗")时,输出的name结果是“小狗”。由此可知this表示当前方法的对象。即a对象调用方法时,那么方法中的this就表示a。


          Java的数据类型分为两类:
1.基本数据类型(八大基本数据类型)
byte      字节型       8bit     1byte        -128~127  
short     短整型       16bit    2byte
int       整型         32bit    4byte
long      长整型       64bit    8byte
float     浮点型单精度 32bit    4byte
double    浮点型双精度 64bit    8byte

char      字符型       16bit    2byte
boolean   布尔类型     true和false  

2.引用数据类型(对象类型,类类型)
包含的类型有:
1.所有用class,abstract class,interface定义的类,抽象类和接口。
2.数组    int [] array = new int[10];

只要是使用了new关键字,那么就属于引用数据类型。

2.值传递
    值传递适用于Java的那些数据类型
值传递适用于Java中的八大基本数据类型和String。

    值传递的方式
值传递是将变量i的值拷贝一份存入到另一个变量score,此时在栈内存中就存在了两块独立
存储空间,分别存储了i和score,这时候对其中任意一个变量进行修改都不会影响到另外一个。
如果想要两边都是修改后的值,那么就只能在修改后,将值重新再赋值一次。 
    例如:在Sister函数中   
              public void changeAge(int age){
                            this.age=age;
                    
                            this.age++;
                   System.out.println(name+"的年龄为"+this.age);
                                      }
       在Girl函数中
                      Sister sis=new Sister();
                  sis.getName("莉莉");
                  int i=18;
                  sis.changeAge(i);
                 Syetem.out.println(i);
     输出结果:莉莉的年龄为19;
              18;
    可看出i的值赋给了this.age,在执行this.age后,this.age变为19;但i仍为18;这是因为i和age分别存储在不同的存储空间里,改变其中一个量的值并不影响另一个量的值。
    

3.引用传递
    引用传递适用于Java的那些数据类型
引用传递适用引用数据类型。

    引用传递的方式
引用传递是将对象名XX中存储的地址拷贝一份存入到XX2中,此时两个对象名就指向了同一个对象;现在适用其中任何一个对象名,来修改对象的属性值,那么另一个对象名的也会跟着改变(这就相当于1个人有两个名字)。

    如:主函数中    Pet p=new Pet();
                 p.setName("小猫");
                 sis.havePet(p);
                System.out.println("她原来有"+p.getName());

此时创建了一个对象p;并给了对象p的内容为“小猫”,下面执行函数havePet,函数havePet中的参数是p,即创建的对象的地址;此时p和sis两个对象指向了同一个地址,在执行语句
  
            public void havePet(Pet pat){
                       pat.setName("小狗");
                       System.out.println(name+"有一只"+pat.getName());                       
                                     }
    后,sis对象里的内容为“小狗”;同时p里的内容也变成了“小狗”。这就是引用传递,把一个对象的地址复制一份给另一个对象,两个对象同时指向同一个存储空间,变就同时变。

热点排行