呵呵~提这个问题都有点不好意思了!
现在1点40了,我脑袋是晕了,不清醒了!
JAVA和C++有个很大的区别就是内存是自己管理!我现在又以下几点不很清楚,大家给指教一下!
1 比如一个一个方法类似为 boolean test1(String str){……}
如果在C/C++中,我要通过在test2()函数中调用test1返回的结果,一般做法就是在test2中定义一个变量,把这个变量作为参数传递过test1,那么test1的返回值我就可以在test2中安全的使用了!
那么请问大家,在java中好象不能这么用吧??我得这么定义String test1(){……}这样在test2()中利用test1()的返回值!不知道是凑巧还是怎么的,我还真这么用没问题,但感觉不合理啊!应该说离开了test1(),返回的string变量虽然还在内存中,但是应该没refence指向了它?是不是这样的?大家给说说!2 我现在写了一个java静态类,除了含main()以为还有其它几个public method();问题是我有些晕了,这个变量的作用域是怎样的?比如我不用什么final,static,我在一个方法比如method1()中,定义了一个hashmap,然后把一些数据塞给了它,method1()的返回类型是boolean,那么请问我在method2()中可以利用这个method1()中定义的hashmap吗?method1()和method2()都是在main()主函数里面!
如果按照C的定义,我一般定义一个全局变量来传递,但在java里,怎么做是正确,通用的做法?多谢大家的指教,能较准确的回答上面2问题的立即给分!

解决方案 »

  1.   

    发现问题1描述的不准确,test1()的返回类型为boolean类型,我是想说利用test1()中处理过后的数据,拿到test2()中使用!
      

  2.   

    最近初初的看了些,java基础
    觉得java的内存释放是自动的,不需要你自己写代码
    而c++如果你自己开辟了内存的话,是要自己写析构函数释放的
    另外,java中类的定义是与c++差不多的,
    在继承方面有些不同,java不支持多继承
      

  3.   

    觉得,
    1,函数调用应该是与c++一样的,不用想太多类
    2,不可以的,因为method1()与method2()是函数
    在其中定义的变量,调用方法后会自动消失的;楼主如果
    想调用的话,可以定义一个类,使其中的参数为公有
    这样初始化对象后就可以调用了
      

  4.   

    最近初初的看了些,java基础
    觉得java的内存释放是自动的,不需要你自己写代码
    而c++如果你自己开辟了内存的话,是要自己写析构函数释放的
    另外,java中类的定义是与c++差不多的,
    在继承方面有些不同,java不支持多继承
    ---------------------------------------------------
    说的对,由于是自动释放的,所以你基本上可以不管内存释放的问题,在没有指针指向某个对象后,到了系统回收内存时就会把内存释放掉。
    对于2题,我想是个作用域的问题,java的作用域概念(针对OO)我还没有发现和C++不同的地方,因此你在方法中定义的map是不能在方法外使用的。其实任何{}之间的内容就是一个作用域。
      

  5.   

    感觉楼主根本没看JAVA,所有的解释在JAVA开始的基础里都有说明可以解答,楼主却在这里干着小猫追自己尾巴一样无聊而迷糊的事
      

  6.   

    搂主的问题一,我理解的是一个方法调用另一个方法,接受返回值的时候,返回值会不会被java垃圾回收器自动回收,是吗?如果是这个问题,我觉得搂主可以考虑一下线程问题,java的垃圾回收器程序属于一个精灵线程,精灵线程是只有在处理器空闲的时候才会处理执行的线程。那么当方法调用的时候,那个线程还没有结束,那么返回值应该还没有被回收才对吧!
    楼主的问题二,我理解的不是很清楚,不过我也觉得大概是作用域的问题!
      

  7.   

    楼主大概调入了一个陷阱,以C++的观点看Java,虽然这没有什么不对,但是会大大影响你学习Java的心情和态度的。1 
    java一切都是对象,很多语言可传递的是变量指针,改变指针的内容,另外函数就可用这个指针的内容。而Java的原理也是一样,传对象给另一个函数,可改变对象内的内容,返回即可用。只是String看起来比较特殊,因为String没有任何方法可改变String内的内容,任何改变都会产生新的对象。如果你定义一个类,封装了String在内部,则不会产生这样的问题。2 
    这是对象作用域的问题,Java没有静态类,单类可以有静态方法和静态变量,只要设定方法和变量的作用域, Java也可定义public的变量给全局使用。不过,偶觉得那是面向过程设计的缺点,不是过程就是变量。面向对象设计讲究封装,按功能封装,按对象属性封装等等。如果用Java大量使用静态方法和静态变量, 那确实不如使用C++来的方便快捷.楼主有空可看看thing in java这本书, 特别适合你, 能解决你现在的困惑.
      

  8.   

    但是为什么我觉得看thinking in java反而越看越迷糊,我已经比较能接受对象的说法,但是关于内存的概述和作用域的限制反而让我思维紊乱起来,既然是java自己管理内存,我为什么还要去理什么内存,还有作用域,我觉得关于它的规则不能死记硬背,却又无法找到更好去理解这种规则的途径。就好象对象是条主线,而自己却无法将其他旁支与其融会贯通,这样反而让知识零散起来。我实在不明白为什么那么多人都说thinking in java是好东西,大概是自己还无法了解其中的奥妙吧
      

  9.   

    2 我现在写了一个java静态类,除了含main()以为还有其它几个public method();问题是我有些晕了,这个变量的作用域是怎样的?比如我不用什么final,static,我在一个方法比如method1()中,定义了一个hashmap,然后把一些数据塞给了它,method1()的返回类型是boolean,那么请问我在method2()中可以利用这个method1()中定义的hashmap吗?method1()和method2()都是在main()主函数里面!method1中定义的hashmap只能在method1中使用,如果要在method2中用的话,就要把hashmap定义到method1方法外面,作为整个类的全局变量。
      

  10.   

    1.离开了test1(),返回的string变量虽然还在内存中,但是应该没refence指向了它?如果我没有理解错的话,楼主的意思是说:返回之后,虽然有对象在内存,但没有引用指向他,这个对象将被释放掉,事实上,他不会被释放掉.因为你使用了他,也就是引用了他.如果返回值不能使用,那java还有什么作用呢? 
    String test1(){return "test";}//这个函数将返回一个String 对象. 
    void test2(){String s=test1();System.out.println(s);}//可以这样使用test1()的返回值
    void test2(){System.out.println(test1());}//也可以直接这样使用test1()的返回值
    因为指针和引用等底层的概念混淆了你的思维,你知道,在java中,java自己管理内存,此引用非彼引用,"用引用传递参数"这样描述容易混淆有C++基础的人,如果只说"传递对象的实例"而不提引用,是否会思路清晰一些.2.如果你问的是一个语法问题的话:
    public class Test{
    int a=5;
    static  int b=10;
    ..main(..){
      System.out.println(Test.b);//使用static,就象使用全局变量
      Test t=new Test();
      System.out.println(t.a);//使用非static,必须指定一个对象
    }

    但事实上,对机器而言,并没有所谓的全局变量,也没有所谓的对象,结构。这些都是编译器,或者虚拟机创造出来的。