Java ::: Tratamento de Erros ::: Passos Iniciais |
Quais as diferenças entre checked exceptions, runtime exceptions e errors na linguagem Java?Quantidade de visualizações: 15918 vezes |
|
Checked exceptions (exceções verificadas), runtime exceptions (exceções de tempo de execução) e errors (erros) possuem diferenças importantes e devem ser entendidas perfeitamente para tirarmos maior proveito da plataforma Java. Entre as checked exceptions podemos citar FileNotFoundException, ClassNotFoundException e IOException. Agora veja: problemas tais como um arquivo não encontrado, uma classe não encontrada ou problemas com entrada e saída (talvez a impressora parou de responder ou a rede caiu) fogem completamente do domínio da aplicação. Tais exceções não são provocadas por código mal escrito ou mal testado. Desta forma, o Java força que todas as checked exceptions estejam em um bloco try...catch. Vamos ver se isso é verdade? Observe o trecho de código abaixo:
import java.io.*;
public class Estudos{
public static void main(String[] args){
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream("conteudo.txt")));
while(in.available() != 0)
System.out.print((char) in.readByte());
System.exit(0);
}
}
Se tentarmos compilar este código teremos o seguinte resultado:
Estudos.java:7: unreported exception
java.io.FileNotFoundException; must be caught
or declared to be thrown
new FileInputStream("conteudo.txt")));
^
Estudos.java:9: unreported exception
java.io.IOException; must be caught or
declared to be thrown
while(in.available() != 0)
^
Estudos.java:10: unreported exception
java.io.IOException; must be caught or
declared to be thrown
System.out.print((char) in.readByte());
^
3 errors
Aqui nós temos uma exceção FileNotFoundException e duas exceções IOException. Vamos nos concentrar na exceção gerada pelo construtor da classe FileInputStream. Folheando a documentação do Java nós encontramos: public FileInputStream(String name) throws FileNotFoundException É aqui que as coisas começam a ficar interessantes. Todos os métodos Java que podem atirar exceções verificadas são marcados com throws e o tipo de exceção lançada. A palavra throws é usada para transferir a responsabilidade do tratamento do erro para o chamador de tais métodos. Outro exemplo é o método readByte() da classe DataInputStream: public final byte readByte() throws IOException Para corrigir as exceções acima, só precisamos usar um bloco try...catch. Veja:
import java.io.*;
public class Estudos{
public static void main(String[] args){
try{
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream("conteudo.txt")));
while(in.available() != 0)
System.out.print((char) in.readByte());
}
catch(IOException e){
System.out.print(e.getMessage());
}
System.exit(0);
}
}
Exceções verificadas são todas aquelas que descendem de Exception mas não descendem de RuntimeException. As exceções de tempo de execução (runtime exceptions) são provocadas por código mal escrito ou mal testado, ou seja, são causadas por nós programadores. Entre estas exceções podemos citar ArithmeticException, IndexOutOfBoundsException e NoSuchElementException. De fato, um erro aritmético é responsabilidade do programador, pois cabe a este verificar se os valores estão dentro da faixa permitida por cada tipo de dados. Ao contrário das exceções verificadas, o compilador não força o uso do bloco try...catch para as runtime exceptions. De fato, isso é fácil de compreender, uma vez que tais exceções não deveriam jamais aparecer. Contudo, pode ser desejável usar o bloco try...catch em casos em que os valores de uma operação são definidos pelo usuário. Veja um exemplo:
import java.util.*;
public class Estudos{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Informe um inteiro: ");
int valor = in.nextInt();
System.out.print("Informe outro inteiro: ");
int valor2 = in.nextInt();
System.out.println("O resultado é " +
valor / valor2);
}
}
Se executarmos este código e informarmos o valor 0 para o segundo inteiro, teremos a seguinte exceção: Informe um inteiro: 4 Informe outro inteiro: 0 Exception in thread "main" java.lang.ArithmeticException: / by zero at Estudos.main(Estudos.java:13) Uma forma de corrigir isso é testando os valores informados para verificar suas faixas ou lançar uma exceção. Veja como usamos esta última alternativa:
import java.util.*;
public class Estudos{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Informe um inteiro: ");
int valor = in.nextInt();
System.out.print("Informe outro inteiro: ");
int valor2 = in.nextInt();
try{
System.out.println("O resultado é " +
valor / valor2);
}
catch(ArithmeticException e){
System.out.println("Uma exceção " +
"ArithmeticException ocorreu, " +
"possivelmente uma tentativa de " +
"divisão por zero.");
}
}
}
Agora se informarmos zero para o segundo inteiro, teremos: Informe um inteiro: 5 Informe outro inteiro: 0 Uma exceção ArithmeticException ocorreu, possivelmente uma tentativa de divisão por zero. As runtime exceptions (causadas por falha nossa, os programadores) descedem de java.lang.RuntimeException. Além das runtime exceptions e das checked exceptions, temos também os errors, que descedem de java.lang.Error e não devem jamais ser atirados ou tratados em blocos try...catch. Este tipo de erro é reservado para indicar problema na JVM. Entre tais erros temos OutOfMemoryError, que é lançado quando a Java Virtual Machine não consegue alocar um objeto porque sua fatia de memória esgotou e o Garbage Collector ainda não liberou mais memória. Não há razão para tratarmos isso em um bloco try...catch uma vez que, ao contrário de C++, a liberação de memória só é feita pelo GC. O melhor a fazer é deixar mesmo o programa ser encerrado e encontrar alternativas para a correção do problema. |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular porcentagem em C - Como efetuar cálculos de porcentagem em CQuantidade de visualizações: 29278 vezes |
|
Cálculos de porcentagens estão presentes em boa parte das aplicações que desenvolvemos. Porém, há momentos em que a mente trava e não conseguimos lembrar com clareza como estes cálculos são feitos, principalmente em C. Esta anotação tem o objetivo de ser uma fonte de pesquisa para os momentos em que suas habilidades matemáticas insistirem em continuar ocultas. Ex: 1 - Suponhamos que um produto que custe R$ 178,00 sofra um acréscimo de 15%. Qual o valor final do produto? Veja o código em C:
// Algoritmo que calcula porcentagem em C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// variáveis usadas na resolução do problema
float valor, percentual, valor_final;
valor = 178.00; // valor original
percentual = 15.0 / 100.0; // 15%
valor_final = valor + (percentual * valor);
// mostra o resultado
printf("O valor final do produto é: %f", valor_final);
// O resultado será 204,70
printf("\n\n");
system("PAUSE");
return 0;
}
Ex: 2 - Um produto, cujo valor original era de R$ 250,00, teve um desconto de 8%. Qual foi seu valor final? Veja o código em C:
// Algoritmo que calcula porcentagem em C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// variáveis usadas na resolução do problema
float valor, percentual, valor_final;
valor = 250.00; // valor original
percentual = 8.0 / 100.0; // 8%
valor_final = valor - (percentual * valor);
// mostra o resultado
printf("O valor final do produto é: %f", valor_final);
// O resultado será 230,00
printf("\n\n");
system("PAUSE");
return 0;
}
Ex: 3 - Em um concurso de perguntas e respostas, um jovem acertou 72 das 90 perguntas apresentadas. Qual foi a porcentagem de acertos? E a porcentagem de erros? Veja o código em C:
// Algoritmo que calcula porcentagem em C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// variáveis usadas na resolução do problema
float perguntas, acertos;
perguntas = 90.0;
acertos = 72.0;
// mostra a porcentagem de acertos
printf("Porcentagem de acertos: %f%%", ((acertos / perguntas) * 100));
// mostra a porcentagem de erros
printf("\nPorcentagem de erros: %f%%", ((perguntas - acertos) / perguntas) * 100);
// Os resultados serão 80% e 20%
printf("\n\n");
system("PAUSE");
return 0;
}
Ex: 4 - Um aparelho de CD foi adquirido por R$ 300,00 e revendido por R$ 340,00. Qual foi a porcentagem de lucro na transação? Veja o código em C:
// Algoritmo que calcula porcentagem em C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// variáveis usadas na resolução do problema
float valor_anterior, novo_valor, porcentagem_lucro;
valor_anterior = 300.0; // valor anterior
novo_valor = 340.0; // valor novo
// calcula a porcentagem de lucro
// efetua o cálculo
porcentagem_lucro = ((novo_valor * 100) / valor_anterior) - 100;
printf("A porcentagem de lucro foi de: %f%%", porcentagem_lucro);
// O resultado será 13,33
printf("\n\n");
system("PAUSE");
return 0;
}
Ex: 5 - Uma loja repassa 5% do lucro a seus vendedores. Se um produto custa R$ 70,00, qual o valor em reais repassado a um determinado vendedor? Veja o código em C:
// Algoritmo que calcula porcentagem em C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// variáveis usadas na resolução do problema
float valor, percentual, comissao;
valor = 70.0; // valor do produto
percentual = 5.0 / 100.0; // 5%
// calcula a comissão
comissao = percentual * valor;
// mostra o resultado
printf("O valor repassado ao vendedor é: %f", comissao);
// O resultado será 3,5
printf("\n\n");
system("PAUSE");
return 0;
}
|
PHP ::: Dicas & Truques ::: Strings e Caracteres |
Como remover os espaços em excesso de uma string e deixar apenas um espaço entre as palavras usando a função preg_replace() e expressões regulares do PHPQuantidade de visualizações: 2 vezes |
|
Nesta dica mostrarei como é possível tirar proveito da função preg_replace() da linguagem PHP para retirar os espaços em excesso de uma frase ou texto. Note o uso da função trim() para remover também os espaços antes e depois da frase ou texto. Veja o código completo para o exemplo:
<?php
// uma frase com excesso de espaços
// vamos deixar apenas um espaço entre as palavras
$frase = " Gosto muito de programar em PHP ";
$frase2 = trim(preg_replace('/\s\s+/',' ', $frase));
echo "Com espaços: " . $frase . "<br>";
echo "Sem espaços: " . $frase2;
?>
Ao executar este código PHP nós teremos o seguinte resultado: Com espaços: Gosto muito de programar em PHP Sem espaços: Gosto muito de programar em PHP Pode ser necessário você olhar no código fonte da página HTML para visualizar melhor o resultado. |
HTML5 ::: HTML5 + JavaScript ::: Canvas |
Como carregar uma imagem (ou foto) no objeto Canvas do HTML5Quantidade de visualizações: 2874 vezes |
O objeto Canvas do HTML5 nos permite carregar uma imagem ou foto em tempo de execução e desenhá-la em sua superfície. Para isso, comece criando um objeto Image para guardar a imagem temporariamente na memória:var imagem = new Image(); // vamos carregar a logo do nosso site imagem.src = "https://www.arquivodecodigos.com.br/logo.jpg"; O passo seguinte é adicionar um "ouvidor" de evento neste objeto Image para que ele nos avise quando a imagem estiver 100% carregada. Veja:
// vamos adicionar um "ouvidor" de evento no objeto Image
imagem.addEventListener('load', desenharImagem);
Pronto! Veja que agora, quando o evento load do objeto Image disparar, a função desenharImagem será chamada e a imagem será então desenhada no Canvas. Veja:
function desenharImagem(){
// obtemos uma referência ao elemento Canvas
var canvas = document.getElementById("canvas1");
// obtemos o contexto de desenho
var contexto = canvas.getContext("2d");
// e finalmente desenhamos a imagem
contexto.drawImage(imagem, 0, 0);
}
E aqui está o código completo para o exemplo:
<html>
<head>
<title>O objeto Canvas do HTML5</title>
</head>
<body>
<Canvas id="canvas1" width="500" height="350"></Canvas>
<script type="text/javascript">
var imagem = new Image();
// vamos carregar a logo do nosso site
imagem.src = "https://www.arquivodecodigos.com.br/logo.jpg";
// vamos adicionar um "ouvidor" de evento no objeto Image
imagem.addEventListener('load', desenharImagem);
function desenharImagem(){
// obtemos uma referência ao elemento Canvas
var canvas = document.getElementById("canvas1");
// obtemos o contexto de desenho
var contexto = canvas.getContext("2d");
// e finalmente desenhamos a imagem
contexto.drawImage(imagem, 0, 0);
}
</script>
</body>
</html>
Ao executar a página nós teremos o seguinte resultado: ![]() |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
|
GNU Octave - Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em GNU Octave |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






