关于Java获取子方法的新建实例引用的心得
来源:互联网 发布:手机怎么改淘宝中差评 编辑:程序博客网 时间:2024/05/19 13:59
Java有8种基本类型char、byte、short、int、long、float、double、boolean。Java中的引用类型,是指除基本类型之外的所有类型(包括String),所有的类型在内存中都需要分配一定的存储空间(形参在使用的时候也会分配存储空间,正常情况下,方法调用完成之后,这块存储空间自动消失)。 基本的变量类型只有一块存储空间(分配在stack), 而引用类型则有两块存储空间(一块在stack,一块在heap)。下面分两种情况: 一、方法实参形参的值传递是指形参和实参的值是相同的,但是他们在stack上的位置应该是不一样的,所以在方法中修改形参并不会影响到实参。 二、方法实参与形参的引用传递则稍有不同,他们的stack也是不一样的,但它们指向的内存heap数据块是一样的,这就直接导致了修改heap数据后,实参所指向的heap数据也被修改乐(类似C语言中的指针)。 那么问题来了,如果希望在子方法中new出一个实例,并将该实例返回给上层调用,应该怎么做? 首先,是mainstring1直接传给子方法,从输出可以看出其代表String内容的地址并没有真正传出。 其次,是方法2,可以看出使用return,确实可以将内部temp的处于stack内存的值传给外部,外部的mainstring2就指向了heap的数据。 最后,方法3是需要你在外部定义一个对象的数组,比如本例,是希望最后得到子方法中新建的String数据,可以通过在外部建立一个数组,通过它的元素来接纳,这样在子方法运行完后,虚拟机发现形参的作用范围已经结束,按理说该String会被回收,但此时不止形参使用到数据块,外部mainstring3数组中的元素也能索引到该String,所以它不会被delete,并且可以传导出来。 看如下代码:
package test;public class st { public static void main(String[] args) { // TODO Auto-generated method stub String mainstring1 = null; reftest1(mainstring1); System.out.println("mainstring1:" + mainstring1); String mainstring2 = null; mainstring2 = reftest2(); System.out.println("mainstring2:" + mainstring2); String mainstring3[] = new String[1]; System.out.println("mainstring3[0]:" + mainstring3[0]); reftest3(mainstring3); System.out.println("mainstring3[0]:" + mainstring3[0]); } public static void reftest1(String temp) { System.out.println("reftest1 before new:" + temp); temp = new String("Just_Do_IT_Ye at CSDN"); System.out.println("reftest1 after new:" + temp); } public static String reftest2() { String temp = new String("Just_Do_IT_Ye at CSDN"); System.out.println("reftest2 after new:" + temp); return temp; } public static void reftest3(String temp[]) { temp[0] = new String("Just_Do_IT_Ye at CSDN"); System.out.println("reftest3 after new:" + temp[0]); }}
输出如下: reftest1 before new:null reftest1 after new:Just_Do_IT_Ye at CSDN mainstring1:null reftest2 after new:Just_Do_IT_Ye at CSDN mainstring2:Just_Do_IT_Ye at CSDN mainstring3[0]:null reftest3 after new:Just_Do_IT_Ye at CSDN mainstring3[0]:Just_Do_IT_Ye at CSDN 综上,可以知道主要有两种方法来获取子方法的新建实例引用,分别是通过方法的返回和建立实参数组。
0 0
- 关于Java获取子方法的新建实例引用的心得
- 关于java中父类引用子类实例化的问题
- 子View获取父容器的引用
- 关于Java的引用
- 关于Java的引用
- 关于Java的引用
- 关于java的引用
- 获取控件引用的方法.
- 关于document.子对象名的引用
- 关于java hashmap的心得
- 关于Java 中几种不同的引用jar文件的方法
- [Java]File文件的新建、删除、修改、搜索的实例方法
- android关于获取隐藏类的心得
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- 关于超前引用的方法
- thematic 子主题引用JS的方法
- 新建oracle的实例
- 服务器采用JSON格式返回数据给安卓客户端
- Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition
- Libevent参考手册:前言 (二)
- 查找(二)动态表查找
- Linux常用命令
- 关于Java获取子方法的新建实例引用的心得
- 悟空学Linux专栏----第11篇
- Spark实践之join优化
- Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
- myeclipse 配置 weblogic10
- Android JNI 使用的数据结构JNINativeMethod详解
- 按层Z型遍历二叉树(算法)
- NOR Flash与NAND Flash区别
- 悟空学Linux专栏----第12篇