`
zhaoqingqing
  • 浏览: 5335 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

我看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里的内容也变成了“小狗”。这就是引用传递,把一个对象的地址复制一份给另一个对象,两个对象同时指向同一个存储空间,变就同时变。
分享到:
评论

相关推荐

    java值传递与引用传递

    在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...

    Java是值传递,传对象引用也是通过值

    总的来说,理解Java中的值传递和对象引用传递对于编写高效、无误的代码至关重要。无论是基本类型还是对象类型,参数传递都是以值的形式进行,但对象类型的值是其引用,允许我们在方法内修改对象的状态,而不影响方法...

    一步一步学JAVA(第四课 方法、值传递、this关键字).docx

    * 当将引用类型的变量作为参数传递给方法时,实际上是将变量的引用传递给方法。 * 在方法内部对参数的修改将影响原始变量的值。 this关键字 在Java中,`this`关键字用于指向当前对象的引用。`this`关键字可以用来...

    浅谈JavaScript 函数参数传递到底是值传递还是引用传递

    然而,JavaScript的实现其实更为复杂,它包含了值传递和引用传递的特性,但并不完全等同于这两种方式。 首先,我们来看基础类型的参数传递。例如,对于一个数字`num`: ```javascript function add(num) { num +=...

    Java引用变量传递诡异之处

    3. **理解按值传递的概念**:Java中的所有参数传递都是按值传递的,即使是引用类型也不例外。这意味着在方法内部对参数的修改不会影响到外部的原始变量。 掌握这些核心概念对于理解Java中引用类型的行为至关重要,...

    JAVA参数传递方式实例浅析【按值传递与引用传递区别】

    JAVA 参数传递方式实例浅析【按值传递与引用传递区别】 JAVA 参数传递方式实例浅析【按值传递与引用传递区别】是 JAVA 编程语言中的一种基本概念,对于 JAVA 开发者来说是非常重要的。本文将通过实例形式分析 JAVA ...

    C#窗体间的值传递

    3. 事件驱动:通过定义自定义事件,在一个窗体中触发事件,然后在另一窗体中处理该事件,从而传递值。这适用于更复杂的数据交换场景。 ```csharp public class Form1 { public event EventHandler<EventArgs> ...

    窗体间值传递

    为了实现窗体间的值传递,我们需要在创建新窗体时传入当前窗体的引用。这样做的目的是让新窗体能够访问原始窗体中的属性或方法。这种方式特别适用于MDI(Multiple Document Interface)应用,其中多个窗体可以嵌套在...

    java代码笔记2010-05-31:继承this()的使用多态;单态;静态初始化;==比较的是地址;参数传递的是个值的拷贝还是引用的传递;循环菱形

    在Java编程语言中,本文将深入探讨几个关键概念,包括继承中的`this()`构造器调用、多态性、单态设计模式、静态初始化、对象引用的`==`比较以及参数传递机制。这些知识点是Java程序员必备的基础知识,对理解和编写...

    探讨Java中函数是值传递还是引用传递问题

    根据标题和描述,本文将深入探讨Java中函数参数传递的机制,究竟是值传递还是引用传递。实际上,Java只支持值传递,但这种值传递对于引用类型(对象)的数据有着特殊含义。 首先,值传递是指当函数调用时,实际参数...

    关于java的传递方式问题

    Java支持两种基本的数据传递方式:值传递和引用传递。本文将详细介绍这两种传递方式,并通过具体的例子来说明它们的区别和应用。 #### 二、Java中的数据类型 Java中的数据类型分为两大类:原始类型(Primitive ...

    php函数间的参数传递(值传递/引用传递)

    参数传递主要有两种方式:值传递和引用传递。了解这两种传递方式的差异对于编写高效和易于维护的代码至关重要。 值传递是PHP中最基本的参数传递方式,当函数参数通过值传递时,传递给函数的是原始数据的一个副本。...

    Java参数传递及值传递实现原理详解

    参数传递有两种方式:按值传递和按引用传递。 1. 按值传递(Call by Value) 按值传递是指将实参的值复制给形参,形参的变化不会影响实参的值。这种方式适用于基本数据类型,如int、long、float等。在按值传递中,...

    JAVA【第5章:面向对象基础】_引用传递及其应用.rar

    在Java中,参数传递主要有两种方式:值传递和引用传递,而Java中只支持引用传递,这与C++中的引用传递有所不同。了解并熟练掌握这一特性对于编写高效、可维护的代码至关重要。 首先,我们需要明确"值传递"和"引用...

    利用Parceable传递复杂对象

    Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", yourParcelableObject); startActivity(intent); ``` 在接收端,使用`getParcelableExtra()`来获取对象。 4. **注意事项**...

    深入理解JavaScript 参数按值传递

    虽然表面上看起来像**按引用传递**,但JavaScript实际上是采用了**按共享传递**的方式。以对象为例: ```javascript var obj = {value: 1}; function foo(o) { o.value = 2; console.log(o.value); // 输出2 } ...

    窗体间通过属性和委托传递值

    "窗体间通过属性和委托传递值"是一种常见的实现方式,它能够帮助我们有效地管理数据流,提高程序的灵活性。以下将详细解释这个主题。 1. **属性(Properties)**:属性是类的公共接口,用于获取或设置类的内部数据...

    C# 两个窗体之间实时传递数据的实例

    在C#编程中,开发GUI应用程序时经常需要在不同的窗体之间传递数据。在这个实例中,我们将探讨如何在两个窗体之间实现实时的数据传递,主要采用委托和事件的技术。这种方式可以确保数据的安全性,避免了直接引用导致...

Global site tag (gtag.js) - Google Analytics