是否有可能在java中的程序中随处可用对象?

时间:2013-05-20 19:02:06

标签: java object

如果我有两个物体,进出,是否可以使这些物体静止或在每个地方都可用?所以,无论我在某个程序中,我都可以输入

out.println("Hello!");

它的功能无需像往常一样传入和传入不同的对象?

happyCat(BufferedReader in, PrintStream out);

如果可能,请告诉我。

BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintStream out = new PrintStream(server.getOutputStream());

3 个答案:

答案 0 :(得分:1)

您可以创建Streams类并使用static:

class Streams {
   // I don't know where "server" come from
   public static BufferedReader in = ...
   public static PrintStream out = ...

}

然后使用:

 Streams.in and Streams.out

答案 1 :(得分:1)

您可以通过调用System.setIn()System.setOut()来更改Java环境的默认输入和输出流,请参阅javadoc for class System here。当任何代码段引用默认流时,它们将被“重定向”到您的实例。

System.setOut(myOutput);
System.setIn(myInput);
...
System.out.println("hello"); // This will print to your output stream
System.in.read();             // This will read from your input stream

答案 2 :(得分:0)

没有。在每个源文件中,您必须statically import inout

import static pkg.MyGlobals.in;
import static pkg.MyGlobals.out;

或者您必须符合

中的使用条件
pkg.MyGlobals.out.method(...)

无法定义隐式导入的java.lang这样的新包,并且没有隐式导入静态成员的类。

只有Object上定义的方法在任何地方都是不合格的,这只是因为它们在每个可以包含可以引用它们的代码的上下文中继承。


Section 6.5.6.1 Simple Expression Names解释了inout等简单名称与对象字段的匹配方式:

  

如果表达式名称由单个标识符组成,那么在标识符出现的位置必须只有一个声明表示局部变量,参数或字段可见(第6.4.1节)。否则,发生编译时错误。

从该起点开始的链接应该说服你没有隐藏的机制。