Diferença em chamada de metodos Java [RESOLVIDO]

Boa tarde a todos,

sou novo em Java e estou com uma duvida que me foi apresentada no livro que estou utilizando para estudar. Não sei se vai explicar mais para frente a diferença, mas gostaria de um auxilio.

No programa de teste, existe uma chamada para a classe Scanner, que é importada e tudo mais como manda os conformes.
Scanner scanner = new Scanner(System.in);

No mesmo programa, eu tenho uma chamada para a classe Calendar:
Calendar calendar = Calendar.get(Calendar.YEAR);

Ai esta minha duvida. Por que na classe Scanner eu utilizo o “new” e na classe Calendar eu não utilizo? Quando eu devo utilizar o “new” e quando não devo?

Agradeço a ajuda.

Amigo, isso você só vai descobrir estudando rsrs, mas vou tentar esclarecer um pouco as coisas para você.

Scanner scanner = new Scanner(System.in); // Nessa linha você está instanciando um objeto do tipo Scanner. E com certeza SEMPRE que você for instanciar um objeto você ira utilizar o new.

já na linha a seguir

Calendar calendar = Calendar.get(Calendar.YEAR); // você está apenas criando um objeto do tipo Calendar. e pegando “.get” o ano atual

Olá,

Não vejo como o código citado anteriormente e abaixo reproduzido, funcionária corretamente:

Calendar calendar = Calendar.get(Calendar.YEAR);

Pois o lado direito da atribuição é do tipo int e do lado esquerdo é do tipo Calendar.

Agora vejamos:

Calendar calendar = Calendar.getInstance();
int ano = calendar.get(Calendar.YEAR);

A primeira atribuição retorna um objeto do tipo Calendar. A segunda atribuição, retorna o campo ano como um inteiro;

O método Calendar.getInstance() que retorna um objeto Calendar deve ter alguma declaração new dentro. Basta fazer download dos fontes do JDK e depois abrir a classe Calendar.

Nossa, muito rápida a resposta. Muito obrigado pessoal.

Deixa eu só ver se entendi. Sempre que eu vá instanciar um objeto eu vou utilizar o “New”. A diferença é que a classe Calendar, no caso o getInstance() já deve ter o new implícito na programação, então fica desnecessário informar. No caso do Scanner, não deve ter e, nesse caso seria necessário informar, correto?

Obrigado novamente pessoal.

Olá,

Não é bem assim.

Você tem que conhecer a biblioteca, saber o que ela lhe oferece.

Por exemplo, a classe Calendar é uma classe abstrata (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html), assim você não consegue usar “Calendar calendar = new Calendar();” .

Mas a classe GregorianCalendar é uma classe concreta (https://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html), assim pode você usar “GregorianCalendar calendar = new GregorianCalendar();” .

Otimo cviniciusm, muito obrigado pela informação.

Só pra confirmar então, quando a classe é abstrata eu não consigo chamar pelo new, então preciso chamar um método dela. Se for classe concreta, eu consigo criar um objeto dela?

Obrigado novamente e me desculpe o questionário.

Centurydark, pra resumir, classe abstrata não instancia objeto, métodos estáticos podem ser usados sem a necessidade de se instanciar objetos, métodos estáticos podem está dentro de qualquer classe, abstrata ou concreta.

Senhores,

muito obrigado pela atenção dispensada.
Sensacional o fórum e mais ainda o comprometimento dos usuários para deixar o forum perfeito. Agora sei que não estou sozinho na minha caminhada de aprendizado em Java.

Só uma dúvida. Devo fechar o tópico ou deixar ele aberto? Se precisar fechar, como faço?

Obrigado novamente.

Edite o titulo e coloque a tag [RESOLVIDO] ;D