黑马程序员技术交流社区

标题: 释放变量的问题 [打印本页]

作者: 黎健东    时间: 2012-8-25 18:48
标题: 释放变量的问题
本帖最后由 黎健东 于 2012-8-25 18:49 编辑

在一个类中,有些方法之间互相调用,此时会使用到一些变量,可以将这些变量定义为类的成员属性,就可以了。
但是,假设变量非常多,而且值非常大,而这些变量只是在个别方法间调用才出现一次,而这些个别方法,是可以由用户自选使用的,并不一定随着类的new而一定要使用到。
那么在多变量且变量值很大的情况下,将他们定义为一个类的成员属性时,new出来的对象带这么多属性,而且又不一定都用到,不是显得这个对象很大很臃肿吗。

遇到这种变量时应该怎么处理的好?下面只是举一个例子:

假设下面这个类A,有m1 m2.....等非常多个方法,其中,m2方法需要调用m3,同时修改m3中的变量的值,然后结合m2的自身的变量进行输出,而假设这些变量有上万非常多个,仅在m2 与 m3之间的调用出现。

用户也许m1或者m4等其他的简单功能,不一定使用m2功能。这个时候,也还是作为类的成员属性来写?能否通过使用添加方法或者类,使得当用户调用万m2之后,就自动释放这些变量,不再保留在内存中?
  1. public class Test {

  2.     public static void main(String[] args) {
  3.         A a  = new A();
  4.         a.m1();
  5.         //用户选择执行
  6.         a.m2();
  7.     }
  8. }

  9. class A{
  10.     int age;
  11.     String s1 = null;
  12.     String s2 = null;
  13.     public A() {
  14.         // TODO Auto-generated constructor stub
  15.     }
  16.     public void m1(){
  17.       age = 1;
  18.      System.out.println(age );
  19.     }
  20.    
  21.     //m2使用m3修改后的s1,s2的值
  22.     public void m2(){
  23.         m3();
  24.         System.out.println(s1);
  25.         System.out.println(s2);
  26.     }
  27.    
  28.     //m3对s1,s2进行修改
  29.     public void m3(){
  30.         
  31.         s1 = "1";
  32.         s2 = "1";
  33.         System.out.println(s1);
  34.     }
  35.     public void m4(){
  36.      System.out.println(age );
  37.     }
  38.    
  39. }
复制代码

作者: 全海波    时间: 2012-8-25 19:10
就是一条,如果变量定义在类中,那么对象没了,那么该变量也就没有了,也就是说对象随着类的消失而消失,同理可得,变量的释放,如果是定义在局部,只要是该功能执行完了,那么该变量就释放了
作者: 魏-玉-彪    时间: 2012-8-25 19:10
本帖最后由 魏-玉-彪 于 2012-8-25 19:14 编辑

那就要优化代码了,一个类分成多个类,把常用的变量放一个类,不常用的变量放一个类。
面向对象就是为了提取共性,简化代码,不可能这么多变量放一个类中,不常用的变量也就是非共性,
放到类中不符合面向对象的编程思想。

作者: 刘源    时间: 2012-8-25 19:30
public class Test {

    public static void main(String[] args) {
        A a  = new A();
        a.m1();
        //用户选择执行
        a.m3();
    }
}

class A{
    int age;
    public A() {
        // TODO Auto-generated constructor stub
    }
    public void m1(){
      age = 1;
     System.out.println(age );
    }
   
    //m2使用m3修改后的s1,s2的值
    public void m2(String s1 ,String s2){
        System.out.println(s1);
        System.out.println(s2);
    }
   
    //m3对s1,s2进行修改
    public void m3(){   
            String s1="1";
            String s2="1";
        System.out.println(s1);
        m2(s1,s2);
    }
    public void m4(){
     System.out.println(age );
    }
   
}
我将你代码改了。应该是达到你的要求了,希望对你有帮助
作者: 黎健东    时间: 2012-8-25 19:46
刘源 发表于 2012-8-25 19:30
public class Test {

    public static void main(String[] args) {

让我思路又开放了一些,如果加一个全局变量控制一堆局部变量还是很划算的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2