【问题标题】:Why can´t I create a class object within a method from a different class in Java?为什么我不能在 Java 中不同类的方法中创建类对象?
【发布时间】:2014-07-16 19:22:42
【问题描述】:

我在我的代码中尝试了一些东西,但它没有工作(编译时的错误是“本地变量 fundo 永远不会被读取”)。我进行了一些更改并且它起作用了,但我想知道为什么它一开始就不起作用。

我有一个名为 Setor 的类,在我的代码中,我试图在 Vendor 类中从该类创建一个对象

这是我的第一个代码:

class Vendedor{

  void abreTeatro(int codigoCamarote, int capacidadeCamarote, int precoCamarote, int codigoFrente, 
              int capacidadeFrente, int precoFrente, int codigoMeio, int capacidadeMeio, int precoMeio, int codigoFundo,
              int capacidadeFundo, int precoFundo)
  {
     Setor camarote = new Setor(codigoCamarote, capacidadeCamarote, precoCamarote);
     Setor frente = new Setor(codigoFrente, capacidadeFrente, precoFrente);
     Setor meio = new Setor(codigoMeio, capacidadeMeio, precoMeio);
     Setor fundo = new Setor(codigoFundo, capacidadeFundo, precoFundo);  

  };
 }

如果我在方法之外创建对象,则如下所示:

class Vendedor{

  Setor camarote;
  Setor frente;
  Setor meio;
  Setor fundo;


  void abreTeatro(int codigoCamarote, int capacidadeCamarote, int precoCamarote, int codigoFrente, 
              int capacidadeFrente, int precoFrente, int codigoMeio, int capacidadeMeio, int precoMeio, int codigoFundo,
              int capacidadeFundo, int precoFundo)
  {
     camarote = new Setor(codigoCamarote, capacidadeCamarote, precoCamarote);
     frente = new Setor(codigoFrente, capacidadeFrente, precoFrente);
     meio = new Setor(codigoMeio, capacidadeMeio, precoMeio);
     fundo = new Setor(codigoFundo, capacidadeFundo, precoFundo);  

  };
 }

这里是 Setor 类:

public class Setor
{

  int _codigo;
  int _capacidade;
  int _preco;

  public Setor (int codigo, int capacidade, int preco){
  _codigo = codigo;
  _capacidade = capacidade;
  _preco = preco;

  System.out.println(_codigo + " " + _capacidade + " " + _preco);
  };
 }

我想知道我的第一次尝试有什么问题。

另外,我可能使用了一些错误的术语。我很抱歉,非常欢迎编辑!

【问题讨论】:

  • 有一件事叫做“范围”
  • 只是告诉你,有StackOverflow in Portuguese
  • @user3347814 为了完整起见,请添加您的 Setor 类?
  • 欢迎新的@user3347814 ,您对错误所说的只是“......它不起作用。”。这不足以让你得到好的答案。你需要能够解释你的意思。你期待什么,你得到了什么。我假设你有某种错误。可能是未定义的变量错误或类似的东西。您必须在此处发布错误,以便我们更好地了解您要实现的目标。

标签: java class methods constructor


【解决方案1】:

是变量的作用域。在第一个示例中,您创建了仅在该方法中可见的局部变量。而在第二个示例中,您创建了对类中所有方法可见的实例变量。

局部变量 - 在堆栈中创建并在方法退出后消失。 实例变量 - 在堆中创建,直到不再引用它为止

【讨论】:

    【解决方案2】:

    不同之处在于您要填充的变量的声明位置。

    您的第一个示例正在做的是创建局部变量。当方法完成时,它们会超出范围。不再有任何东西涉及它们,它们最终会被垃圾收集。

    在第二个示例中,您正在设置实例变量(其中声明位于类名后面的大括号内,而不是在方法或构造函数定义内),因此对象在方法调用完成后仍然存在。

    【讨论】:

    • 另外,严格来说,第一个没有任何“错误”。您的对象实际上正在被创建......问题是您没有对它们做任何事情(并且没有人可以对它们做任何事情,因为您没有从任何地方引用它们,而是构造函数局部变量,一旦构造函数完成 -> 你的对象未被引用 -> GC 进入并销毁它们)
    • @Claudio:没错,只是显然没有做 OP 想要的。
    • 为了我的学习目的,请告诉我他的代码中的构造函数在哪里?
    • @Kick:哎呀,没有构造函数,我产生了幻觉。谢谢,解决了这个问题。
    • 哈,我分享了你的幻觉!我在哪里说构造函数 == 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多