Pergunta

Isso é estático println funcionar em out aula de System espaço para nome?

namespace System {
  class out {
    static println ...
  }

Como posso interpretar esse nome?E onde no JRE essa função é definida?Em java.lang.System/java.lang.Object?

Foi útil?

Solução

Na verdade não out é um membro estático no System classe (não como em .Net), sendo uma instância de PrintStream. E println é um método normal (sobrecarregado) do PrintStream classe.

Ver http://download.oracle.com/javase/6/docs/api/java/lang/system.html#out.

Na verdade, se out/err/in eram aulas, eles seriam nomeados com caráter capital (Out/Err/In) devido ao convenção de nomes (ignorando a gramática).

Outras dicas

System é uma aula, que tem um campo estático público out. Então é mais como

class System 
{
    public static PrintStream out;
}

class PrintStream
{
    public void println ...
}

Esta é uma ligeira simplificação excessiva, pois o PrintStream A classe está na verdade no java.io Pacote, mas é bom o suficiente para mostrar o relacionamento das coisas.

Verifique o seguinte link:

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/system.html

Você vai ver claramente que:

System é um classe no java.lang pacote.

out é um membro estático do System classe, e é uma instância de java.io.PrintStream.

println é um método do java.io.PrintStream. Este método está sobrecarregado para imprimir a mensagem para saída de destino, que normalmente é um console ou arquivo.

System.out.println ()

Entendimento de alto nível

Para entender isso, precisamos lembrar poucos conceitos básicos de Java:

  • DOT (.) Operador em Java: em Java. (Operador DOT) é usado apenas para chamar métodos ou variáveis. Portanto, podemos dizer que é um método ou variável.
  • Métodos em Java: Sabemos que os métodos sempre têm parênteses '()' após o nome do método, portanto, não pode ser um método em Java. Então, é uma variável e println () é um método.
  • Nome da classe em Java: o nome da classe deve começar com a letra maiúscula idealmente em Java, Então o sistema é uma classe.

Agora, com o conhecimento básico de Java, sabemos:

  • Sistema é uma classe
  • fora é uma variável
  • println () é um método

Vamos obter mais detalhes:

variável fora: estático ou instância?

  • Chamado usando o nome da classe, por isso sabemos sua variável estática da classe do sistema.

  • mas é um método de método println () para 'Out' é um objeto do tipo de referência PrintStream.

A classe do sistema pertence ao pacote java.lang

class System {
  public static final PrintStream out;
  //...
}

A classe Prinstream pertence ao pacote java.io

class PrintStream{
public void println();
//...
}

println e print são os dois métodos sobrecarregados que pertencem ao PrintStream classe.

Para acessá -los, precisamos de uma instância desta classe.

UMA propriedade estática chamado out do tipo PrintStream é criado no System classe.

Portanto, para acessar os métodos acima, usamos as seguintes declarações:

System.out.println("foo");
System.out.print("foo");
System.out.println("Hello World");
  1. System: É o nome da classe padrão que contém objetos que encapsula o padrão E/S. dispositivos do seu sistema.

Está contido no pacote java.lang. Desde java.lang O pacote é importado em todos os programas Java por padrão, portanto java.lang pacote é o único pacote na API Java que não requer uma declaração de importação.

  1. out:O objeto out representa o fluxo de saída (por exemplo, janela de comando) e é o membro estático de dados da classeSystem.

Então observe aqui System.out (System -Classe & out- Objeto estático, ou seja, por que é simplesmente referido pelo ClassName e não precisamos criar nenhum objeto).

  1. println:o println() é método do out objeto que leva a string de texto como um argumento e o exibe para a saída padrão, isto na tela do monitor.

Observação
System -Classe
out -Objeto Estático
println() -método
Lembre -se de uma função (na função java é chamada método) sempre tem o formato função()

System é uma aula em java.lang pacote

out é um static objeto de PrintStream classe em java.io pacote

println() é um método no PrintStream classe

System é uma classe de java.lang pacote, out é um objeto de PrintStream classe e também static membro de dados de System classe, print() e println() é um método de instância de PrintStream classe. é fornecer saída suave no console.

É bastante simples entender a pergunta, mas para responder, precisamos aprofundar o código nativo do Java.

