Aulas Java Prof. Marcelo Heitor. Síntese das aulas: Capacitar os alunos na compreensão da...
Transcript of Aulas Java Prof. Marcelo Heitor. Síntese das aulas: Capacitar os alunos na compreensão da...
AulasJava
Prof. Marcelo Heitor
Síntese das aulas:
Capacitar os alunos na compreensão da linguagem java.
Durante o curso será estudado parte do fundamento de java baseando-se no conceito de orientação a objetos.
Tópicos gerais:
# História e anatomia java;# Sintaxe e primitivos;# Condicionais;# Estruturas de repetição;# Conceitos de Orientação a Objetos;# Manipulação de arquivos (projeto em sala);
Sobre o professor: Marcelo Heitor Teixeira – [email protected]
# Certificações em tecnologia Java:SCJP – Sun Certified Java Programmer;SCWCD – Sun Certified Web Component Developer;SCJA – Sun Certified Java Associate;
# Analista de Infraestrutura Sênior – Capgemini – atuando no Complexo Tecnológico Banco do Brasil;
# Consultor na plataforma Java desde 2004;
# 13 anos de experiência em análise e desenvolvimento para web;
# Últimos 6 anos trabalhando com arquitetura e infra-estrutura para aplicações Java;
# Professor Faciplac;
Sobre a turma:
# Perfil da turma;# Experiência com desenvolvimento;# Razões pela qual está fazendo o curso;# Expectativas;
O universo java:
Java
Desktop
WEB
Mobile e TV
Card
RFID
JSP
Servlet
JPA
Toplink
EJB
JSF
Framework
Design Pattern
Hibernate
Netbeans
Eclipse
DAO
MVC
POJO
Tomcat
GlassfishWebsphere
Weblogic
Applet
Entity Manger
JAR
Interface
Classe
FX
JAD
WEB.xml
SCJASCJP
SCEA
CDCCLDC
Model 1Model 2
FrontController
EntityBean
JEE
JSEJME
API
JDK
JREjavac
JNIJNDI
JDBC
MIDP
Struts
Datasource
context.xml
JMX
POO
Swing
AWT
RMIC SCWCD Midlet
Maven
Webservices
SCBCD
Facelets
JBOSS
E muito mais...
História e anatomia java
Genealogia java:
# História e anatomia java:
BCPL e B Década 1960
CDécada de 1970
C++ Década 1980
JavaDécada de 1990
# História e anatomia java:
O grande impacto na indústria de dispositivos eletrônicos pessoais foi
causado pelo surgimento do micro-processador.
Década de 1991, a Sun Microsystems (hoje da
Oracle) resolveu financiar um projeto liderado por James
Gosling.
Nasce então a linguagem “Java”, baseada no C++, que seria executada de forma a convergir computadores e dispositivos
eletrônicos criados por diferentes fabricantes. (tentativa de antecipar o
mundo digital)
# História e anatomia java:
Entretanto, esse mercado não decolou da forma
que a empresa esperava. Por isso os dias da java
estavam contados.
Surge então a idéia de aproveitar a linguagem para agregar conteúdo dinâmico nos navegadores de internet
da época.
Em 1995, java é oficialmente apresentada para o mercado
mundial.
Atualmente java é usada como linguagem e plataforma nos mais
variados tipos de computadores, como: Desktops, dispositivos móveis, cartões
inteligentes, RFID e servidores de aplicações.
# História e anatomia java:
Java é composta por uma grande biblioteca de classes que juntas formam a Java-API (Application Programing Interface) organizada em chamados pacotes.
A documentação da linguagem pode ser estudada em:java.sun.com/javase/downloads/
JAVA - API
Pacote A
classe X { metodo1(){} metodo2(){} }
Pacote B
classe Y { metodo1(){} metodo2(){} }
# História e anatomia java:
Evolução da Java-API:
Java 1.0
1996
Java 1.1JDBC1997 Java 2
(1.2 até 1.4)
Collections
Codinomes:
Playground,
Kestrel,
Merlin
1998 – 2002
Java 5.0 (1.5 +)
Enumeration,Generics,For-each
Codinome:Tiger
2004
Veio em 3 versões:
J2ME – Java Micro Edition;J2SE – Java Standard Edition;J2EE – Java Enterprise Edition;
A evolução da java é controlada pelo JCP – Java Community Process (jcp.org) e pela própria Oracle e usuários java.
Java 6.0
Evolução de
performance
Codinome:
Mustang
2006Java 7.0
Evoluções de sintaxe
2011
# História e anatomia java:
A Java-API é usada pelo SDK e pelo JRE.
O SDK é o kit de desenvolvimento de software java, ou seja, o ambiente de desenvolvimento java. Nele, existe uma coleção de ferramentas de linha de comando que executam tarefas como compilar, executar e depurar aplicações escritas em java.
Para que o SDK possa ser usado via linha de comando, é necessário configurar algumas variáveis de ambiente que serão vistas em breve.
O JRE é o ambiente de execução, a API do JRE contém tudo que é necessário para executar aplicações java.
Um programa java passa por 5 fases:Edição – Compilação – Carregamento – Verificação e Execução.
Fase 1Edição
Fase 2Compilação
Fase 3Carregador de
ClasseFase 4
Verificador deBytecodes
Execução pelaJVM
É criado em um editor um arquivo com a extensão .java
O compilador cria os bytecodes a partir do .java gerando um arquivo .class
O class-loader lê os bytecodes do .class e carrega na memória.
O verificador confirma se os bytecodes não violam nenhuma restrição de segurança java
JVM lê os bytecodes e os traduz para uma linguagem que a máquina entenda.
# História e anatomia java:
E por falar em JVM…
Java Virtual Machine!
É o mecanismo que recebe os créditos pela frase:“escreva uma vez, rode em qualquer lugar!”
A JVM manipula os bytecodes gerados pelo compilador java e conversa com a máquina real. Isso permite à java ser multi-plataforma.
# História e anatomia java:
# História e anatomia java:
Hardware
JVM
Compilador Java
Bytecodes…
Código executável de máquina…
# História e anatomia java:
Windows
Máquina Virtual Java - JVM
Código Java
Executável
Linux
# História e anatomia java:
Hardware
Bytecode PrimeiraClasse.class
classloader
classe remota?
verificador debytecodes
Em tempo de execução…
interpretador tradutor JIT gera código nativo…
Enquanto isso, na JVM…
JIT – Just-In-Time é a parte da JVM usada para acelerar o tempo de execução compilando (traduzindo) partes dos bytecodes que tem algorítmos parecidos, ao mesmo tempo…
SIM
NÃO
O Class Loader ou Carregador de Classes é a primeira tarefa executada pela JVM e figura responsável por carregar as classes na hora da execução da aplicação. Além disso é o mecanismo que efetua a verificação se os bytecodes de classes remotas não ofendem as regras de segurança da API Java.
A ordem de carregamento das classes obedece a seguinte sequência:
1 – Carrega classes nativas do JRE (API);2 – Carrega extensões do JRE, por exemplo os arquivos “.jar” que estão mapeados em $JAVA_HOME/jre/lib/ext; e classes em $JAVA_HOME/jre/lib/classes;3 – Carrega classes do sistema local (a ordem dos caminhos no CLASSPATH indica a ordem);4 – Classes remotas se existirem;
# História e anatomia java:
Pilha e Heap!
São o que os programadores java precisam saber diferenciar com relação a utilização de memória.
Na pilha, ficam as chamadas de métodos e variáveis locais.Na heap é onde residem os objetos.
Os valores literais dos primitivos são armazenados em bytes na pilha ao passo que uma variável de referência a um objeto contem os bytes que permitem o acesso ao objeto que está na heap.
# História e anatomia java:
Ref. objeto B
Primitivo int010011
Ref. objeto ARef. objeto A
PILHA HEAP
AA
BB
→ Durante muito tempo o gerenciamento de memória, nas aplicações, era um grande problema pois os programadores eram os responsáveis por controlar a alocação e a liberação da memória;
→ Hoje, com plataformas modernas como java, o gerenciamento é automático e a alocação e liberação de memória é dinâmica, por meio de algorítmos específicos;
→ Garbage Collector (coletor de lixo) é a parte da JVM responsável por liberar a memória alocada por um objeto da heap.
→ O GC é um dos principais componentes da jvm;
→ O coletor de lixo não pode ser invocado diretamente pelo programador. Sua execução é feita por uma thread controlada pela própria JVM. Para que o GC libere memória, um objeto deve estar no status de elegível:
# História e anatomia java:
Objeto obj = new Objeto();obj.fazAlgo();
obj = null;
# História e anatomia java:
Objeto tornando-se elegível para o coletor de lixo!
“Configurar uma referência para um objeto como null é uma boa prática de programação.”
Código java hipotético!
# História e anatomia java:
Tipos primitivos: → originam outros tipos em java;→ em java existem 8 tipos;
boolean → true/false → default false; char → inteiro unicode 16 bits → (sem sinal); byte → inteiro 8 bits → -128 a 127; short → inteiro 16 bits → -2^15 a 2^15 -1; int → inteiro 32 bits → -2^31 a 2^31 -1; long → inteiro 64 bits → -2^63 a 2^63 -1; float → flutuante 32 bits → norma IEEE 754-1985; double → flutuante 64 bits → norma IEEE 754-1985;
# História e anatomia java:
private: acesso apenas dentro da classe;protected: acesso por classes no mesmo pacote e subclasses;public: acesso de qualquer classe;abstract: classe que não pode ser instanciada ou método que precisa ser implementado por uma subclasse não abstrata;class: especifica uma classe;extends: indica a superclasse que a subclasse está estendendo;final: impossibilita que uma classe seja estendida, que um método seja sobrescrito ou que uma variável seja reinicializada;implements: indica as interfaces que uma classe irá implementar;interface: especifica uma interface;native: indica que um método está escrito em uma linguagem dependente de plataforma, como o C;new: instancia um novo objeto, chamando seu construtor;static: faz um método ou variável pertencer à classe ao invés de às instâncias;strictfp: usado em frente a um método ou classe para indicar que os números de ponto flutuante seguirão as regras de ponto flutuante em todas as expressões;
synchronized:indica que um método só pode ser acessado por uma thread de cada vez;transient: impede a serialização de campos;volatile:indica que uma variável pode ser alterada durante o uso de threads;break: sai do bloco de codigo em que está;case: executa um bloco de código dependendo do teste do switch;continue:pula a execução do código que viria após essa linha e vai para a próxima passagem do loop;default:executa esse bloco de codigo caso nenhum dos teste de switch-case seja verdadeiro;do:executa um bloco de código uma vez, e então realiza um teste em conjunto com o while para determinar se o bloco deverá ser executado novamente;else: executa um bloco de código alternativo caso o teste if seja falso;for:usado para realizar um loop condicional de um bloco de código;if: usado para realizar um teste lógico de verdadeiro o falso;instanceof: determina se um objeto é uma instância de determinada classe, superclasse ou interface;
return: retorna de um método sem executar qualquer código que venha depois desta linha (também pode retornar uma variável);switch:indica a variável a ser comparada nas expressões case;while: executa um bloco de código repetidamente até que uma certa condição seja verdadeira;assert: testa uma expressão condicional para verificar uma suposição; do programador;catch: declara o bloco de código usado para tratar uma exceção;finally:bloco de código, após um try-catch, que é executado; independentemente do fluxo de programa seguido ao lidar com uma exceção;throw:usado para passar uma exceção para o método que o chamou;throws: indica que um método pode passar uma exceção para o método que o chamou;try: bloco de código que tentará ser executado, mas que pode causar uma exceção;import:importa pacotes ou classes para dentro do código;package: especifica a que pacote todas as classes de um arquivo pertencem;
boolean:um valor indicando verdadeiro ou falso;byte: um inteiro de 8 bits (signed);char: um caracter unicode (16-bit unsigned);double: um número de ponto flutuante de 64 bits (signed);float: um número de ponto flutuante de 32 bits (signed);int: um inteiro de 32 bits (signed);long: um inteiro de 64 bits (signed);short: um inteiro de 16 bits (signed);super: refere-se a superclasse imediata;this: refere-se a instância atual do objeto;void: indica que o método não tem retorno;const: Não utilize para declarar constantes; use public static final;goto: não implementada na linguagem Java por ser considerada prejudicial;
null, true e false são valores literais.
Instalar e configurar a java para ser usada em linha de comando é simples:
Usaremos a versão 6 do Java que pode ser baixada em: java.sun.com/javase/downloads/
Em seguida basta seguir os seguinte passos:
Após baixado o JDK ou Kit de Desenvolvimento Java, dispare o instalador e vá configurando de acordo com o que se pede. [bastante simples].
Após isso acesse as variáveis de ambiente no windows e proceda da forma que segue:
# História e anatomia java:
Nas variáveis de ambiente [windows] crie:
JAVA_HOMEC:\jdk6
CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar;
Em seguida edite:
PATH%JAVA_HOME%\bin;
Após isso, abra o editor de linha de comando e digite: java –version você deve ver a versão do java instalado.
# História e anatomia java:
Alguns detalhes sobre o ambiente de desenvolvimento e execução java:
Depois de instalado e devidamente configurado devemos observar 2 programas em especial.
javac: Esse é o programa compilador da linguagem java:
javac nome_da_classe.java Onde:
Para ver mais opções do comando javac, digite javac e tecle enter (na linha de comando)
# História e anatomia java:
java: Esse é o programa que executa o programa java a partir do .class.
java nome_da_classe
Para ver mais opções do comando java, digite java e tecle enter (na linha de comando)
# História e anatomia java:
Fechamento de método
Anatomia de uma classe em java:
public class PrimeiraClasse {
public static void main(String [] args) {
}
}
# História e anatomia java:
VisibilidadeIndica que é uma classe
Nome da classe usando CamelCase…
Chave de abertura da classe
Não precisa de um objeto instanciado para ser usado.
Tipo de retorno. Esse indica que não há valor de retorno
Nome do método…
Abertura de método
Argumentos
Fechamento da classe!
O primeiro programa em java!!!
1 – crie [e salve] um arquivo com o nome PrimeiraClasse.java. Em seguida digite o seguinte código:
public class PrimeiraClasse { public static void main(String[] args) { System.out.println(“Primeira Classe Java!”); } }
2 – abra o editor de linha de comando e entre no diretório onde salvou o arquivo. [windows = menu iniciar executar digite cmd]
3 - Em seguida digite o comando: javac PrimeiraClasse.java
Se a sintaxe estiver correta será gerado um PrimeiraClasse.class…
# História e anatomia java:
4 - em seguida digite: java PrimeiraClasse
Observe o resultado na saída padrão!!!
# História e anatomia java:
Referências:
[Lindholm-Yellin] Tim Lindholm, Frank Yellin. The Java Virtual Machine Specification - Second Edition.
[Silveira-... et. al. 2012] Paulo Silveira, … . Introdução à arquitetura e design de software;
[Deitel-Deitel 2010] Paul Deitel, Harvey Deitel. Java Como Programar – Oitava Edição.
[Sierra-Bates 2005] Kathy Sierra, Bert Bates. Head First Java – Second Edition.
# História e anatomia java: