前言:
目前看官们对“java对象初始化赋值”可能比较注重,兄弟们都需要了解一些“java对象初始化赋值”的相关资讯。那么小编也在网络上搜集了一些对于“java对象初始化赋值””的相关知识,希望各位老铁们能喜欢,同学们快快来了解一下吧!java中的final变量通常只能在初始化载入的时候赋值,一旦被赋值就无法再修改。但我在看java.lang.System源码的时候发现,它的PrintWriter变量out居然是final的,并且是被初始化为null的。我们平时使用的System.out.println()居然还有这样的实现,让人有点摸不着头脑,后经过进一步追踪,发现有个native方法setOut0能够对out进行重新赋值。于是大悟,原来是通过c++语法来避开java final无法修改的问题呀。于是仿System做了一个自己的实现。如下:
package zhc.others;
import java.io.BufferedOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class MySystem {
public static native void setOut(PrintStream out);
public static final PrintStream out2 = null;
public static final PrintStream out = newPrintStream();
private static PrintStream newPrintStream() {
PrintStream ps = null;
FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
try {
ps = new PrintStream(new BufferedOutputStream(fos, 128), true, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return ps;
}
private MySystem() {}
public static void main(String[] args) {
MySystem.out.println("Hello,World! -- print by MySystem.out");
String tPath = MySystem.class.getResource("")+"zhc_others_MySystem.dll";
System.load(tPath.substring(6).replace("/", "\\").replace("%20", " "));
setOut(newPrintStream());
if (null!=out2) {
out2.println("Hello,World2! -- print by out2(final PrintStream out2 = null)");
}
}
}
标签: #java对象初始化赋值