Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以´;我从Java中的另一个类在方法中创建一个类对象吗?_Java_Class_Methods_Constructor - Fatal编程技术网

为什么可以´;我从Java中的另一个类在方法中创建一个类对象吗?

为什么可以´;我从Java中的另一个类在方法中创建一个类对象吗?,java,class,methods,constructor,Java,Class,Methods,Constructor,我在代码中尝试了一些东西,但没有成功(编译时的错误是“永远不会读取局部变量fundo”)。我做了一些改变,它成功了,但我想知道为什么它一开始就不起作用 我有一个名为Setor的类,在我的代码中,我试图从Vendedor类中的该类创建一个对象 这是我的第一个代码: class Vendedor{ void abreTeatro(int codigoCamarote, int capacidadeCamarote, int precoCamarote, int codigoFrente,

我在代码中尝试了一些东西,但没有成功(编译时的错误是“永远不会读取局部变量fundo”)。我做了一些改变,它成功了,但我想知道为什么它一开始就不起作用

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

这是我的第一个代码:

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);
  };
 }
我想知道我的第一次尝试有什么问题


另外,我可能用错了一些术语。对此我很抱歉,非常欢迎编辑

不同之处在于所填充的变量的声明位置

您的第一个示例所做的是创建局部变量。当方法完成时,它们将超出范围。没有什么是指他们了,他们最终得到垃圾收集


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

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

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

有一个称为“范围”的东西只是为了让您知道,有。@user3347814为了完整起见,请添加您的Setor类。欢迎使用new@user3347814,您所说的错误是“……它不起作用”。这还不足以让你得到好的答案。你需要能够解释你的意思。你期待什么,你得到了什么。我假设你犯了某种错误。可能是未定义的变量错误或类似的错误。你必须把错误贴在这里,这样我们就可以更好地了解你想要实现的目标。从这里开始,严格来说,第一个错误没有什么“错误”。您的对象实际上正在创建。。。问题是你没有对它们做任何事情(没有人能对它们做任何事情,因为你没有从任何地方引用它们,除了构造函数局部变量,一旦构造函数完成->你的对象未被引用->GC进入并销毁它们,这些变量就会超出范围)@Claudio:没错,这显然不是OP想要的。出于我的学习目的,你能告诉我构造函数在他的代码中的位置吗?@Kick:oops,没有构造函数,我只是在产生幻觉。谢谢你,修复了这个。哈,我分享了你的幻觉!我说的构造函数==方法