【问题标题】:Is it possible to link integers from a method to a class?是否可以将整数从方法链接到类?
【发布时间】:2013-12-07 00:07:48
【问题描述】:

出于好奇,我有一个简短的问题...如果我在一种方法中声明一个整数,例如:i = 1,我是否可以采用该i 并在我的主类中使用它的值(或其他方法)?以下代码可能有助于理解我在问什么……当然,根据答案,代码可能不正确。

public class main {
  public main() {
    int n = 1;
    System.out.print(n + i);
  }

  public number(){
    i = 1;
  }
}

【问题讨论】:

  • 如果你的i 是一个实例变量,那么是的,SOP 会起作用,否则,不会。
  • 取决于你想要什么以及你正在创建什么样的对象,你可以在你的类中声明字段并为其赋值,并在类的任何方法(非静态)中使用
  • 请阅读 visibility 并阅读 Joshua Bloch 在 Effective Java 中关于限制变量范围的章节

标签: java class methods integer declare


【解决方案1】:

首先,让我们从简单的开始。所有不是构造函数的方法都需要返回类型。换句话说,

 public void number(){
     i = 1;
 }

会更合适。

第二:main 方法传统上具有public static void main(String[] args) 的签名。

现在,谈谈您手头的问题。让我们考虑几个案例。我将打破一些常见的编码约定来表达我的观点。

案例 1

 public void number(){
    i = 1;
 }

就目前的代码而言,您将遇到编译时错误,因为从未声明过i。你可以通过在课堂上的某个地方声明这个来解决这个问题。要访问这个变量,您需要一个Main 类型的对象,这将使您的类看起来像这样:

public class Main {
    int i;

    public static void main(String[] args) {
        Main myMain = new Main();
        myMain.number();
        System.out.print(myMain.i);
    }

    public void number(){
        i = 1;
    }
}

案例 2

假设您不想将i 设为类变量。您只希望它是函数返回的值。您的代码将如下所示:

public class Main {

    public static void main(String[] args) {
        Main myMain = new Main();
        System.out.print(myMain.number());
    }

    public int number(){  //the int here means we are returning an int
        i = 1;
        return i;
    }
}

案例 3

前面的两种情况都会打印出1 作为它们的输出。但是让我们尝试一些不同的东西。

public class Main {
    int i = 0;

    public static void main(String[] args) {
        Main myMain = new Main();
        myMain.number();
        System.out.print(myMain.i);
    }

    public void number(){
        int i = 1;
    }
}

在这种情况下,您认为输出会是什么?不是1!在这种情况下,我们的输出是0。为什么?

number()中的语句int i = 1;,它在number()的范围内创建了一个新变量,也称为i。只要number() 完成,该变量就会被清除。在public class Main 下声明的原始i 没有改变。因此,当我们打印出myMain.i 时,它的值为0。

案例 4

还有一个案例,只是为了好玩:

public class Main {
    int i = 0;

    public static void main(String[] args) {
        Main myMain = new Main();
        System.out.print(myMain.number());
        System.out.print(myMain.i);
    }

    public int number(){
        int i = 1;
        return i;
    }
}

这个输出会是什么?这是10。你为什么问?因为number() 返回的inumber() 范围内的i,其值为1。但是myMaini 与案例3 一样保持不变。

【讨论】:

    【解决方案2】:

    您可以使用类范围字段将变量存储在类对象中,或者您可以从一种方法返回它或将其作为参数传递给另一种方法。请注意,您需要以正确的顺序调用您的方法,这可能不是最好的设计。

    public class main {
    
      int n;
      int i;
      public main() {
        n = 1;
        System.out.print(n + i);
      }
    
      public number(){
        i = 1;
      }
    }
    

    【讨论】:

      【解决方案3】:
      void method(){
         int i = 0; //has only method scope and cannot be used outside it
      }
      
      void method1(){
         i = 1; //cannot do this
      }
      

      这是因为i 的范围仅限于声明它的方法。

      【讨论】:

        【解决方案4】:

        是的,创建一个类成员:

        public class Main
        {
          private int i;
        
          public main() {
            int n = 1;
            System.out.print(n + i);
            number();
            System.out.print(n + i);
          }
        
          public number(){
            i = 1;
          }
        }
        

        【讨论】:

          【解决方案5】:

          不,你不能!除非你把它变成一个实例变量!

          或者实际上将它作为参数发送给函数!

          【讨论】:

            猜你喜欢
            • 2020-05-16
            • 1970-01-01
            • 2012-09-25
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 2020-08-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多