传递和返回对象

到目前为止,读者应对对象的“传递”有了一个较为深刻的认识,记住实际传递的只是一个句柄。

在许多程序设计语言中,我们可用语言的“普通”方式到处传递对象,而且大多数时候都不会遇到问题。但有些时候却不得不采取一些非常做法,使得情况突然变得稍微复杂起来(在C++中则是变得非常复杂)。Java亦不例外,我们十分有必要准确认识在对象传递和赋值时所发生的一切。这正是本章的宗旨。

若读者是从某些特殊的程序设计环境中转移过来的,那么一般都会问到:“Java有指针吗?”有些人认为指针的操作很困难,而且十分危险,所以一厢情愿地认为它没有好处。同时由于Java有如此好的口碑,所以应该很轻易地免除自己以前编程中的麻烦,其中不可能夹带有指针这样的“危险品”。然而准确地说,Java是有指针的!事实上,Java中每个对象(除基本数据类型以外)的标识符都属于指针的一种。但它们的使用受到了严格的限制和防范,不仅编译器对它们有“戒心”,运行期系统也不例外。或者换从另一个角度说,Java有指针,但没有传统指针的麻烦。我曾一度将这种指针叫做“句柄”,但你可以把它想像成“安全指针”。和预备学校为学生提供的安全剪刀类似——除非特别有意,否则不会伤着自己,只不过有时要慢慢来,要习惯一些沉闷的工作。

时间: 2024-10-31 22:56:05

传递和返回对象的相关文章

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

关于序列化:PHP 拥有序列化方法,可以返回对象的字符串表示。但序列化只保存对象的成员数据而不包话方法

对象|数据|字符串     PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象.这就是所谓的序列化机制.PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示.然而,序列化只保存了对象的成员数据而不包话方法. 在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有

传递和返回数据到一个Delphi编写的UDF

数据 [UDF系列之四]:传递和返回数据到一个Delphi编写的UDFWarton译作者: Chris Levesque, Tina Grubbe, Brett Bandy -------------------------------------------------------------------------------- [译者叙]: 前面我已经翻译了几篇关于编写UDF的文章,虽然一些朋友可能也从中得到了一点帮助,但是可能对UDF的认识还存在一些问题.今天,我再翻译两文章,这两篇文章

使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员

对象 ///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请包含本声明///作者: CSDN网名alias88,邮件:alias88@163.com,QQ:63343 ,欢迎加我     /// <summary>     ///依导航路径调用对象成员方法,或返回对象其子.孙属性或字段成员. ///例子: ///获得表的第二列的名称 ///GetMember(dataTable1.GetType(),"Columns.Item.Name",dataTable1,

c++怎样让返回对象的函数不调用拷贝构造函数

  我们知道拷贝构造函数有两种"默默"的方式被调用 1. 想函数传入 值参数 2. 函数返回 值类型 今天我们讨论函数返回值类型的情况. 得到结论是 1. 当对象有拷贝构造函数(系统为我们生成.或者我们自己写拷贝构造函数)可以被隐式调用时,函数返回时会使用拷贝构造函数. 2. 当对象的拷贝构造函数声明成为explicit(不能被隐式调用时),函数返回时会使用move构造函数. 先看开始的代码. #include <iostream> #include <memory&

android-使用 async task 如何返回对象?

问题描述 使用 async task 如何返回对象? 我想从 async task 里解析后返回 tweets 的列表,但是我从 task 中没有返回 arraylist.谁能提供一个解决方案啊? @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ArrayList listItems = new ArrayList(); new myAsyncTask(

mysql-连接池。 DriverManager.getConnection()返回对象不变。。

问题描述 连接池. DriverManager.getConnection()返回对象不变.. public static void main(String[] args) throws Throwable { JDBCUtil jdbc=new JDBCUtil(); jdbc.getConnection(); jdbc.getConnection(); } public void getConnection() { Connection conn = null; try { Class.fo

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller;   import java.util.Map;   import javax.servlet.http.HttpServletRequest;   import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import

C++返回对象的常指针函数

问题描述 C++返回对象的常指针函数 第四题为啥选b? 解决方案 可以把一个指针声明成为一个指向函数的指针. int fun1(char*,int); int (*pfun1)(char*,int); pfun1=fun1; .... .... int a=(*pfun1)("abcdefg",7);//通过函数指针调用函数. 我觉得这道题应该也是差不多的 解决方案二: 有const修饰所以不能改变对象里的成员值,而static不属于某个对象,而属于整个类,所以返回静态的就没问题. 解