Re: [問題] static與non static

看板java作者 (Zzz...)時間11年前 (2014/07/05 04:01), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《e002311 (鴻)》之銘言: : 卻無法過關 資訊不足,何謂「過關」? : 推 LPH66:static 的只是 out, out 本身參照到了一個物件, println 是 07/04 21:41 : → LPH66:對那個物件作用的 07/04 21:41 : 我看java附的原始碼 System.java : public final static printStream out = null; : 看不出這裡有參照到物件阿 你對該單行程式碼的解讀是正確的,但,請繼續往下追, 就能了解來 龍去脈 54 public final class System { 55 56 /* register the natives via the static initializer. 57 * 58 * VM will invoke the initializeSystemClass method to complete 59 * the initialization for this class separated from clinit. 60 * Note that to use properties set by the VM, see the constraints 61 * described in the initializeSystemClass method. 62 */ 63 private static native void registerNatives(); 64 static { 65 registerNatives(); 66 } 1104 private static void initializeSystemClass() { 1105 1106 // VM might invoke JNU_NewStringPlatform() to set those encoding 1107 // sensitive properties (user.home, user.name, boot.class.path, etc.) 1108 // during "props" initialization, in which it may need access, via 1109 // System.getProperty(), to the related system encoding property that 1110 // have been initialized (put into "props") at early stage of the 1111 // initialization. So make sure the "props" is available at the 1112 // very beginning of the initialization and all system properties to 1113 // be put into it directly. 1114 props = new Properties(); 1115 initProperties(props); // initialized by the VM 1116 1117 // There are certain system configurations that may be controlled by 1118 // VM options such as the maximum amount of direct memory and 1119 // Integer cache size used to support the object identity semantics 1120 // of autoboxing. Typically, the library will obtain these values 1121 // from the properties set by the VM. If the properties are for 1122 // internal implementation use only, these properties should be 1123 // removed from the system properties. 1124 // 1125 // See java.lang.Integer.IntegerCache and the 1126 // sun.misc.VM.saveAndRemoveProperties method for example. 1127 // 1128 // Save a private copy of the system properties object that 1129 // can only be accessed by the internal implementation. Remove 1130 // certain system properties that are not intended for public access. 1131 sun.misc.VM.saveAndRemoveProperties(props); 1132 1133 1134 lineSeparator = props.getProperty("line.separator"); 1135 sun.misc.Version.init(); 1136 1137 FileInputStream fdIn = new FileInputStream(FileDescriptor.in); 1138 FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); 1139 FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); 1140 setIn0(new BufferedInputStream(fdIn)); 1141 setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); 125 /** 126 * Reassigns the "standard" input stream. 127 * 128 * <p>First, if there is a security manager, its <code>checkPermission</code> 129 * method is called with a <code>RuntimePermission("setIO")</code> permission 130 * to see if it's ok to reassign the "standard" input stream. 131 * <p> 132 * 133 * @param in the new standard input stream. 134 * 135 * @throws SecurityException 136 * if a security manager exists and its 137 * <code>checkPermission</code> method doesn't allow 138 * reassigning of the standard input stream. 139 * 140 * @see SecurityManager#checkPermission 141 * @see java.lang.RuntimePermission 142 * 143 * @since JDK1.1 144 */ 145 public static void setIn(InputStream in) { 146 checkIO(); 147 setIn0(in); 148 } 252 private static native void setIn0(InputStream in); ↖ MAGIC! XD : 老師還特地拿這個System.out.println() : 出來說 : static 呼叫了non-static方法 有至少兩種可能性 1. 你的老師或許不了解 static 的特性 2. 你或許不了解你的老師想表達的意思 * 「從一個 static reference 使用 該 static reference 所指向的 instance 的 non-static member 」 這件事是符合 java lang. spec. 的 * 「在 static context 裡直接使用 non-static member」 有如「除以零」一樣,是無意義的 有興趣可以詳讀關於 static 正式的定義 http://docs.oracle.com/javase/specs/jls/se8/html/index.html -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.4.112.174 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1404504107.A.EF1.html

07/05 15:49, , 1F
感恩
07/05 15:49, 1F

07/06 01:23, , 2F
2的機會應該比較大吧! static 算是很基本的觀念...
07/06 01:23, 2F
文章代碼(AID): #1JjmWhxn (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1JjmWhxn (java)