Le premier programme que nous utilisons pour apprendre Java est "hello world". Ce qui suit est une analyse des principes de Java HelloWorld à travers un exemple de code. Les amis intéressés peuvent apprendre ensemble
Le premier programme pour nous permettre d'apprendre Java est "hello world"
public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } }
À quoi ressemble le programme ci-dessus ? Comment afficher « hello world » à l'écran ? C'est ce qui devait initialement être expliqué, c'est-à-dire le principe de System.out.println("hello world").
Jetons d'abord un coup d'œil au processus de System.out.println. Examinons d'abord la définition de out dans System.java. Le code source est le suivant :
public final class System { ... public final static PrintStream out = null; ... }
À partir de là, nous constatons que
(01) out est < de System.java. 🎜>statique Variable.
(02) Et out est un objet PrintStreamIl existe de nombreuses méthodes surchargées println() dans PrintStream.java.
OK, nous savons que out est un objet PrintStream. Ensuite, voyez comment il est initialisé et comment il est lié à la sortie à l'écran ? Analysons-le étape par étape. Tout d'abord, examinons la méthode initializeSystemClass() de System.java. 1. Le code source de initializeSystemClass() est le suivant : Marquez la partie out en rougeprivate static void initializeSystemClass() { props = new Properties(); initProperties(props); // initialized by the VM sun.misc.VM.saveAndRemoveProperties(props); lineSeparator = props.getProperty("line.separator"); sun.misc.Version.init(); FileInputStream fdIn = new FileInputStream(FileDescriptor.in); FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); setIn(new BufferedInputStream(fdIn)); setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true)); loadLibrary("zip"); Terminator.setup(); sun.misc.VM.initializeOSEnvironment(); Thread current = Thread.currentThread(); current.getThreadGroup().add(current); setJavaLangAccess(); sun.misc.VM.booted(); }
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
public final class FileDescriptor { private int fd; public static final FileDescriptor out = new FileDescriptor(1); private FileDescriptor(int fd) { this.fd = fd; useCount = new AtomicInteger(); } ... }
interface d'impression pratique pour le "flux de sortie tamponné", telle que print(), println(), printf(); et rapidement.
(05) Exécutez setOut0(ps);Ensuite, analysez setOut0(ps) à l'étape 5. Vérifiez la déclaration de setOut0() dans System.java, comme suit :private static native void setOut0(PrintStream out);
JNIEXPORT void JNICALL Java_java_lang_System_setOut(JNIEnv *env, jclass cla, jobject stream) { jfieldID fid = (*env)->GetStaticFieldID(env,cla,"out","Ljava/io/PrintStream;"); if (fid == 0) return; (*env)->SetStaticObjectField(env,cla,fid,stream); }
, faisons-en une simple analyse .
(01) Nom de la fonctionJNIEXPORT void JNICALL Java_java_lang_System_setOut0(JNIEnv *env, jclass cla, jobject stream)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!