SlideShare ist ein Scribd-Unternehmen logo
1 von 16
PESL (Programa de Educação em Software Livre)
Curso Básico de JAVA
Aula 10
Roteiro da Aula:
Lista de argumentos
Precedência
Conversão entre tipos de dados





Lista de Argumentos
A lista de argumentos é a lista de valores que o método vai precisar, obdecendo a sintaxe
[tipo 1] [nome 1], [tipo 2] [nome 2], ...
onde [tipo ?] é a especificação do tipo de dado e [nome ?] é um identificador pelo qual o parâmetro é conhecido.
Exemplo:
// Classe de numeros complexos
class Complexo {
double x=1, y=1; /* parte real e complexo, respectivamnte
public double Re() { // retorna a parte real
return x;
}
public double Im() { /retorna a parte imaginaria
return y;
}
public set(double a, b){
x = a;
y = b;
}
}
public class Teste {
public static void main(String args[]) {
Complexo c = new Complexo();
c.set(3,2);
System.out.println("z = (" + c.Re() + " + " + c.Im() + "i)");
}
}

Uma observação importante é que Java trata o objeto por referência e por isso, se o método modificar o objeto
recebido como parâmetro, o objeto será modificado externamente. No entando, se o parâmetro recebido for tipo
simples (int, double, char, float, etc), visto no tipo de dados, o método pode alterar o parâmetro a vontade que não
influencia no valor externo.
Para ilustrar, veja o exemplo a seguir:
// classe de inteiro
class inteiro {
public int i;
}
// classe principal
public class TestPar {
// método que altera o valor do parametro int
// este metodo deve ser static, pois sera chamado
// pelo metodo main() que e static
static void MudaInt(int k) {
System.out.println("MudaInt: valor de k e " + k);
k += 2;
System.out.println("MudaInt: valor de k e apos incremento e " + k);
}
// método que altera o valor do parametro inteiro
// este metodo deve ser static, pois sera chamado
// pelo metodo main() que e static
static void MudaInteiro(inteiro k) {
System.out.println("MudaInteiro: valor de k e " + k.i);
k.i += 2;
System.out.println("MudaInteiro: valor de k e apos incremento e " + k.i);
}
// main() do TestPar
public static void main(String args[]) {
int i;
inteiro n = new inteiro();
i = 2;
n.i = 3;
System.out.println("Valores originais:");
System.out.println("Valor de i e "+i);
System.out.println("Valor de n e "+n.i);
MudaInt(i);
MudaInteiro(n);
System.out.println("Valores apos a chamada dos metodos:"):
System.out.println("Valor de i e "+i);
System.out.println("Valor de n e "+n.i);
}
}
A especificação public de uma variável dentro da classe, faz com que este variável seja acessado de
qualquer lugar. Para especificar a variável i do objeto k, basta escrever k.i. Em geral, a variável [var]
dentro do objeto [obj] do tipo classe e referenciado por [obj].[var]. Note o uso de especificação static
para os métodos MudaInt() e MudaInteiro(). Esta especificação é necessaria, pois o método principal é
static, e método static não pode chamar outros métodos da mesma classe que não seja static.

O exemplo acima fornece a saída:

Valores originais:
Valor de i e 2
Valor de n e 3
Valores apos a chamada dos metodos:
Valor de i e 2
Valor de n e 5
Expressões são combinações ordenadas de
valores, variáveis, operadores, parênteses e chamadas de métodos, permitindo
realizar cálculos aritméticos, concatenar strings, comparar valores, realizar operações
lógicas e manipular objetos. Sem expressões, uma linguagem de programação seria
praticamente inútil. O resultado da avaliação de uma expressão é em geral um valor
compatível com os tipos dos dados que foram operados.
A maneira como uma expressão é avaliada (ou calculada) obdece as mesmas regras
familiares da Matemática. A regra mais simples é a da associatividade. Quando um
mesmo operador aparece mais de uma vez em uma expressão, como em
a+b+c, então o operador mais à esquerda é avaliado primeiro e em seguida o da
direita, e assim por diante. Esta seria então equivalente a ((a+b)+c).
Precedência
Há situações em que é necessário juntar operadores diferentes numa mesma expressão. Nesse caso a
associatividade não se aplica mais trivialmente. Nesse caso como descobrir quais são os operandos de
um operador, e quais operadores são avaliados primeiro? A resposta está na precedência dos
operadores. Por exemplo, excrevendo a+b*c, somos levados naturalmente a multiplicar primeiro b com
c e em seguida o somar o produto com a. Isto porque a multiplicação tem precedência sobre a adição.
A precedência é então um conjunto de regras que permitem determinar quais são os operandos de um
dado operador.
Como a linguagem Java é rica em operadores, alguns pouco familiares, precisamos conhecer a
precedência desses operadores.
Na tabela a seguir, está indicada a pecedência dos operadores comumente usados em Java. A tabela
apresenta os operadores ordenados da maior precedência para a menor. Observe que, existem alguns
operadores que naturalmente não requerem preocupação quanto à sua precedência, devido a forma
como são empregados.
Operador

Descrição

[] ()
(tipo)

Máxima precedência: separador, indexação, parâmetros, conversão de tipo

+ - ~ ! ++ --

Operador unário: positivo, negativo, negação (inversão bit a bit), não (lógico), incremento,
decremento

*/%

Operador unário: positivo, negativo, negação (inversão bit a bit), não (lógico), incremento,
decremento

+-

Adição, subtração

<<
>>
>>>

Translação (bit a bit) à esquerda, direita sinalizada, e direita não sinalizada (o bit de sinal será
0)

<
<=
>=
<

Operador relacional: menor, menor ou igual, maior ou igual, maior

==
!=

Igualdade: igual, diferente
&

Operador lógico e bit a bit

^

Ou exclusivo (xor) bit a bit

!

Operador lógico ou bit a bit

&&

Operador lógico e condicional

||

Operador lógico ou condicional

?:

Condicional: if-then-else compacto

= op=

Atribuição
Conversão entre tipos de dados
Ao trabalhar com expressões, salvo quando todos os operando são do mesmo tipo, é
inevitável ter que considerar conversões entre um tipo de dado e outro. Há basicamente dois
tipos de conversões de dados. O primeiro se refere a conversão implicita na qual, os dados
são convertidos automaticamente, praticamente sem a preocupação do programador. Isto
ocorre no caso de conversão de dados de tipo interio para real e de números para strings.
Por exemplo:
double x;
int i = 20;
x = i;
Neste caso o valor do inteiro i é convertido automaticamente para um double antes de ser
armazenado na variável x. As regras de conversão implícita empregadas pela linguagem Java
são as seguintes:
os operadores unários ++ e -- convertem um tipo byte e short são convertidos para um int, e
os demais tipos não são afetados
para os operadores binários, as regras são um pouco mais complicadas. Para operações
envolvendo apenas inteiros, se um dos operandos for long, o outro será convertido para um
long antes de realizar a operação, a qual resultará num long. Caso contrário, ambos os
operandos são convertidos para um int e o resultado será também um int, a menos que o
resultado da operação seja grande demais para caber num int. Nesse caso, o resultado será
convertido para um long. Para operações envolvendo números de ponto flutuante, se um dos
operadores for double, o outro será convertido para double antes de realizar a operação e o
resultado será um double. Do contrário, ambos os operando são convertidos para float, e o
resultado será um float.
Algumas vezes, porém, as conversões implícitas não são suficientes para garantir um
resultado esperado em uma expressão. Nesses cados, é importante podermos controlar
precisamente a ocorrência de uma conversão de tipo. Isto pode ser feito por meio de um
operador unário de conversão.
Por exemplo:
float eventos = 25.7;
float dias = 7.2;
x = (int)(eventos / dias);

O resultado da expressão acima será precisamente 3, isto é a parte inteira de 25.7 dividido
por 7.2. A diferença é que o operador de conversão de tipo (int) transformou o valor do
quociente 25.7/7.2 em um inteiro, truncando as casas decimais. Note que o operador de
conversão é um operador unário de maior precedência, logo, tivemos de colocar a divisão
entre parênteses para garantir que o resultado dessa divisão formasse um único operando. A
conversão entre quaisquer inteiros e entre inteiros e números de ponto flutuante é permitida.
Porém, não é permitido converter dados do tipo boolean para nenhum outro tipo, enquanto a
conversão entre objetos somente é permitida para classes parentes.
Vejamos ainda um outro exemplo de utilização do operador de conversão de tipo:
int a = 3;
int b = 2;
double x;
x = a / b;
Neste exemplo, desejamos que a variável x tenha o valor do quociente entre a e b. Como x é um dado
de ponto flutuante, presume-se que o resultado desejado neste exemplo seja, digamos, x=3/2=1.5.
Como porém os operandos da divisão são ambos inteiros, o resultado será também um inteiro, isto
é, teremos x = 1.0. Para contornar essa situação, podemos converter explicitamente um dos operandos
para um dado em ponto flutuante, fazendo:
x = (double)a / b;
Observamos que a conversão entre inteiros de maior comprimento para inteiros de menor comprimento
pode causar perda de informação na representação dos valores. Caso o valor a ser convertido ocupe
mais bits do que o tipo da variável recebendo esse valor, então o valor é truncado.
int l = 393;
byte b;
b = l;
System.out.println("O valor de b é " + b);
Neste exemplo teremos como resultado:
O Valor de b é -119
Por que isso aconteceu? Fica mais fácil de compreender isso se interpretarmos os números
acima na notação binária. O número 393 é representado em base dois pelo número
110001001, que tem 9 bits de comprimento (omitimos os zeros não significativos). Como a
variável b é do tipo byte e seu comprimento é de apenas 8 bits, teremos os 8 primeiros bits da
direita para a esquerda atribuídos a b, isto é, 10001001, que representa o número -119 em
base dois, na notação de complemento de dois..
Fim
Esta foi a ultima aula do curso básico de java, espero que o conteúdo passado
tenha sido absorvido com clareza por todos, bons estudos e um forte abraço.

Weitere ähnliche Inhalte

Was ist angesagt?

ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
Apostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralApostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralMaria Teresa Thomaz
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsortFlávio Freitas
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - OrdenaçãoAnderson Zardo
 
53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-iEdvan Mateó
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Mauricio Volkweis Astiazara
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsortFlávio Freitas
 
53392229 apostila-de-algoritmo-2009
53392229 apostila-de-algoritmo-200953392229 apostila-de-algoritmo-2009
53392229 apostila-de-algoritmo-2009starley lobo
 

Was ist angesagt? (20)

ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Apostila c++
Apostila c++Apostila c++
Apostila c++
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 
Visualg
VisualgVisualg
Visualg
 
Apostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralApostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e Integral
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsort
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - Ordenação
 
Recursividade
RecursividadeRecursividade
Recursividade
 
53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
 
53392229 apostila-de-algoritmo-2009
53392229 apostila-de-algoritmo-200953392229 apostila-de-algoritmo-2009
53392229 apostila-de-algoritmo-2009
 

Andere mochten auch

Definições de Tipos de Fios e Linhas para Costura
Definições de Tipos de Fios e Linhas para Costura Definições de Tipos de Fios e Linhas para Costura
Definições de Tipos de Fios e Linhas para Costura Débora Cseri
 
Croquís, desenho técnico, planilha de criação...
Croquís, desenho técnico, planilha de criação...Croquís, desenho técnico, planilha de criação...
Croquís, desenho técnico, planilha de criação...Melina Carpenedo
 
TCC Curso Técnico em Produção de Moda - SENAI
TCC Curso Técnico em Produção de Moda - SENAITCC Curso Técnico em Produção de Moda - SENAI
TCC Curso Técnico em Produção de Moda - SENAImayarastinghen
 
Apostila desenho parte 03
Apostila desenho parte 03Apostila desenho parte 03
Apostila desenho parte 03arkanjomk
 
Pontos de costura do vestuário
Pontos de costura do vestuárioPontos de costura do vestuário
Pontos de costura do vestuárioHeriberto Puff
 
Definições de Tipos de Agulhas para Máquinas de Costura
Definições de Tipos de Agulhas para Máquinas de CosturaDefinições de Tipos de Agulhas para Máquinas de Costura
Definições de Tipos de Agulhas para Máquinas de CosturaDébora Cseri
 
Apostila de desenho parte 01
Apostila de desenho parte 01Apostila de desenho parte 01
Apostila de desenho parte 01possofazermoda
 
Modelagem do vestuário no corelDRAW
Modelagem do vestuário no corelDRAWModelagem do vestuário no corelDRAW
Modelagem do vestuário no corelDRAWDaniele Queiroz
 
Maquinas de costura/tipos de ponto/tramas
Maquinas de costura/tipos de ponto/tramasMaquinas de costura/tipos de ponto/tramas
Maquinas de costura/tipos de ponto/tramasLaila Miranda
 
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01Denise Rodrigues
 
Apostilamasculina 140918223257-phpapp01
Apostilamasculina 140918223257-phpapp01Apostilamasculina 140918223257-phpapp01
Apostilamasculina 140918223257-phpapp01Claudia Luzz
 
Processos produtivos da ind_da_moda
Processos produtivos da ind_da_modaProcessos produtivos da ind_da_moda
Processos produtivos da ind_da_modaNilzeth Gusmao
 
DESENHO TÉCNICO NORMAS E PADROES
DESENHO TÉCNICO NORMAS E PADROESDESENHO TÉCNICO NORMAS E PADROES
DESENHO TÉCNICO NORMAS E PADROESordenaelbass
 
Senai modelageminfantil-150326112330-conversion-gate01
Senai modelageminfantil-150326112330-conversion-gate01Senai modelageminfantil-150326112330-conversion-gate01
Senai modelageminfantil-150326112330-conversion-gate01Denise Rodrigues
 

Andere mochten auch (20)

Tecnologia do vestuario
Tecnologia do vestuarioTecnologia do vestuario
Tecnologia do vestuario
 
Definições de Tipos de Fios e Linhas para Costura
Definições de Tipos de Fios e Linhas para Costura Definições de Tipos de Fios e Linhas para Costura
Definições de Tipos de Fios e Linhas para Costura
 
Croquís, desenho técnico, planilha de criação...
Croquís, desenho técnico, planilha de criação...Croquís, desenho técnico, planilha de criação...
Croquís, desenho técnico, planilha de criação...
 
TCC Curso Técnico em Produção de Moda - SENAI
TCC Curso Técnico em Produção de Moda - SENAITCC Curso Técnico em Produção de Moda - SENAI
TCC Curso Técnico em Produção de Moda - SENAI
 
Apostila desenho parte 03
Apostila desenho parte 03Apostila desenho parte 03
Apostila desenho parte 03
 
Pontos de costura do vestuário
Pontos de costura do vestuárioPontos de costura do vestuário
Pontos de costura do vestuário
 
Slides TCC - part 1
Slides TCC - part 1Slides TCC - part 1
Slides TCC - part 1
 
Definições de Tipos de Agulhas para Máquinas de Costura
Definições de Tipos de Agulhas para Máquinas de CosturaDefinições de Tipos de Agulhas para Máquinas de Costura
Definições de Tipos de Agulhas para Máquinas de Costura
 
Apostila de desenho parte 01
Apostila de desenho parte 01Apostila de desenho parte 01
Apostila de desenho parte 01
 
Modelagem do vestuário no corelDRAW
Modelagem do vestuário no corelDRAWModelagem do vestuário no corelDRAW
Modelagem do vestuário no corelDRAW
 
Universo da Costura
Universo da CosturaUniverso da Costura
Universo da Costura
 
Maquinas de costura/tipos de ponto/tramas
Maquinas de costura/tipos de ponto/tramasMaquinas de costura/tipos de ponto/tramas
Maquinas de costura/tipos de ponto/tramas
 
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01
Corteecostura nvelbsicomodainfantil-150312205124-conversion-gate01
 
Apostilamasculina 140918223257-phpapp01
Apostilamasculina 140918223257-phpapp01Apostilamasculina 140918223257-phpapp01
Apostilamasculina 140918223257-phpapp01
 
5modelagem infantil
5modelagem infantil5modelagem infantil
5modelagem infantil
 
Processos produtivos da ind_da_moda
Processos produtivos da ind_da_modaProcessos produtivos da ind_da_moda
Processos produtivos da ind_da_moda
 
DESENHO TÉCNICO NORMAS E PADROES
DESENHO TÉCNICO NORMAS E PADROESDESENHO TÉCNICO NORMAS E PADROES
DESENHO TÉCNICO NORMAS E PADROES
 
2modelagem ubá calça
2modelagem ubá calça2modelagem ubá calça
2modelagem ubá calça
 
Materiais e Processos Têxteis
Materiais e Processos TêxteisMateriais e Processos Têxteis
Materiais e Processos Têxteis
 
Senai modelageminfantil-150326112330-conversion-gate01
Senai modelageminfantil-150326112330-conversion-gate01Senai modelageminfantil-150326112330-conversion-gate01
Senai modelageminfantil-150326112330-conversion-gate01
 

Ähnlich wie Curso Básico de Java - Aula 10

Ähnlich wie Curso Básico de Java - Aula 10 (20)

Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5
 
Java
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Logica java ate slide 30
Logica java   ate slide 30Logica java   ate slide 30
Logica java ate slide 30
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresLogica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
 
Cap 2
Cap 2Cap 2
Cap 2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Java 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresJava 03 Tipos Dados Operadores
Java 03 Tipos Dados Operadores
 
Javascript tutorial
Javascript tutorialJavascript tutorial
Javascript tutorial
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Algoritmos Aula 04
Algoritmos Aula 04Algoritmos Aula 04
Algoritmos Aula 04
 
Math
MathMath
Math
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
Eeep aderson borges phpmysql 20112020 operadores em php
Eeep aderson borges phpmysql 20112020 operadores em phpEeep aderson borges phpmysql 20112020 operadores em php
Eeep aderson borges phpmysql 20112020 operadores em php
 
Matlab
Matlab Matlab
Matlab
 

Mehr von PeslPinguim

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao ArduinoPeslPinguim
 
Aula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalAula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalPeslPinguim
 
Aula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalAula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalPeslPinguim
 
Aula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalAula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalPeslPinguim
 
Aula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalAula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalPeslPinguim
 
Aula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalAula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalPeslPinguim
 
Aula 1 apresentacao
Aula 1 apresentacaoAula 1 apresentacao
Aula 1 apresentacaoPeslPinguim
 
Aula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalAula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalPeslPinguim
 
Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_PeslPinguim
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4PeslPinguim
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1PeslPinguim
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3PeslPinguim
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9PeslPinguim
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 PeslPinguim
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroPeslPinguim
 
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEBHTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEBPeslPinguim
 
Alarme Automatico - Eletrônica Aplicada - Aula 2
Alarme Automatico - Eletrônica Aplicada - Aula 2Alarme Automatico - Eletrônica Aplicada - Aula 2
Alarme Automatico - Eletrônica Aplicada - Aula 2PeslPinguim
 

Mehr von PeslPinguim (20)

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Aula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalAula 4 redes Inclusão Digital
Aula 4 redes Inclusão Digital
 
Aula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalAula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão Digital
 
Aula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalAula 3 software Inclusão Digital
Aula 3 software Inclusão Digital
 
Aula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalAula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão Digital
 
Aula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalAula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão Digital
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Aula 1 apresentacao
Aula 1 apresentacaoAula 1 apresentacao
Aula 1 apresentacao
 
Aula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalAula 5 internet Inclusão Digital
Aula 5 internet Inclusão Digital
 
Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoro
 
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEBHTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
HTML5 - UM GUIA DE REFERÊNCIA PARA DESENVOLVEDORES WEB
 
Alarme Automatico - Eletrônica Aplicada - Aula 2
Alarme Automatico - Eletrônica Aplicada - Aula 2Alarme Automatico - Eletrônica Aplicada - Aula 2
Alarme Automatico - Eletrônica Aplicada - Aula 2
 

Curso Básico de Java - Aula 10

