01. 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
-
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