- 浏览: 55388 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
HNUlanwei:
flag = true不是为了跳出循环,而是为了继续外层的wh ...
冒泡排序的优化算法(Java) -
QuarterLifeForJava:
把flag = true; 换成break就可以了
冒泡排序的优化算法(Java) -
javafound:
强~!
GFS文件系统的架构分析
关于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
,两者都指向了同一内存空间,这就是引用传递。
各位领导,给位前辈,看一看,瞧一瞧,求指教!!!
一 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中的注解是如何工作的?
2016-08-22 10:26 712自Java5.0版本引入注解之后,它就成为了Java平台中 ... -
Stack栈之四则运算(取需)
2015-06-15 23:16 1523package Lanwei_20150615Stack_O ... -
最通俗易懂的方式讲解HashMap
2015-06-12 02:38 3889HashMap,困扰着 ... -
转:Swing中的各种消息提示框
2015-06-10 18:35 3898最近在做swing程序中遇到使用消息提示框的,JOp ... -
聊聊匿名内部类
2015-06-10 00:53 554匿名内部类,即没有名字的内部类,智能使用一次 ... -
重谈Java的中的参数传递
2015-06-08 17:02 1158最近在复习Java的基础知识,看到自己以前的技术 ... -
Java中static关键字小小总结
2013-08-06 11:56 555static关键字 1、建立静态方法 ... -
我眼中的Java通信
2013-08-04 01:25 658通信学习小结 学 ... -
Java文件操作小结
2013-07-23 22:34 610Java文件操作小结 对于文件操作,个人 ... -
数据结构之链表与数组(二)—链表实现队列
2013-07-22 20:04 704数据结构之链表与数组(一)—链表实现队列 ... -
数据结构之链表与数组(一)—数组实现队列
2013-07-22 13:24 1018数据结构之链表与数组(一)—数组实现队列 一、数组与链表 ... -
Java学习事件机制小结
2013-07-16 12:44 911Java学习事件机制小结 事件处理是 ... -
Java图形组件Swing小结
2013-07-16 11:45 1422Java图形组件Swing小结 一、知识点小结 ... -
Java中类的继承学习小结
2013-07-16 00:21 962Java中类的继承学习小结 一、Java中什么是 ... -
Java类与对象小结
2013-07-15 15:25 796类与对象小结 Java编程是面向对象的面向对 ...
相关推荐
"一步一步学JAVA(第四课 方法、值传递、this关键字)" 本资源主要介绍了Java语言中的方法、值传递和this关键字的使用。通过实例代码和详细的解释,读者可以了解Java方法的声明和调用方式、值传递的机制和this关键字...
### ASP.NET中的this关键字 在ASP.NET开发过程中,`this`关键字是一个非常重要的概念,它在类的方法或构造函数中有着特殊的意义与用途。本文将详细介绍`this`关键字的用法及其背后的原理。 #### `this`关键字概述 ...
本文将深入探讨`this`关键字在Java程序中的应用,以及它如何与内存分配相关联。 首先,`this`关键字在Java中主要表示当前对象的引用。它可以在类的方法中使用,用来访问该类的实例变量,调用其他方法,或者在构造器...
在 Java 编程语言中,`this` 关键字是一个非常重要的概念,它用来引用当前对象的实例。本文将深入探讨 `this` 关键字的三种主要用途,并通过实例代码来解析其工作原理。 首先,`this` 关键字的基本含义是引用当前...
### Java中的this关键字详解 #### 一、概述 在Java编程语言中,`this`关键字是一种非常实用且灵活的关键字,它主要用于指代当前对象。`this`可以在类的内部被使用,帮助开发者清晰地表达代码逻辑,尤其是在解决...
【标题】: "this关键字共2页.pdf.zip" 指的是一份关于Java编程语言中的关键字"this"的文档,可能包含两页详细讲解。这个压缩文件很可能提供了"this"关键字的基础概念、用法以及在实际编程中的应用示例。 【描述】: ...
初学者在学习Java时,理解和掌握`this`关键字的使用是至关重要的,因为它可以帮助我们更好地编写和理解类与对象之间的关系。下面我们将深入探讨`this`关键字的几个主要用法。 1. **成员变量的访问** 当类中的局部...
### Java零基础-this关键字 #### 内容概要 本文主要介绍了Java编程语言中的`this`关键字及其在不同场景下的应用。通过本文的学习,初学者能够深入理解`this`关键字的作用,掌握其在实例方法、构造方法及内部类中的...
1. **this关键字的含义** `this`关键字在Delphi中代表了正在执行方法的那个对象实例。当在一个类的方法内,我们需要引用到当前对象的属性或方法时,`this`就起到了指针的作用,指向调用该方法的对象实例。通过`this...
### Java软件开发实战:Java基础与案例开发详解之this关键字 #### 一、this关键字概述 在Java编程中,`this`关键字是一个非常重要且实用的概念。`this`关键字主要用于引用当前对象实例,使得开发者能够在方法内部...
7. this关键字的传递: 当一个对象作为参数传递给另一个方法时,"this"可以作为参数传递,这样接收方法就可以访问到调用方法的对象的属性和方法。 8. this与final关键字的结合: 如果一个方法声明为final,那么这...
在Java编程语言中,`this`关键字是一个非常关键的概念,它代表了当前对象的引用。在不同的上下文中,`this`有不同的用法和含义,但始终指向调用该代码的对象。接下来,我们将深入探讨`this`关键字在Java中的应用。 ...
由于JavaScript的函数是一等公民,可以作为变量传递、作为对象的属性,也可以被其它函数作为参数传递,因此`this`的指向是动态变化的,这也是它与许多其他面向对象编程语言中的`this`用法最显著的区别。 首先,`...
总结起来,理解JavaScript中的`this`关键字至关重要,因为它在不同情境下有不同的行为。在编写代码时,正确地理解和使用`this`可以帮助我们更好地控制代码的执行环境,避免安全问题,比如避免意外修改全局变量,确保...
在C#编程语言中,`this`关键字是一个非常重要的引用,它用来表示当前对象的引用。这个关键字在很多场景下都有着广泛的应用,帮助开发者更好地理解和操作对象实例。下面我们将详细探讨`this`关键字的用途、用法以及它...
// 使用this关键字区分实例变量和构造函数参数 this.rollno = rollno; this.name = name; this.fee = fee; } void display() { System.out.println(rollno + " " + name + " " + fee); } } ``` 2. 调用...
在继承关系下,this 关键字的使用方法与前文所述相同,但是需要注意的是,this 关键字并不总是表示父类中的变量和方法。例如: ```java public class Parent { public String str; public Parent() { this(1); ...
在Java语言中,this关键字可以用于四个方面:作为当前对象的引用、作为方法的参数传递、在匿名类和内部类中使用this、在构造方法中的this。 1.this作为当前对象的引用 在Java语言中,每一个类的方法成员都会隐含一...
在类的实例方法中,如果存在局部变量与成员变量同名的情况,"this"关键字可以用来明确指代实例变量。例如,类Person有一个名为"name"的成员变量,同时在某个方法中也有一个局部变量也叫"name"。通过"this.name",...