01. Programação Java

102
Programação Java

description

introdução a linguagem de programação Java. nestes slides, você vai entender os principios da sintaxe da programação java.

Transcript of 01. Programação Java

  • Programao Java

  • Verses do Java

  • Regras para programao Java:

    Regra: Nome do arquivo deve ser o mesmo da classe

  • Convenes:

    Ao escrever uma classe, inicia-se sempre com letra maiscula (e.g.: Carro, Casa, Pessoa, Aluno)

    Quando existe um nome com Mais de uma palavra, da segunda palavra em diante deve-se colocar a primeira letra maiscula.(e.g.: olaMundo, cadaDoJoao)

  • Comentrios

    Para comentrios de uma linha, utilizado o //

    Para comentrios de duas ou mais linhas, utilizado o /* para iniciar e o */ para fechar

  • TIPOS DE DADOS Os tipos de dados que sero vistos a seguir, so todos primitivos

  • Tipos de dados (inteiros)

  • Tipos de dados(ponto flutuante)

  • Tipos de dados(caracteres)

    Tipo: Caractere

    Storage Requirement: 1 byte

    Range: 0 a 256

  • Tipos de dados(caracteres)

  • Caracteres especiais

  • Tipos de dados(booleana)

    Tipo: boolean

    Storage Requirement: 1 bit

    Range: 0 a 1

    O 0 representa false

    O 1 representa true

  • VARIVEIS

  • Variveis Toda varivel possui um tipo Declarao:

    Tipo nome;

    Para declarar mais de uma varivel utiliza-se virgula: Tipo nome1, nome2, nome3, ..., nomeN

    Exemplos: double salario long populacaoDaTerra Char letra

    As variveis so case sensitive, ou seja, existe uma diferena entre a letra a e a letra A

  • Inicializando variveis

    Para inicializar uma variavel, utiliza-se o operador de atribuio =

    Exemplos:

    double numero = 65000.0

    int idade = 12

  • Constantes

    Constantes so variveis que possuem a palavra final

    Essas variaveis, aps serem inicializadas no possuem mais o seu valor alterado

    Exemplo:

    final double CM_POR_POLEGADA = 2.54;

  • OPERADORES

  • Lembrete

    os operadores somente devem ser utilizados com valores que so de tipos primitivos.

    Tambm so chamados de operadores binrios por precisarem de dois operandos para realizar a operao

  • Operadores aritmticos

    Existem quatro operadores aritmticos: + (soma)

    - (subtrao)

    * (multiplicao)

    / (diviso)

    Alm desses quatro operadores, tambm h o mod ( % ), ele devolve o resto de uma diviso

  • Operadores aritmticos

    Exemplos:

    Int num = 5*4;

    Int num2 = num 2;

    Int num3 = num%num2;

  • Operadores aritmticos

    Existem os operadores de incremento e decremento:

    ++

    --

    Podem ser utilizados de acordo com a tabela: Operador Ao

    5 + i++ Soma o valor da varivel i com 5 e depois adiciona 1 ao valor da varivel i

    5+ ++i Adiciona 1 ao valor da varivel i e em seguida soma o valor de i com o 5

    5 + i-- Soma o valor da varivel i com 5 e depois retira 1 ao valor da varivel i

    5+ --i retira 1 ao valor da varivel i e em seguida soma o valor de i com o 5

  • Operadores Relacionais

    Utilizados para fazer a comparao de dois valores:

    So eles:

    >, >=,

  • Operadores lgicos

    Fazem a unio de duas ou mais operaes relacionais

    So eles: && (tambm chamado de e) realiza uma

    multiplicao lgica

    || (tambm chamado de ou) realiza uma soma lgica

  • Operadores lgicos

    Exemplos:

    int x =5, y = 10

    X==5 && y true(1)

    X==5 || y true(1)

  • Operadores lgicos Existem um terceiro operador lgico chamado not,

    sua funo inverter o valor booleano Exemplo: int x=5, y=10

    !(x

  • Operador ternrio

    chamado de ternario por possuir tres partes:

    If then else, funciona como se fossse um if, porm tem o tamanho reduzido:

    Exemplo: int x = 5, y = 10;

    x

  • Operadores bit a bit (bitwise)

    Utilizado para trabalhar com qualquer tipo do grupo dos inteiros, esses operadores trabalham diretamente com os bits que compom um nmero.

    So eles: & (e)

    | (ou)

    ^ (xor)

    ~ (not)

  • Operadores bit a bit (bitwise)

    Exemplo(aplicao em operao de calculo de redes)(muito lgl):

    int ip = 127; // 0111 1111

    int mask = 250; // 1111 1010

    int netid = ip & mask;// 0111 1010

  • Operador shift (bitshift)

    Desloca os bits de um nmero

    So eles:

    > (desloca para a direita)

    >>> (desloca para a direita sem sinal)

  • Operador shift (bitshift)

    Exemplo: deslocar dois bits para a esquerda do numero 1 (0000 0001)

    int num = 1; //0000 0001

    int a = num

  • FUNES MATEMTICAS

  • Classe Math

    A classe Math possui diversas funes e constantes, dessa forma fica mais fcil para desenvolver expresses aritmticas.

    Para utilizar as funes da classe Math sem referencia-la, deve-se importar a classe para o seu projeto da seguinte forma: import static java.lang.Math.*;

  • Funes da classe Math:

    Funes algbricas:

    Raiz Quadrada: Math.sqrt(4);

    Potncia: Math.pow(2,3); // mesmo que 2^3

  • Funes da classe Math(cont): Funes trigonometricas:

    Seno: Math.sin Cosseno: Math.cos Tangente: Math.tan Arco Tangente: Math.atan //devolve o valor do angulo

    para os quadrantes I e IV Arco Tangente 2: Math.atan2 // devolve o valor do

    angulo para qualquer um dos 4 quadrantes.

  • Funes da classe Math(cont):

    Funes exponenciais

    Math.exp

    Log: Math.log

    Log na basse 10: Math.log10

  • Constantes da classe Math:

    Math.PI //3.141592653589793

    Math.E //2.718281828459045

  • CONVERSO DE TIPOS

  • Converso entre os tipos numricos

    Algumas vezes ser necessrio converter valores entre os tipos de dados

    A converso pode ser realizada de duas formas:

    Implcita

    Explcita

  • Converso implcita Quando no necessrio mostrar que acontece a converso As linhas pontilhadas representam perda de preciso Ocorre um truncamento

    Byte(1) short(2) int(4) long(8)

    float(4) double(8)

    char(2)

    Tipo(num de bytes)

  • Combinao de dois valores diferentes com operadores binrios

    Quando dois valores de tipos diferentes so combinados com um operador binrios, o java utiliza-se da seguinte regra para dar o tipo resultante:

    um dos operadores

    do tipo double?

    O outro operador ter seu tipo convertido para

    double

    um dos operadores do

    tipo float?

    O outro operador ter seu tipo convertido

    para float

    um dos operadores do

    tipo long?

    O outro operador ter seu tipo convertido

    para float

    Ambos os operandos

    sero convertidos para o tipo

    int

    Sim Sim Sim

    No No No

  • Converso explcita

    A converso explicita acontece para qualquer outro tipo de converso que no est listado na imagem:

    Byte(1) short(2) int(4) long(8)

    float(4) double(8)

    char(2)

    Tipo(num de bytes)

  • Converso explcita A converso explicita, tambm chamada de

    cast, realizada da seguinte forma: double x = 9.997; int nx = (int) x;

    Note que neste cast houve perda de preciso, o valor da variavel nx 9 por que a parte decimal descartada.

    Nos casts realizado o truncamento do nmero

  • Dica para converso explicita

    Caso voc queira arredondar o nmero para o inteiro mais prximo, pode-se utilizar a funo round que arredonda para o inteiro longo mais prximo;

    double x = 9.997;

    int nx = (int) Math.round(x);

    Agora a varivel nx possui o valor 10

  • Hierarquia dos parnteses e operadores Operadores Associatividade

    [] . () Esquerda para direita

    ! ~++ -- +(unrio) (unrio) () (cast) new Direita para Esquerda

    * / % Esquerda para direita

    + - Esquerda para direita

    > >>> Esquerda para direita

    < >= instanceof Esquerda para direita

    == != Esquerda para direita

    & Esquerda para direita

    ^ Esquerda para direita

    | Esquerda para direita

    && Esquerda para direita

    || Esquerda para direita

    ?: (operador ternrio) Direita para Esquerda

    = += -= *= /= %= &= |= ^= = >>>= Direita para Esquerda

  • Hierarquia dos parnteses e operadores

    Exemplo:

    boolean a,b,c;

    a && b || c

    a e b sero comparados e o seu resultado ser comparado com c

  • Hierarquia dos parnteses e operadores

    O operador += possui associatividade da direita para a esquerda:

    int a,b,c;

    ...

    a += b += c;

    O valor de c ser agregado a b e o resultado ser agregado ao valor de a

  • Tipos enumerados

    Algumas vezes as variveis devem ter somente alguns tipos de valores especficos de valores, por exemplo, uma pizza pode ser pequena, mdia ou grande, para que um programa possua uma melhor integridade, pode-se definir tipos enumerados para que os erros diminuam:

    Exemplo de declarao:

    enum Tamanhos{PEQUENO, MEDIO, GRANDE};

    Tamanhos t = Tamanhos.PEQUENO;

  • STRINGS

  • Definio de string uma classe Java utilizada para guardar uma sequencia de

    caracteres. Note que apesar de ser utilizado como um tipo de varivel,

    esse tipo no primitivo e portanto no possvel aplicar os operadores relacionais e lgicos diretamente.

    Para utilizar as Strings declara-se a varivel da seguinte forma:

    String Rua = Av. Paulista; String str = ; // essa string est vazia

  • Substrings So subconjuntos de caracteres dentro das strings. Tambm so strings Exemplo: String a = "ola Mundo";

    String b = a.substring(2); // b = la Mundo

    String c = a.substring(2, 6); // c = la Mu

    0 1 2 3 4 5 6 7 8 9

    o l a M u n d o \0

  • Concatenao

    Significa juntar duas strings formando uma nova

    Utiliza-se o operador +

    Exemplo:

    String a= abc";

    String b = 123";

    String c = a+b; // c = abc123

  • Verificar se duas Strings so iguais Para a verificao utiliza-se a funo equals() A funo equals case sensitive, portanto a e A so diferentes; Exemplo: String a =abc, b = 123;

    a.equals(b) // vai retornar o booleano //false

    abc.equals(a) // vai retornar o

    //booleano true

  • Verificar se duas Strings so iguais

    Para ignorar o case Sensitive, utilize a funo equalsIgnoreCase() da mesma forma que a funo equals()

  • Operador == e as Strings

    O operador igual utilizado com Strings(e qualquer outro objeto que estudaremos mais para frente) compara endereos de memoria)

    Portanto, se a String no inicializada, o seu valor ser null

    Exemplo:

    String a=null;

    a == null // vai retornar o booleano true

  • Obtendo uma letra em um String

    Para obter uma determinada em uma String utiliza-se o seguinte comando:

    String a = abcdefg;

    Char letra = a.charAt(2); // letra = c

    0 1 2 3 4 5 6 7

    a b c d e f g \0

  • String vazia

    A string tambm pode estar vazia, para verificar se a string est vazia, existem dois mtodos:

    String str=;

    str.length() == 0

    A funo length() retorna o nmeros de caracteres que a String possui

    str.equals() // compara com uma String vazia

  • Mais funes para String

    String a = abcdefg;

    String b = a.toUpperCase(a); // b = ABCDEFG

    String c = b.toLowerCase(b); // c = abcdefg

    String d = abcdefg //note que h espaos

    String e = d.trim() // e = abcdefg

  • Construtor de Strings A concatenao de Strings pega duas String e gera uma nova, isso

    consome muitos recursos, para que o uso dos recursos seja diminudo, utiliza-se o StringBuilder:

    StringBuilder builder = new StringBuilder(); //cria o construtor de Strings

    builder.append(abc); // adiciona abc

    builder.append(123); // adiciona 123

    String resultado = builder.toString() // retorna abc123

  • Funes do StringBuilder java.lang.StringBuilder 5.0

    StringBuilder() // cria o construtor com uma string vazia

    int length() // rtorna o tamnho da string

    StringBuilder append(String str) // agrega o valor da string str na string

    StringBuilder append(char c) // agrega o valor na string

    void setCharAt(int i, char c) // adiciona um caractere em um determinado indice

    StringBuilder insert(int offset, String str) // insere a string str a partir da posicao i

    StringBuilder insert(int offset, char c) // insere o caractere c na posio offset

    StringBuilder delete(int startIndex, int endIndex) // apaga o conjunto de letras no intervalo informado

    String toString() // retorna a string que foi feita

  • CONTROLE DE FLUXO

  • Escopos Escopos so conjuntos de instrues que esto dentro de um par de parnteses As variveis somente existem dentro do escopo em que foram declaradas Exemplo: public static void main(String[] args) { int n; . . . { int k; . . . }

    // a varivel k no existe mais aqui }

  • Comando break O comando break, serve para iterromper o fluxo dentro

    de um escopo: {

    ......

    break;

    ....

    }

    Os comandos abaixo do break, no sero executados.

  • Declaraes Condicionais A declarao condicional no java possui a seguinte forma: If(condio) umaDeclarao

    Se voc deseja colocar mais de uma declarao, necessario utilizar um par de parenteses para determinar o escopo

    If(condio) {

    declarao1

    declarao2

    .....

    }

  • Declaraes condicionais Caso seja necessrio realizar uma declarao se a condio for false, utiliza-se o comando else:

    If (condio) declarao1 else declarao2

    Se voc desejar colocar mais de uma declarao utilize o par de parnteses para determinar o escopo

    if (yourSales >= target) { performance = "Satisfactory"; bonus = 100 + 0.01 * (yourSales - target); } else { performance = "Unsatisfactory"; bonus = 0; }

    A parte do else sempre opcional

  • Declaraes Condicionais tambm existe o comando else if, que da mais possibilidades de

    execuo das declaraes condicionais: if(x

  • Loop indeterminado - While O while executa um conjunto de declaraes at que sua condio seja

    falsa: while(condio) declarao Ou while(condio) { declarao1 declarao2 .... } Nesse modelo de loop, primeiro realizado o teste e em seguida so executadas as declaraes

  • Loops indeterminado Do While O Do While executa um conjunto de declaraes at que sua condio seja

    falsa: do declarao While(condio); Ou do { declarao1 declarao2 .... } while(condio); Nesse modelo de loop, primeiro so executadas as declaraes e depois realizado o teste para verificar se acontecer mais uma volta.

  • Loop determinado - for O loop for, funciona como o while, porm possui um nmero determinado de voltas Possui trs declaraes em sua configurao: for (int i = 1; i
  • Selees mltiplas a declarao switch A repetio de ifs de orma sequencial pode ser cansativa, para resolver esse problema, existe o

    switch: Switch(umNumero) { case 1: .... Break; case 2: .... Break; ... case n: .... Break; Default: .... } Se a varivel umNumero for igual a um dos cases so executadas as declaraes referentes, se no

    for encontrado o valor o default executado. O break serve para que o switch seja interrompido aps as declaraes terem sido finalizadas. O break opcional De forma superficial, um if fresco

  • Aplicao do break em um lao while Scanner in = new Scanner(System.in); //classe que //faz leitura do teclado Int n; while(true) { n = in.nextInt(); //recebe o numero do teclado if(n==0) break; System.out.println(5/n); }

  • Labels possvel rotular os escopos com labels da seguinte forma: Com a rotulao dos escopos, possivel escolher quais escopos sero parados: Scanner in = new Scanner(System.in); int n;

    lacoWhile:

    while (true) // this loop statement is tagged with the label

    {

    read_data2:

    for (int i = 0; i < 3; i++) {

    System.out.print(i+"Enter a number >= 0: ");

    n = in.nextInt();

    if (n < 0) // should never happencan't go on

    {

    break; // vai parar apenas o lao for

    }

    // break out of read_data loop

    }

    }

  • Labels possvel rotular os escopos com labels da seguinte forma: Scanner in = new Scanner(System.in); int n;

    lacoWhile:

    while (true) // this loop statement is tagged with the label

    {

    read_data2:

    for (int i = 0; i < 3; i++) {

    System.out.print(i+"Enter a number >= 0: ");

    n = in.nextInt();

    if (n < 0) // should never happencan't go on

    {

    break lacoWhile; //vai para o while e consequentemente o for tambm

    }

    // break out of read_data loop

    }

    }

  • Comando continue Ao contrario do break, o comando continue, faz com que o fluxo volte para

    o comeo do escopo: Scanner in = new Scanner(System.in); while (sum < goal) { System.out.print("Enter a number: "); n = in.nextInt(); if (n < 0) continue; sum += n; // not executed if n < 0 }

    Se o valor de n for inferior a zero, o fluxo desviado para a condio do while

  • BIG NUMBERS

  • O que fazer?

    Se voc possui um nmero inteiro ou real que seja muito grande, pode acontecer de as variveis primitivas no terem a capacidade para guarda-los, portanto ser necessrio a utilizao das classes BigInteger e BigDecimal, que guardam respectivamente nmeros inteiros e reais

  • Exemplo: BigInteger a = BigInteger.valueOf(100);

    BigInteger b = BigInteger.valueOf(200);

    BigInteger c = a.add(b); // representa a operao

    //c = a+b;

    BigInteger d = a.multiply(b); // d = a*b

    BigInteger e = c.multiply(b.add(a)); //c * (a+b)

    Perceba que 100 e 200 no so nmeros muito grandes

  • Funes do BigInteger

    BigInteger add(BigInteger other)

    BigInteger subtract(BigInteger other)

    BigInteger multiply(BigInteger other)

    BigInteger divide(BigInteger other)

    BigInteger mod(BigInteger other) // resto de diviso

  • Funes do BigDecimal

    BigInteger add(BigInteger other)

    BigInteger subtract(BigInteger other)

    BigInteger multiply(BigInteger other)

    BigInteger divide(BigInteger other)

    Note que no h resto de diviso para nmeros reais.

  • ARRAYS

  • O que so? uma estrutura de dados que guarda um conjunto de

    valores do mesmo tipo, cada valor possui um nmero de ndice, e por esse ndice, pode ser acessado.

    Utiliza-se o par de colchetes([]) para determinar um array, cada par de colchetes adicionados em um array significa uma dimenso.

    O nmero mximos de dimenses o tamanho da sua imaginao e a capacidade do computador.

    Arrays tambm so um tipo de coleo, que sero vistos de forma mais profunda, nas prximas aulas

  • O que so?

    Os ndices sempre comeam a ser contados a partir do zero, e o valor do ultimo ndice sempre o nmero anterior ao tamanho do array:

    Array de 10 ndices:

    0 1 2 3 4 5 6 7 8 9

    55 47 897 94 87 89 51 547 41 10

    ndices do array

    Contedo do array

  • Como declarar um array

    Int[] a = new int[100];

    Ou

    Int a[] = new int[100];

    Ambas as declaraes criam um array de 100 posicoes

  • Preenchendo um array

    Desta forma preenchemos um array com valores que vo de 0 a 9:

    int[] a = new int[10];

    for (int i = 0; i < 10; i++)

    a[i] = i;

    Note que i=0 o primeiro ndice do vetor

    Note que i

  • Preenchendo um array

    Tambm podemos preencher um array da seguinte forma: int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

  • Arrays annimos

    Em certos momentos, quando necessrio passar um array para alguma funo, o array pode ser criado no momento da chamada da funo.

    Podemos declarar um array annimo da seguinte forma:

    new int[] { 17, 19, 23, 29, 31, 37 };

  • Preenchendo novamente um array

    Depois que um array j foi declarado, pode-se redeclara-lo tambm:

    int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

    smallPrimes = {1,2,3};

  • Preenchendo novamente um array

    Depois que um array j foi declarado, pode-se redeclara-lo tambm e ainda por cima utilizar o array annimo:

    int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

    smallPrimes = new int[] {1,2,3,4};

  • Como obter o tamanho do array?

    Para obter o tamanho do array utiliza-se o comando .length

    Exemplo:

    a.length // retorna o tamanho do array a

  • Um novo loop: for each

    O loop for each, permite que todos os elementos de uma coleo, sejam acessados de forma sequencial e simples

    for (variavel : coleo) declarao

  • Exemplo de for each

    int a[] = {2,4,5,7,3,2,2}

    for(int numero: a)

    System.out.println(numero);

  • Exemplo de for each

    int a[] = {2,4,5,7,3,2,2};

    for(int numero: a)

    System.out.println(numero);

    a mesma coisa que:

    for (int i = 0; i < a.length; i++)

    System.out.println(a[i]);

  • UM PARALELO ENTRE VARIVEIS PRIMITIVAS E NO PRIMITIVAS

  • O paralelo

    As variveis primitivas guardam um valor

    As variveis no primitivas guardam um endereo de memria, esse endereo de memoria pode ter um outro endereo de memoria, ou um valor primitivo, o ponto final sempre no valor primitivo

  • AGORA VOLTANDO PARA OS ARRAYS

  • Cpia de um array

    Arrays no um tipo primitivo, portanto a cpia de um array vai fazer com que existam dois ponteiros apontando para o mesmo endereo de memoria: int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

    int luckyNumbers = smallPrimes;

    luckyNumbers[5] = 12; //o vetor

    smallPrimes tambm mostrar o mesmo valor

  • Cpia de um array

  • Classificando um array

    Voc pode desenvolver o seu proprio algoritmo de classificao de arrays, porm o java faz isso para voc atravs do quickSort:

    int[] anonymous = { 17, 29, 19, 37 , 23, 31, };

    Array.sort(anonymous); // vai ficar na ordem:

    //17, 19, 23, 29, 31, 37

  • Exemplo de arrays de duas dimenses

    int[][] magicSquare =

    {

    {16, 3, 2, 13},

    {5, 10, 11, 8},

    {9, 6, 7, 12},

    {4, 15, 14, 1}

    };

  • Exemplo de arrays de duas dimenses

  • Exemplo de arrays de duas dimenses

    Note que um array de duas dimenses no java uma composio de arrays de uma dimenso que apontam para outros arrays de uma dimenso.

    Essa particularidade do java permite que cada linha do array de duas dimenses possuam um numero variado de colunas.

    Dessa forma a quantidade de memria pode ser reduzida de forma significativa.

  • Exemplo de arrays de duas dimenses

    Esse um exemplo de matriz que possui 7 linhas e cada linha possui um nmero variado de colunas:

    1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1