`

关于this关键字、值传递与引用传递的知识与应用总结

 
阅读更多
关于this关键字、值传递与引用传递的知识与应用总结

一 this关键字
   this在类中用来指代当前的对象,即指代引用者


//定义一个Student类
public class Student {

//属性和方法
private String name;
private String sex;
private double score;
//定义修改(设置)、获取名字属性值的方法
//根据Java的就进原则,需用this关键字来说明等号左值为类的属性值而不是方法的参数值
public void setName(String name){
       this.name = name ;

         }
public String getName(){
       return name;
         }
public void setSex(String sex){
       this.sex = sex ;

         }
public String getSex(){
       return sex;
         }
//定义一个学习方法
public void study(int score){
       score++;
       System.out.println(this.getName()+"   性别:"+this.getSex()+("  ,")+"学习中,学分为"+score);
    
         }


}

//在另一个文件中定义程序入口
public class Test{

   //定义主函数入口
   public static void main(String [] args){
   //实例化对象 
   Student stu = new Student();
   //设置属性值
   stu.setName("刘闯");
   stu.setSex("男");
   stu.study(5);

        }

}


程序运行结果为:
刘闯    性别:男  ,学习中,学分为6

(在编写程序的过程中错把应为的“;”敲成了中文的“;”,一度为此纠结了半天)


扩展:this除了有指代当前的对象得功能外,还能作为参数进行传递,有兴趣的可以通过度娘了解一下。

二  值传递和引用传递

Java的数据类型分为两类:
.基本数据类型(八大基本数据类型)
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  



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

    值传递的方式
值传递是将变量i的值拷贝一份存入到另一个变量score,此时在栈内存中就存在了两块独立
存储空间,分别存储了i和score,这时候对其中任意一个变量进行修改都不会影响到另外一个。
如果想要两边都是修改后的值,那么就只能在修改后,将值重新再赋值一次。


//定义一个Student类
public class Student {

//属性和方法
private String name;
private String sex;
private double score;
//构造函数
public  Student(String name){
       this.name = name;

         }
//定义修改(设置)、获取名字属性值的方法
//根据Java的就进原则,需用this关键字来说明等号左值为类的属性值而不是方法的参数值

public void setName(String name){
       this.name = name ;

         }
public String getName(){
       return name;
         }
public void setSex(String sex){
       this.sex = sex ;

         }

//定义一个学习方法
public void study(int score){
       score++;
       System.out.println(this.getName()+"学习中,学分为"+score);
      
         }


}
//定义一个Book类
public class Book {

private String name;

public void setName(String name){
this.name = name;
}

public String getName(){
return name;
}

}

//定义一个Test类
public class Test {

//程序的入口主函数
public static void main(String [] args){

                //实例化一个Book类的对象
Book bo = new Book();
bo.setName("《Java》");

//实例化(创建)对象
Student stu = new Student("李四");

//实例化(创建)对象
Student stu2 = new Student("张三");
            stu.study(5);
        stu2.study(4);//调用学习方法

                System.out.println("书名是:"+bo.getName());


}

}
 
程序运行结果为:
      李四学习中,学分为6
      张三学习中,学分为5
      书名是: 《Java》

若将Test主函数中的代码改写:

//定义一个Test类
public class Test {

//程序的入口主函数
public static void main(String [] args){

                //实例化一个Book类的对象
Book bo = new Book();
bo.setName("《Java》");

//实例化(创建)对象
Student stu = new Student("李四");

//实例化(创建)对象
Student stu2 = new Student("张三"); 
stu2.setName(stu.getName());//修改stu2的姓名
                stu.study(5);
        stu2.study(4);//调用学习方法

                System.out.println("书名是:"+bo.getName());


}

}
程序运行结果为:
      李四学习中,学分为6
      李四学习中,学分为5
      书名是: 《Java》

代码“stu2.setName(stu.getName());”将stu的name传递了stu2,度两个学生对象的
姓名都为李四。若对stu2的name属性值进行修改,不会影响到stu的name属性值,这是值
传递的单向性。对Tset的主函数改动如下:
//定义一个Test类
public class Test {

//程序的入口主函数
public static void main(String [] args){

                //实例化一个Book类的对象
Book bo = new Book();
bo.setName("《Java》");

//实例化(创建)对象
Student stu = new Student("李四");

//实例化(创建)对象
Student stu2 = new Student("张三");
stu2.setName(stu.getName());//修改stu2的姓名
                stu2.setName("王五");
                stu.study(5);
        stu2.study(4);//调用学习方法

                System.out.println("书名是:"+bo.getName());


         }

}
程序运行结果为:
      李四学习中,学分为6
      王五学习中,学分为5
      书名是: 《Java》


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

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

将上诉代码Test的主函数作如下改动:
//定义一个Test类
public class Test {

//程序的入口主函数
public static void main(String [] args){

                //实例化一个Book类的对象
Book bo = new Book();
bo.setName("《Java》");

//实例化(创建)对象
Student stu = new Student("李四");

//实例化(创建)对象
Student stu2 = new Student("张三");
stu2 = stu;//赋值操作 
                stu.study(5);
        stu2.study(4);//调用学习方法

                System.out.println("书名是:"+bo.getName());


         }

}
程序运行结果为:
      李四学习中,学分为6
      李四学习中,学分为5
      书名是: 《Java》

无论对stu或stu2的name属性值做出修改,结果都会发生相应的改变:

//定义一个Test类
public class Test {

//程序的入口主函数
public static void main(String [] args){

                //实例化一个Book类的对象
Book bo = new Book();
bo.setName("《Java》");

//实例化(创建)对象
Student stu = new Student("李四");

//实例化(创建)对象
Student stu2 = new Student("张三");
stu2 = stu;//赋值操作
                stu.setName("王五");
                stu.study(5);
        stu2.study(4);//调用学习方法

                System.out.println("书名是:"+bo.getName());


         }

}
程序运行结果为:
      王五学习中,学分为6
      王五学习中,学分为5
      书名是: 《Java》
对象名中存储的是对象的起始地址,对像名之间进行赋值“stu2 = stu;”是将stu的地址赋给了stu2
,两者都指向了同一内存空间,这就是引用传递。




各位领导,给位前辈,看一看,瞧一瞧,求指教!!!
分享到:
评论

相关推荐

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

    "一步一步学JAVA(第四课 方法、值传递、this关键字)" 本资源主要介绍了Java语言中的方法、值传递和this关键字的使用。通过实例代码和详细的解释,读者可以了解Java方法的声明和调用方式、值传递的机制和this关键字...

    asp.net this关键字.txt

    ### ASP.NET中的this关键字 在ASP.NET开发过程中,`this`关键字是一个非常重要的概念,它在类的方法或构造函数中有着特殊的意义与用途。本文将详细介绍`this`关键字的用法及其背后的原理。 #### `this`关键字概述 ...

    java中带有this关键字的程序内存分析

    本文将深入探讨`this`关键字在Java程序中的应用,以及它如何与内存分配相关联。 首先,`this`关键字在Java中主要表示当前对象的引用。它可以在类的方法中使用,用来访问该类的实例变量,调用其他方法,或者在构造器...

    Java中this关键字使用小结

    在 Java 编程语言中,`this` 关键字是一个非常重要的概念,它用来引用当前对象的实例。本文将深入探讨 `this` 关键字的三种主要用途,并通过实例代码来解析其工作原理。 首先,`this` 关键字的基本含义是引用当前...

    this关键字的总结.doc

    ### Java中的this关键字详解 #### 一、概述 在Java编程语言中,`this`关键字是一种非常实用且灵活的关键字,它主要用于指代当前对象。`this`可以在类的内部被使用,帮助开发者清晰地表达代码逻辑,尤其是在解决...

    this关键字共2页.pdf.zip

    【标题】: "this关键字共2页.pdf.zip" 指的是一份关于Java编程语言中的关键字"this"的文档,可能包含两页详细讲解。这个压缩文件很可能提供了"this"关键字的基础概念、用法以及在实际编程中的应用示例。 【描述】: ...

    java this关键字的使用

    初学者在学习Java时,理解和掌握`this`关键字的使用是至关重要的,因为它可以帮助我们更好地编写和理解类与对象之间的关系。下面我们将深入探讨`this`关键字的几个主要用法。 1. **成员变量的访问** 当类中的局部...

    Java零基础-this关键字.md

    ### Java零基础-this关键字 #### 内容概要 本文主要介绍了Java编程语言中的`this`关键字及其在不同场景下的应用。通过本文的学习,初学者能够深入理解`this`关键字的作用,掌握其在实例方法、构造方法及内部类中的...

    this关键字的用法.pdf

    1. **this关键字的含义** `this`关键字在Delphi中代表了正在执行方法的那个对象实例。当在一个类的方法内,我们需要引用到当前对象的属性或方法时,`this`就起到了指针的作用,指向调用该方法的对象实例。通过`this...

    Java软件开发实战 Java基础与案例开发详解 5-7 this关键字 共5页.pdf

    ### Java软件开发实战:Java基础与案例开发详解之this关键字 #### 一、this关键字概述 在Java编程中,`this`关键字是一个非常重要且实用的概念。`this`关键字主要用于引用当前对象实例,使得开发者能够在方法内部...

    第04章 面向对象(上) 07 This关键字

    7. this关键字的传递: 当一个对象作为参数传递给另一个方法时,"this"可以作为参数传递,这样接收方法就可以访问到调用方法的对象的属性和方法。 8. this与final关键字的结合: 如果一个方法声明为final,那么这...

    java中的this关键字

    在Java编程语言中,`this`关键字是一个非常关键的概念,它代表了当前对象的引用。在不同的上下文中,`this`有不同的用法和含义,但始终指向调用该代码的对象。接下来,我们将深入探讨`this`关键字在Java中的应用。 ...

    关于js里的this关键字的理解

    由于JavaScript的函数是一等公民,可以作为变量传递、作为对象的属性,也可以被其它函数作为参数传递,因此`this`的指向是动态变化的,这也是它与许多其他面向对象编程语言中的`this`用法最显著的区别。 首先,`...

    详解JavaScript中this关键字的用法_.docx

    总结起来,理解JavaScript中的`this`关键字至关重要,因为它在不同情境下有不同的行为。在编写代码时,正确地理解和使用`this`可以帮助我们更好地控制代码的执行环境,避免安全问题,比如避免意外修改全局变量,确保...

    this关键字

    在C#编程语言中,`this`关键字是一个非常重要的引用,它用来表示当前对象的引用。这个关键字在很多场景下都有着广泛的应用,帮助开发者更好地理解和操作对象实例。下面我们将详细探讨`this`关键字的用途、用法以及它...

    【Java编程教程】详解Java this 关键字.pdf

    // 使用this关键字区分实例变量和构造函数参数 this.rollno = rollno; this.name = name; this.fee = fee; } void display() { System.out.println(rollno + " " + name + " " + fee); } } ``` 2. 调用...

    Java this 关键字的使用方法详解

    在继承关系下,this 关键字的使用方法与前文所述相同,但是需要注意的是,this 关键字并不总是表示父类中的变量和方法。例如: ```java public class Parent { public String str; public Parent() { this(1); ...

    Java语言中this的应用方法研究.pdf

    在Java语言中,this关键字可以用于四个方面:作为当前对象的引用、作为方法的参数传递、在匿名类和内部类中使用this、在构造方法中的this。 1.this作为当前对象的引用 在Java语言中,每一个类的方法成员都会隐含一...

    Java面向对象程序设计this关键字.pptx

    在类的实例方法中,如果存在局部变量与成员变量同名的情况,"this"关键字可以用来明确指代实例变量。例如,类Person有一个名为"name"的成员变量,同时在某个方法中也有一个局部变量也叫"name"。通过"this.name",...

Global site tag (gtag.js) - Google Analytics