  • 1. PESL (Programa de Educação em Software Livre) Curso Básico de JAVA Aula 10 Roteiro da Aula: Lista de argumentos Precedência Conversão entre tipos de dados   
  • 2. Lista de Argumentos A lista de argumentos é a lista de valores que o método vai precisar, obdecendo a sintaxe [tipo 1] [nome 1], [tipo 2] [nome 2], ... onde [tipo ?] é a especificação do tipo de dado e [nome ?] é um identificador pelo qual o parâmetro é conhecido. Exemplo: // Classe de numeros complexos class Complexo { double x=1, y=1; /* parte real e complexo, respectivamnte public double Re() { // retorna a parte real return x; } public double Im() { /retorna a parte imaginaria return y; }
  • 3. public set(double a, b){ x = a; y = b; } } public class Teste { public static void main(String args[]) { Complexo c = new Complexo(); c.set(3,2); System.out.println("z = (" + c.Re() + " + " + c.Im() + "i)"); } } Uma observação importante é que Java trata o objeto por referência e por isso, se o método modificar o objeto recebido como parâmetro, o objeto será modificado externamente. No entando, se o parâmetro recebido for tipo simples (int, double, char, float, etc), visto no tipo de dados, o método pode alterar o parâmetro a vontade que não influencia no valor externo.
  • 4. Para ilustrar, veja o exemplo a seguir: // classe de inteiro class inteiro { public int i; } // classe principal public class TestPar { // método que altera o valor do parametro int // este metodo deve ser static, pois sera chamado // pelo metodo main() que e static static void MudaInt(int k) { System.out.println("MudaInt: valor de k e " + k); k += 2; System.out.println("MudaInt: valor de k e apos incremento e " + k); } // método que altera o valor do parametro inteiro // este metodo deve ser static, pois sera chamado // pelo metodo main() que e static static void MudaInteiro(inteiro k) { System.out.println("MudaInteiro: valor de k e " + k.i); k.i += 2; System.out.println("MudaInteiro: valor de k e apos incremento e " + k.i); }
  • 5. // main() do TestPar public static void main(String args[]) { int i; inteiro n = new inteiro(); i = 2; n.i = 3; System.out.println("Valores originais:"); System.out.println("Valor de i e "+i); System.out.println("Valor de n e "+n.i); MudaInt(i); MudaInteiro(n); System.out.println("Valores apos a chamada dos metodos:"): System.out.println("Valor de i e "+i); System.out.println("Valor de n e "+n.i); } }
  • 6. A especificação public de uma variável dentro da classe, faz com que este variável seja acessado de qualquer lugar. Para especificar a variável i do objeto k, basta escrever k.i. Em geral, a variável [var] dentro do objeto [obj] do tipo classe e referenciado por [obj].[var]. Note o uso de especificação static para os métodos MudaInt() e MudaInteiro(). Esta especificação é necessaria, pois o método principal é static, e método static não pode chamar outros métodos da mesma classe que não seja static. O exemplo acima fornece a saída: Valores originais: Valor de i e 2 Valor de n e 3 Valores apos a chamada dos metodos: Valor de i e 2 Valor de n e 5
  • 7. Expressões são combinações ordenadas de valores, variáveis, operadores, parênteses e chamadas de métodos, permitindo realizar cálculos aritméticos, concatenar strings, comparar valores, realizar operações lógicas e manipular objetos. Sem expressões, uma linguagem de programação seria praticamente inútil. O resultado da avaliação de uma expressão é em geral um valor compatível com os tipos dos dados que foram operados. A maneira como uma expressão é avaliada (ou calculada) obdece as mesmas regras familiares da Matemática. A regra mais simples é a da associatividade. Quando um mesmo operador aparece mais de uma vez em uma expressão, como em a+b+c, então o operador mais à esquerda é avaliado primeiro e em seguida o da direita, e assim por diante. Esta seria então equivalente a ((a+b)+c).
  • 8. Precedência Há situações em que é necessário juntar operadores diferentes numa mesma expressão. Nesse caso a associatividade não se aplica mais trivialmente. Nesse caso como descobrir quais são os operandos de um operador, e quais operadores são avaliados primeiro? A resposta está na precedência dos operadores. Por exemplo, excrevendo a+b*c, somos levados naturalmente a multiplicar primeiro b com c e em seguida o somar o produto com a. Isto porque a multiplicação tem precedência sobre a adição. A precedência é então um conjunto de regras que permitem determinar quais são os operandos de um dado operador. Como a linguagem Java é rica em operadores, alguns pouco familiares, precisamos conhecer a precedência desses operadores. Na tabela a seguir, está indicada a pecedência dos operadores comumente usados em Java. A tabela apresenta os operadores ordenados da maior precedência para a menor. Observe que, existem alguns operadores que naturalmente não requerem preocupação quanto à sua precedência, devido a forma como são empregados.
  • 9. Operador Descrição [] () (tipo) Máxima precedência: separador, indexação, parâmetros, conversão de tipo + - ~ ! ++ -- Operador unário: positivo, negativo, negação (inversão bit a bit), não (lógico), incremento, decremento */% Operador unário: positivo, negativo, negação (inversão bit a bit), não (lógico), incremento, decremento +- Adição, subtração << >> >>> Translação (bit a bit) à esquerda, direita sinalizada, e direita não sinalizada (o bit de sinal será 0) < <= >= < Operador relacional: menor, menor ou igual, maior ou igual, maior == != Igualdade: igual, diferente
  • 10. & Operador lógico e bit a bit ^ Ou exclusivo (xor) bit a bit ! Operador lógico ou bit a bit && Operador lógico e condicional || Operador lógico ou condicional ?: Condicional: if-then-else compacto = op= Atribuição
  • 11. Conversão entre tipos de dados Ao trabalhar com expressões, salvo quando todos os operando são do mesmo tipo, é inevitável ter que considerar conversões entre um tipo de dado e outro. Há basicamente dois tipos de conversões de dados. O primeiro se refere a conversão implicita na qual, os dados são convertidos automaticamente, praticamente sem a preocupação do programador. Isto ocorre no caso de conversão de dados de tipo interio para real e de números para strings. Por exemplo: double x; int i = 20; x = i; Neste caso o valor do inteiro i é convertido automaticamente para um double antes de ser armazenado na variável x. As regras de conversão implícita empregadas pela linguagem Java são as seguintes:
  • 12. os operadores unários ++ e -- convertem um tipo byte e short são convertidos para um int, e os demais tipos não são afetados para os operadores binários, as regras são um pouco mais complicadas. Para operações envolvendo apenas inteiros, se um dos operandos for long, o outro será convertido para um long antes de realizar a operação, a qual resultará num long. Caso contrário, ambos os operandos são convertidos para um int e o resultado será também um int, a menos que o resultado da operação seja grande demais para caber num int. Nesse caso, o resultado será convertido para um long. Para operações envolvendo números de ponto flutuante, se um dos operadores for double, o outro será convertido para double antes de realizar a operação e o resultado será um double. Do contrário, ambos os operando são convertidos para float, e o resultado será um float. Algumas vezes, porém, as conversões implícitas não são suficientes para garantir um resultado esperado em uma expressão. Nesses cados, é importante podermos controlar precisamente a ocorrência de uma conversão de tipo. Isto pode ser feito por meio de um operador unário de conversão.
  • 13. Por exemplo: float eventos = 25.7; float dias = 7.2; x = (int)(eventos / dias); O resultado da expressão acima será precisamente 3, isto é a parte inteira de 25.7 dividido por 7.2. A diferença é que o operador de conversão de tipo (int) transformou o valor do quociente 25.7/7.2 em um inteiro, truncando as casas decimais. Note que o operador de conversão é um operador unário de maior precedência, logo, tivemos de colocar a divisão entre parênteses para garantir que o resultado dessa divisão formasse um único operando. A conversão entre quaisquer inteiros e entre inteiros e números de ponto flutuante é permitida. Porém, não é permitido converter dados do tipo boolean para nenhum outro tipo, enquanto a conversão entre objetos somente é permitida para classes parentes.
  • 14. Vejamos ainda um outro exemplo de utilização do operador de conversão de tipo: int a = 3; int b = 2; double x; x = a / b; Neste exemplo, desejamos que a variável x tenha o valor do quociente entre a e b. Como x é um dado de ponto flutuante, presume-se que o resultado desejado neste exemplo seja, digamos, x=3/2=1.5. Como porém os operandos da divisão são ambos inteiros, o resultado será também um inteiro, isto é, teremos x = 1.0. Para contornar essa situação, podemos converter explicitamente um dos operandos para um dado em ponto flutuante, fazendo: x = (double)a / b; Observamos que a conversão entre inteiros de maior comprimento para inteiros de menor comprimento pode causar perda de informação na representação dos valores. Caso o valor a ser convertido ocupe mais bits do que o tipo da variável recebendo esse valor, então o valor é truncado.
  • 15. int l = 393; byte b; b = l; System.out.println("O valor de b é " + b); Neste exemplo teremos como resultado: O Valor de b é -119 Por que isso aconteceu? Fica mais fácil de compreender isso se interpretarmos os números acima na notação binária. O número 393 é representado em base dois pelo número 110001001, que tem 9 bits de comprimento (omitimos os zeros não significativos). Como a variável b é do tipo byte e seu comprimento é de apenas 8 bits, teremos os 8 primeiros bits da direita para a esquerda atribuídos a b, isto é, 10001001, que representa o número -119 em base dois, na notação de complemento de dois..
  • 16. Fim Esta foi a ultima aula do curso básico de java, espero que o conteúdo passado tenha sido absorvido com clareza por todos, bons estudos e um forte abraço.