Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 为什么我们要用“new”操作符创建一个对象,然后将其作为参数传递到构造函数中?_Java_Object_Methods_Return_New Operator - Fatal编程技术网

Java 为什么我们要用“new”操作符创建一个对象,然后将其作为参数传递到构造函数中?

Java 为什么我们要用“new”操作符创建一个对象,然后将其作为参数传递到构造函数中?,java,object,methods,return,new-operator,Java,Object,Methods,Return,New Operator,我是java的初学者。我发现了这个例子,不明白如何传递一个新的操作符,在构造函数的参数内创建一个对象。此外,它是嵌套的,括号中还有另一个语句作为参数 例如:在新的“Bufferedreader”中,我们传递一个新的“Inputstream”对象,然后再次调用构造函数中的一个方法:url.openStream。我已经见过很多次了,我很困惑为什么不创建一个新的对象引用来引用InputStream I=null;'然后将其传递给构造函数 另外,一般来说,从方法返回一个值并将其分配给ta类实例意味着什么

我是java的初学者。我发现了这个例子,不明白如何传递一个新的操作符,在构造函数的参数内创建一个对象。此外,它是嵌套的,括号中还有另一个语句作为参数


例如:在新的“Bufferedreader”中,我们传递一个新的“Inputstream”对象,然后再次调用构造函数中的一个方法:url.openStream。我已经见过很多次了,我很困惑为什么不创建一个新的对象引用来引用InputStream I=null;'然后将其传递给构造函数

另外,一般来说,从方法返回一个值并将其分配给ta类实例意味着什么?测试t=x.getname;',其中返回的值应为类类型?我不明白,请帮忙

StringBuilder json = new StringBuilder();
try {
    URL url = new URL(sMyUrl);
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    try {
        String str;
        while ((str = in.readLine()) != null) {
            json.append(str).append("\n");
        }
    } finally {
        in.close();
    }
} catch (Exception e) {
    throw new RuntimeException("Failed to read JSON from stream", e);
}

您可以在堆上创建一个对象,而不引用该对象,并且在使用该对象之后,它的垃圾将被收集

// creates an object on the heap with 'foo' as a pointer to it.
Foo foo = new Foo(); 

// then the above reference can be passed, in this case to the constructor of the 'Bar'
Bar bar = new Bar(foo);
没有任何东西可以阻止您在没有引用的情况下直接传递新对象

// in this case you are passign the object straight to the constructor of 'Bar'
Bar bar = new Bar(new Foo());
当您没有对对象进行任何设置或对象是无状态的时,上述示例很常见

除此之外,您将创建一个对正在玩的对象的引用,并在将其传递给之前对其进行设置

// creates an object on the heap with 'foo' as a pointer to it.
Foo foo = new Foo(); 

// set the state of the object
foo.setBehaviour("clumsy");
foo.isFooDirty(true);

// then the above reference can be passed, in this case to the constructor of the 'Bar' with its state.
Bar bar = new Bar(foo);

一个类实例创建表达式新的东西。。。是一个和其他任何表达式一样的表达式。它具有类型Something,因此可以在需要引用某物的任何地方使用:

两者之间没有太大区别

Something s = new Something();
Other o = new Other(s);

主要区别在于,您可以在第一种情况下使用变量s

如果您不需要在之后引用s,那么是否创建单独的变量实际上是一个偏好/样式/可读性的问题


我已经看过很多次了,为什么我们不创建一个新的对象引用到InputStream,然后将其传递给构造函数呢

因为没有进一步使用它来生成变量。这只是一次性使用,所以只需内联即可。只是为了保存一行代码。在性能方面没有差别

另外,一般来说,从方法返回一个值并将其分配给ta类实例意味着什么?测试t=x.getname;'

这意味着从类x返回类型测试实例的方法getname。并将返回的实例分配给t,以进一步使用它

例如:

public Test getname(){
  Test te = new Test();
  //do something or may not.
  return te;
}

因此,返回的te将被分配到上面的t

您需要了解语句/表达式的求值顺序

从给定的示例中,将按从右到左的顺序计算right-side after=,并在将new作为参数传递给另一个构造函数或方法之前对其进行计算,这意味着传递的不是新对象,而是在对传递的新对象进行计算之后创建的特定新对象。
您可能会找到一些有用的阅读资料,其中一个对象包装另一个对象,并添加其他行为

我们为什么不为InputStream创建一个新的对象引用,然后将其传递给构造函数呢?当我们不需要对对象的显式引用时,使用这种表示法。你可能想看看我的老问题:谢谢!但是,如何将语句传递给InputStream构造函数:new InputStreamReaderurl.openStream。我们可以将任何语句传递给构造函数吗?我们可以将任何语句传递给构造函数吗?不,您必须将适当类型的表达式传递给构造函数。表达式是有值的东西,比如null、1、5/6、hello、new something;语句通常以;结尾;。有些表达式可以通过添加;,而变成语句;,但是语句不能变成表达式。那么,这意味着我们可以“调用一个方法”,从任何其他方法调用中的表达式返回值,值将传递到该内联方法,然后传递到主方法?你能参考任何能进一步解释这一点的例子或文件吗。谢谢
Other o = new Other(new Something());
public Test getname(){
  Test te = new Test();
  //do something or may not.
  return te;
}
 BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));