  • System é aula estática e não pode ser instanciada
  • out é uma variável de referência definida em System
  • println() é o método usado para imprimir na saída padrão.

UMA explicação breve e boa é sempre bem -vindo sobre isso, pois podemos aprender muito com essa única linha de declaração!

Porque fora está sendo chamado com o System Nome da classe em si, não uma instância de uma classe (um objeto), então out deve ser uma variável estática pertencente à classe System. out deve ser uma instância de uma classe, porque está invocando o método println().

// the System class belongs to java.lang package
class System {
    public static final PrintStream out;
}
class PrintStream {
    public void println();
}

System é uma aula em java.lang package. E out é um PrintStream objeto. Boa explicação @ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html

System.out.println();

System é a classe

out é uma variável no System aula e é um static e o tipo de variável é PrintStream.

Aqui está o out variável em System aula:

public final static PrintStream out = null;

Você pode ver a implementação de System aqui.

println() é um método sobrecarregado em PrintStream aula.

PrintStream inclui três métodos de impressão sobrecarregados, são eles:

  1. print()
  2. println()
  3. printf()

Você pode ver implementação de PrintStream aqui.

Você não pode instanciar System classe e é classe filha de Object e a Object é o pai (superclasse) de todas as classes, incluindo as classes que você definiu.

Aqui está o que a documentação do oráculo diz:

public final class System extends Object

O System class contém vários campos e métodos de classe úteis.Não pode ser instanciado.

Entre as facilidades oferecidas pelo System Classe são fluxos de entrada padrão, saída padrão e saída de erro;acesso a propriedades definidas externamente e variáveis ​​de ambiente;um meio de carregar arquivos e bibliotecas;e um método de utilidade para copiar rapidamente uma parte de uma matriz.

Desde:JDK1.0

Se você não sabe o que significa instanciar, leia esta pergunta.É uma questão de C#, mas o conceito é o mesmo.

Também, Qual é a diferença entre uma instância e um objeto?

Se você não sabe o que significa sobrecarga leia esta pergunta.

System é uma aula em java.lang pacote.

out é o membro estático de dados em System Variável de classe e referência de PrintStream classe.

Println() é um método normal (sobrecarregado) de PrintStream classe.

Do javadoc sobre System, aqui está o que o médico diz:

public final class System
extends Object

The System class contains several useful class fields and methods. It cannot be instantiated.
Among the facilities provided by the System class are standard input, standard output, and error output streams; access to externally defined properties and environment variables; a means of loading files and libraries; and a utility method for quickly copying a portion of an array.

Since:
JDK1.0

Em relação a System.out

public static final PrintStream out

The "standard" output stream class Prinstream  belongs to java.io package. This stream is already open and ready to accept output data. 
When the JVM is initialized, the method initializeSystemClass() is called that does exactly what it’s name says – it initializes the System class and sets the out variable. The initializeSystemClass() method actually calls another method to set the out variable – this method is called setOut().
Typically this stream corresponds to display output or another output destination specified by the host environment or user.

Em relação a println ();

class PrintStream{
public void println();
}

Para aplicativos Java independentes simples, uma maneira típica de escrever uma linha de dados de saída é:

System.out.println(data);

System - classe que é final na natureza. public final class System{}. Pertence a java.lang pacote

out - static variável de referência do tipo PrintStream

println() - não static método em PrintStream classe.PrintStream pertence a java.io pacote.

Para entender melhor, você pode visitar: Como o System.out.println () funciona em java

Sistema é a classe Java.

Fora é a instância e também o membro estático do PrintStream.

println é o método do PrintStream.

System.out.println ("...") no código Java é traduzido para a JVM. Olhar para a JVM me deu melhor entendimento do que está acontecendo atrás do capô.

Do livro Programação forma a máquina virtual java. Este código é copiado de https://github.com/ymasory/programming-for-the-jvm/blob/master/examples/helloworld.j.

Este é o código -fonte da JVM.

.class public HelloWorld
.super java/lang/Object

.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 1
  getstatic java/lang/System/out Ljava/io/PrintStream;
  ldc "Hello, world"
  invokevirtual java/io/PrintStream/println
    (Ljava/lang/String;)V
  return

.end method
.end class

Como "a JVM não permite acesso ao nível de byte à memória" o out objeto no tipo Ljava/io/PrintSteram; é armazenado em uma pilha com getstatic Comando JVM. Então o argumento é empurrado na pilha antes chamado de método println do java/io/PrintStream classe de uma instância nomeada out. O parâmetro do método é (ljava/lang/String;) e o tipo de saída é nulo (v).

System: é classe predefinida de java.lang pacote.

out: é um static membro de printStream classe e sua conexão com o console.

Println: é um método de printstream classe e não é um static.

System.out.println

System é uma aula no java.lang pacote.

out é um static membro de dados do System classe e referências uma variável do PrintStream classe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top