A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎健东 中级黑马   /  2012-8-25 18:48  /  1747 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黎健东 于 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. }
复制代码

4 个回复

倒序浏览
就是一条,如果变量定义在类中,那么对象没了,那么该变量也就没有了,也就是说对象随着类的消失而消失,同理可得,变量的释放,如果是定义在局部,只要是该功能执行完了,那么该变量就释放了
回复 使用道具 举报
本帖最后由 魏-玉-彪 于 2012-8-25 19:14 编辑

那就要优化代码了,一个类分成多个类,把常用的变量放一个类,不常用的变量放一个类。
面向对象就是为了提取共性,简化代码,不可能这么多变量放一个类中,不常用的变量也就是非共性,
放到类中不符合面向对象的编程思想。
回复 使用道具 举报
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:30
public class Test {

    public static void main(String[] args) {

让我思路又开放了一些,如果加一个全局变量控制一堆局部变量还是很划算的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马