Qual é o significado de System.out.println em Java?
-
25-09-2019 - |
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
?
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");
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.
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).
println
:oprintln()
é método doout
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 instanciadaout
é uma variável de referência definida emSystem
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:
print()
println()
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.