传递句柄

将句柄传递进入一个方法时,指向的仍然是相同的对象。一个简单的实验可以证明这一点(若执行这个程序时有麻烦,请参考第3章3.1.2小节“赋值”):
 

//: PassHandles.java
// Passing handles around
package c12;

public class PassHandles {
  static void f(PassHandles h) {
    System.out.println("h inside f(): " + h);
  }
  public static void main(String[] args) {
    PassHandles p = new PassHandles();
    System.out.println("p inside main(): " + p);
    f(p);
  }
} ///:~

toString方法会在打印语句里自动调用,而PassHandles直接从Object继承,没有toString的重新定义。因此,这里会采用toString的Object版本,打印出对象的类,接着是那个对象所在的位置(不是句柄,而是对象的实际存储位置)。输出结果如下:
p inside main(): PassHandles@1653748
h inside f() : PassHandles@1653748
可以看到,无论p还是h引用的都是同一个对象。这比复制一个新的PassHandles对象有效多了,使我们能将一个参数发给一个方法。但这样做也带来了另一个重要的问题。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 方法
, tostring
, 句柄
, main
一个
perl 传递文件句柄、c 传递窗口句柄给dll、句柄无效、c 句柄、句柄是什么,以便于您获取更多的相关知识。

时间: 2024-11-02 15:13:41

传递句柄的相关文章

写了一个简单的NodeJS实现的进程间通信的例子

1. cluster介绍 大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU实现并行.随着nodejs的发展,让nodejs上生产环境,就必须是支持多进程多核处理!在V0.6.0版本,Nodejs内置了cluster的特性.自此,Nodejs终于可以作为一个独立的应用开发解决方案,映入大家眼帘了. cluster是一个nodejs内置的模块,用于nodejs多核处理.clu

【CURL (LIBCURL) 开发 之一】COCOS2DX之LIBCURL(CURL_EASY)的编程教程(帮助手册)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/curl-libcurl/878.html      注意:如果你的服务器是Java的,那么要注意数据之间的大端小端的处理:否则无法正常获取正确的数据! 本篇介绍使用libcurl编程的一般原则和一些基本方法.本文主要是介绍 c 语言的调用接口,同时也可能很好的适用于其他类 c 语言的接口. 跨平台的可移植代码 libcurl库背后的开发人员

[学习笔记]Thinking in Java (the 2nd edition) Study Note (3)

笔记 第9章 违例差错控制 Java的基本原理就是"形式错误的代码不会运行".<1>在Java中,对那些要调用方法的客户程序员,我们要通知他们可能从自己的方法里"掷"出违例.这是一种有礼貌的做法,只有它才能使客户程序员准确地知道要编写什么代码来捕获所有潜在的违例.当然,若你同时提供了源码,客户程序员甚至能全盘检查代码,找出相应的throw语句.但尽管如此,通常并不随同源码提供库.为解决这个问题,Java提供了一种特殊的语法格式(并强迫我们采用),以便礼貌

java clone学习总结

由于Java中的所有东西都是句柄,而且由于每个对象都是在内存堆中创建的--只有不再需要的时候,才会当作垃圾收集掉,所以对象的操作方式发生了变化,特别是在传递和返回对象的时候.举个例子来说,在C和C++中,如果想在一个方法里初始化一些存储空间,可能需要请求用户将那片存储区域的地址传递进入方法.否则就必须考虑由谁负责清除那片区域.因此,这些方法的接口和对它们的理解就显得要复杂一些.但在Java中,根本不必关心由谁负责清除,也不必关心在需要一个对象的时候它是否仍然存在.因为系统会为我们照料一切.我们的

按值传递

首先要解决术语的问题,最适合"按值传递"的看起来是自变量."按值传递"以及它的含义取决于如何理解程序的运行方式.最常见的意思是获得要传递的任何东西的一个本地副本,但这里真正的问题是如何看待自己准备传递的东西.对于"按值传递"的含义,目前存在两种存在明显区别的见解: (1) Java按值传递任何东西.若将基本数据类型传递进入一个方法,会明确得到基本数据类型的一个副本.但若将一个句柄传递进入方法,得到的是句柄的副本.所以人们认为"一切&qu

制作本地副本

稍微总结一下:Java中的所有自变量或参数传递都是通过传递句柄进行的.也就是说,当我们传递"一个对象"时,实际传递的只是指向位于方法外部的那个对象的"一个句柄".所以一旦要对那个句柄进行任何修改,便相当于修改外部对象.此外: ■参数传递过程中会自动产生别名问题 ■不存在本地对象,只有本地句柄 ■句柄有自己的作用域,而对象没有 ■对象的"存在时间"在Java里不是个问题 ■没有语言上的支持(如常量)可防止对象被修改(以避免别名的副作用) 若只是从对

用C++写的CGI程序

经过前面的学习,大家应该能够根据例子用ANSI C为自己的服务器写出CGI程序.之所以选用ANSI C,是因为它几乎随处可见,是最流行的C语言标准.当然,现在的C++也非常流行了,特别是采用GNU C++编译器(g++)形式的那一些(注释④).可从网上许多地方免费下载g++,而且可选用几乎所有平台的版本(通常与Linux那样的操作系统配套提供,且已预先安装好).正如大家即将看到的那样,从CGI程序可获得面向对象程序设计的许多好处. ④:GNU的全称是"Gnu's Not Unix".这

略谈如何从工作线程中弹出对话框

工作线程,在一些技术文章被称为辅助线程,是相对于主线程而言的.在工作线程中使用界面需要一些技巧.我就曾在工程线程中弹出对话框中遇到过莫名奇妙的错误.下面就我的经验谈谈如何从工作线程中弹出对话框(暂时只讲方法,原理还没彻底弄清楚).   实际上在工作线程中直接弹出模式对话框中在debug模式下有时出错(这里的有时的意思是必然会出错,但是不是每次都出错),弹出模式对话框的代码如下:   DWORD WINAPI RecvThread(LPVOID lpParam)    // 工作线程函数 {   

MFC工作线程中获得视图类指针问题

今天写的代码很无语,原来稳稳妥妥的代码,在线程中却神乎其神的不管用了.我查了网上的资料,只收集到一位高手的留言: 通常来讲,在MFC中,跨线程是不能传递CWnd对象指针的.因为在每个线程中都有一个自己的内部map,该map记录了HWND和与之对应的CWnd对象.当一个CWnd对象被创建时,它的HWND和CWnd对象指针就会被记录到该线程中的map,但其他的线程的map没有记录. 当跨线程传递CWnd指针时,调用CWnd的某些函数时,这些函数会进行有效性检查,也就是检查map,因为map中没有相应