呵呵~提这个问题都有点不好意思了!
现在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点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问题的立即给分!
觉得java的内存释放是自动的,不需要你自己写代码
而c++如果你自己开辟了内存的话,是要自己写析构函数释放的
另外,java中类的定义是与c++差不多的,
在继承方面有些不同,java不支持多继承
1,函数调用应该是与c++一样的,不用想太多类
2,不可以的,因为method1()与method2()是函数
在其中定义的变量,调用方法后会自动消失的;楼主如果
想调用的话,可以定义一个类,使其中的参数为公有
这样初始化对象后就可以调用了
觉得java的内存释放是自动的,不需要你自己写代码
而c++如果你自己开辟了内存的话,是要自己写析构函数释放的
另外,java中类的定义是与c++差不多的,
在继承方面有些不同,java不支持多继承
---------------------------------------------------
说的对,由于是自动释放的,所以你基本上可以不管内存释放的问题,在没有指针指向某个对象后,到了系统回收内存时就会把内存释放掉。
对于2题,我想是个作用域的问题,java的作用域概念(针对OO)我还没有发现和C++不同的地方,因此你在方法中定义的map是不能在方法外使用的。其实任何{}之间的内容就是一个作用域。
楼主的问题二,我理解的不是很清楚,不过我也觉得大概是作用域的问题!
java一切都是对象,很多语言可传递的是变量指针,改变指针的内容,另外函数就可用这个指针的内容。而Java的原理也是一样,传对象给另一个函数,可改变对象内的内容,返回即可用。只是String看起来比较特殊,因为String没有任何方法可改变String内的内容,任何改变都会产生新的对象。如果你定义一个类,封装了String在内部,则不会产生这样的问题。2
这是对象作用域的问题,Java没有静态类,单类可以有静态方法和静态变量,只要设定方法和变量的作用域, Java也可定义public的变量给全局使用。不过,偶觉得那是面向过程设计的缺点,不是过程就是变量。面向对象设计讲究封装,按功能封装,按对象属性封装等等。如果用Java大量使用静态方法和静态变量, 那确实不如使用C++来的方便快捷.楼主有空可看看thing in 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,必须指定一个对象
}
}
但事实上,对机器而言,并没有所谓的全局变量,也没有所谓的对象,结构。这些都是编译器,或者虚拟机创造出来的。