J2SE
SDK AWT
Swing
JINI
Servlet
str = str.replace(a,@);
Desafio 1: Faa o mesmo que o exerccio 6, porm ser usar posio (ndice) fixa.
Nenhuma das palavras acima podem ser usadas como identificadores (nomes de variveis, atributos, classes), ou para outro propsito, a no ser o especificado para aquela determinada palavra. As palavras goto e const, apesar de reservadas, no tem utilizadade algum no Java.
Mais e Menos Unrio: + e int x = +3; // x recebe o positivo 3 x = -x; // x recebe -3, neste caso Inverso de Bits: ~ int i = ~1;
// i = -2
Converso de Tipos: (tipo) double d = 1.99; int i = (int) d; // converte de double p/ int (perda de preciso)
Mdulo: %
int resto = 7 % 2; // resto = 1
Concatenao:
long var = 12345; String str = O valor de var + var;
bit: bits:
bit: bits:
Deslocamento esquerda: << Nmero: 192 Binrio: Left Shift de 1 bit: Left Shift de 7 bits: Nmero: -192 Binrio: Left Shift de 1 bit: Left Shift de 7 bits:
int i = 192 << 1 int i = 192 << 7 int i = -192 << 1 int i = -192 << 7
Deslocamento direita, sem sinal: >>> Nmero: 192 Binrio: |00000000|00000000|00000000|11000000| Right Shift de 1 bit: |00000000|00000000|00000000|01100000| Right Shift de 7 bits: |00000000|00000000|00000000|00000001| Nmero: -192 Binrio: |11111111|11111111|11111111|01000000| Right Shift de 1 bit: |01111111|11111111|11111111|10100000| Right Shift de 7 bits: |00000001|11111111|11111111|11111110|
int i = 192 >>> 1 int i = 192 >>> 7 int i = -192 >>> 1 int i = -192 >>> 7
// true // true
Comparao de Igualdade: == e != Comparam tipos primitivos, valores literais e referncias de objetos. if( abc == 10 ) { } boolean b = ( xyz != 50 ); if( refObj1 == refObj2 ) { }
public class LacoWhile { public static void main( String[] args ) { int i = 0; //lao while() com bloco de cdigo definido while( i < 10 ) { System.out.println( "Linha: " + i ); i++; } } }
A expresso avaliada antes de executar o bloco de cdigo Ele repete enquanto a expresso for verdadeira (true)
public class LacoWhile { public static void main( String[] args ) { int i = 0; //lao do / while() com bloco de cdigo definido do { System.out.println( "Linha: " + i ); i++; } while( i < 10 ); } } O bloco executado ao menos um vez Aps a primeira repetio que a expresso avaliada
public class ClausulaBreak { public static void main( String[] args ) { char letras[] = { 'A', 'B', 'C', 'D', 'E' }; int i; for( i=0; i<letras.length; i++ ) { if( letras[i] == 'C' ) { break; } } System.out.println( "ltimo ndice: " + i ); } }
int j = 0, i = 0; principal1: while( true ) { for( i=0; i<1000; i++ ) { if( j == 10 && i == 100 ) break principal1; } j++; }
public class ClausulaContinue { public static void main( String[] args ) { char letras[] = { 'B', 'X', 'R', 'A', 'S', 'I', 'L' }; int i; for( i=0; i<letras.length; i++ ) { if( letras[i] == 'X' ) { continue; } System.out.print( letras[i] ); } } }
int i=0, j=0; principal2: for( j=1; j<10; j++ ) { for( i=1; i<10; i++ ) { if( (i % j) == 0 ) { System.out.println( "i=" + i + " j=" + j ); continue principal2; } } j++; }
Propriedades:
modelo cor motor
Comportamento:
Entidade do mundo real
Ao lado temos o cdigo Java da classe Carro, definida pelo modelo UML, com base no levantamento da entidade carro do mundo real.
No cdigo definimos:
declarao da classe declarao dos atributos declarao dos mtodos Arquivo: Carro.java O arquivo do cdigo-fonte sempre leva o nome da classe, seguido da extenso .java.
Criando uma instncia (objeto) de uma classe: Carro meuCarro = new Carro( );
Declarao da varivel que vai guardar uma referncia para um objeto do tipo Carro.
Imagine, agora, duas variveis diferentes, c1 e c2, ambas referenciando o mesmo objeto. Teramos, agora, um cenrio assim: Carro c1 = new Carro( ); Carro c2 = c1;
public class Matematica { static final double PI = 3.14159265; static double areaCircunferencia( double r ) { return PI * r * r; } static double perimetroCircunferencia( double r ) { return PI * r; } }
//OK
Arrays no mudam de tamanho. Acessar um ndice inexistente do array causa uma exceo do tipo: ArrayIndexOutOfBoundsException
class MyClass { }
class ClasseA { }
Diagrama UML
public class TesteHeranca { public static void main( String[] args ) { Pessoa p = new Pessoa(); Pessoa e = new Empregado(); Pessoa g = new Gerente(); } }
Para instanciar uma classe interna, de dentro de sua classe externa, apenas precisamos fazer assim:
InnerClass i = new InnerClass();
Ambas so subclasses de MinhaClasse, mas cada uma iniciada de modo diferente (construtores diferentes).
Imagine um sistema de envio de mensagens do tipo texto e fax. No faria sentido ter uma instncia de Mensagem, mas sim uma de MensagemTexto ou MensagemFax.
public class MensagemFax extends Mensagem { public MensagemFax( String remetente ) { super( remetente ); }
public class ServicoMensagens { public static void main(String[] args) { Mensagem m = new MensagemTexto(Daniel); m.corpoMensagem(Mensagem de teste TXT); m.enviar(); m = new MensagemFax(Daniel); m.corpoMensagem(Mensagem de teste FAX); m.enviar(); } }
public class Circulo implements Figura { public double calcularArea() { //faz o cculo da rea do crculo } }
Cada classe implementam o mtodo sua maneira. Mas o mais importante que eles ofeream uma implementao para aquele mtodo da interface. Interfaces so adequadas para se definir formas (interfaces) de acesso a sub-sistemas, escondendo detalhes da sua implementao.
public class Quadrado implements Figura { public double calcularArea() { //faz clculo da rea do quadrado } }
Cargo c = Cargo.PROGRAMADOR; Cargo x = Enum.valueOf( Cargo.class, ANALISTA ); for( Cargo y : Cargo.values() ) { System.out.println( y ); }
Os erros de Runtime so causados por bugs do programa, que desconhecemos, ou seja, uma condio especial que sequer havamos imaginado. Os erros de Runtime so subclasses da classe Runtime, que subclasse de Exception. Os erros de sistema so erros imprevisveis, causados por falha do sistema, como acesso a disco, erro do banco de dados e etc. Estes erros so subclasses da classe Error. E os erros Customizados so erros ou condies especiais previstas no programa. Essos erros so subclasse da classe Exception.
A diretiva throw lana um erro, para que um bloco catch o capture e faa o tratamento necessrio.
Ele agora est mais simples, sem as diretivas try / catch / finally. Agora, ento podemos tratar o erro num nvel mais alto, ou seja, onde o mtodo de fazerRetidada( ) foi chamado. Exemplo:
try { fazerRetidada( 10000.0 ); } catch( SaldoInsuficienteException e ) { System.out.println( Saldo Insuficiente para a retirada ); }
A diretiva throws repassa um mtodo lanado dentro do mtodo e que no foi tratado por nenhum bloco catch dentro dele.
Classe: StringBuffer Um objeto da classe StringBuffer representa uma String que pode ser modificada dinamicamente. ideal para manipular grande quantidades de textos.
StringBuffer sb = new StringBuffer( Isto uma String ); sb.append( dentro de um StringBuffer ); sb.insert( 11, grande ); StringBuffer rev = new StringBuffer( 12345 ); rev.reverse();
List As classes Vector, ArrayList, LinkedList e outras, implementam a interface List. Essas colees, ento, podero ser acessadas pelo mtodos comuns da interface List.
List lst = new Vector( ); List lst2 = new ArrayList( ); //...
//instante atual
GregorianCalendar Esta classe uma implementao concreta da classe java.util.Calendar, e ofere mtodos e funcionalidades para manipular datas no formato do calendrio gregoriano.
Calendar calendar = new GregorianCalendar(); Date trialTime = new Date(); calendar.setTime(trialTime); System.out.println("ERA: " + calendar.get(Calendar.ERA)); System.out.println("YEAR: " + calendar.get(Calendar.YEAR)); System.out.println("MONTH: " + calendar.get(Calendar.MONTH)); System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR)); System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH)); System.out.println("DATE: " + calendar.get(Calendar.DATE)); System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR)); System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK)); System.out.println("DAY_OF_WEEK_IN_MONTH: " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM)); System.out.println("HOUR: " + calendar.get(Calendar.HOUR)); System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY)); //
public class ListaLigada<T> { public <T> buscar( int i ) { //busca e retorna o item } public void adicionar( <T> t ) { // adiciona item } public void remover( <T> t ) { // remove o item } }
A classe File oferece mtodos comuns para verificar se o caminho existe na mquina local, criar ou remover o arquivo/diretrio com o nome especificado, pegar o caminho completo do arquivo/diretrio, lista todos os arquivos do caminho do diretrio, verificar as propriedades do arquivo (data, readonly, etc) e outras funcionalidades. O Java usa duas representaes para textos: Unicode internamente e UTF para I/O. No acessaremos os dados destes arquivos diretamente. Para isso faremos uso dos Streams (fluxos) de entrada e sada de dados, da classe RandomAccessFile ou dos Reader e Writer.
Existem ainda outras classes de low-level. So elas: InputStream, OutputStream, que so as classes pai das classes de stream de baixo nvel. Alm das classes: ByteArrayInputStream, ByteArrayOutputStream, PipedInputStream e PipedOutputStream.
Existem ainda outras classes de high-level. So elas: BufferedInputStream, BufferedOutputStream, que so as classes que utilizam buffer de memria. Alm das classes: PrintStream, para gravar tipos primitivos como representaes de caracter e a classe PushbackInputStream.
As classes high-level suportam os mtodos dos low-level, mais mtodos para manipular leitura em buffer, leitura de linha e etc. Todas essas classes estendem das classes Reader e Writer.
Scanner s = new Scanner(new File(teste.csv)); s = s.useDelimiter(\\s*,\\s*); while( sc.hasNextShort() ) { short i = sc.nextShort(); } // l um arquivo csv com valores short // e pega os valores, delimitados por vrgula
Quando uma Thread entra no estado dead, ela no pode ser mais usada e deve ser descartada. Para uma classe ser executada em paralelismo, ela deve estender a classe java.lang.Thread ou implementar a classe java.lang.Runnable. Toda Thread deve implementar o mtodo public void run( ), que o inicio da execuo dela.
Perceba que, para iniciar a Thread, na verdade foi chamado o mtodo start( ) e no o mtodo run( ).
public void executar() { MinhaThread m = new MinhaThread(); m.start(); for( int i=0; i<100; i++ ) { System.out.println("Normal-"+i); try { wait(1); } catch(Exception e) {} } } }
Quando a classe implementa a interface Runnable, ao invs de estender a classe Thread, deve ser criada um Thread, passando a classe que implementa Runnable como parmetro.
public void executar() { MinhaThread m = new MinhaThread(); Thread t = new Thread( m ); t.start(); for( int i=0; i<100; i++ ) { System.out.println("Normal-"+i); try { wait(1); } catch(Exception e) {} } } }