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