Java - Por que para pegar o relógio do sistema uso comando New? e Resolução da tela Get ?

Alguém pode me explicar detalhadamente como funciona as seguintes linhas e esses motivos da pergunta em questão?

//comando para mostrar Hora do label
Date relogio = new Date();
lblHora.setText(relogio.toString());

    //ocmando para aparecer a largura e altura da tela
        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension d = tk.getScreenSize();
        
        lblDimensao.setText(d.width+ "  " +d.height);
        
        
     //comando para mostrar idioma do sistema

     Locale idioma = Locale.getDefault();
     lblIdioma.setText(idioma.getDisplayCountry()+ " " +idioma.getDisplayLanguage()+ " " +idioma.getLanguage());

obs: Eu fiz e está rodando normalmente, entretanto não sei por que usei New pro Date (relogio) e Get para Locale (idioma). Essa diferença está me complicando, estou iniciando ainda, primeiras aulas.

obrigado!

getDefault() do Locale é static.
new Date() você inicializa um objeto da classe Date. (Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond.)

https://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getDefault()
https://docs.oracle.com/javase/7/docs/api/java/util/Date.html

1 curtida

É que Date não representa o relógio do sistema.

Segundo a documentação, ele representa um instante especifico no tempo. Veja mais no link abaixo.

https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

Quando vc usa o constructor sem passar nenhum argumento, o que ele faz é criar um novo Date representando o instante especifico em que esse constructor foi invocado.


Já o Locale representa, segundo a documentação, isso:

A Locale object represents a specific geographical, political, or cultural region

Veja aqui: https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html

Sinceramente não consigo pensar num exemplo prático pro uso dele, mas é só porque eu não sei mesmo ^^

De qualquer forma, vc poderia criar um Locale representando qualquer país ou idioma.

Pra sua aplicação, faz sentido pegar estes dados baseados nas configurações atuais do seu “cliente”. Vc não sabe quais são essas configurações, mas a JVM sabe e lhe oferece o método getDefault() pra facilitar sua vida!

Mas tome cuidado! Pelo que entendi lendo a documentação, este método não retorna o Locale default do sistema. Ele retorna o locale default desta instancia da JVM.

Acredito que, baseado no código que mostrou, vc não terá problemas. Contudo, saiba que este “locale default” pode ser mudado com o método setDefault().

O setDefault() não muda o locale padrão do sistema inteiro, muda apenas o padrão da instancia atual da JVM.

Enfim, não sei até onde isso pode ser problemático no real world, mas é bom saber!

A Oracle tem um tutorial muito bom aqui sobre isso, mostrando exemplos de como esta classe pode afetar seu sistema. Segue o link abaixo:

https://docs.oracle.com/javase/tutorial/i18n/locale/index.html

1 curtida