Jva Excepciones: Fin
This commit is contained in:
parent
0f1c8e3e18
commit
c7776a9137
@ -0,0 +1,26 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class Administrador extends Funcionario implements Autenticable {
|
||||
|
||||
private AutenticacionUtil util;
|
||||
|
||||
public Administrador() {
|
||||
this.util = new AutenticacionUtil();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getBonificacion() {
|
||||
return this.getSalario();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClave(String clave) {
|
||||
this.util.setClave(clave);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean inicioSesion(String clave) {
|
||||
return this.util.inicioSesion(clave);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public interface Autenticable {
|
||||
|
||||
public void setClave(String clave);
|
||||
|
||||
public boolean inicioSesion(String clave);
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class AutenticacionUtil {
|
||||
|
||||
private String clave;
|
||||
|
||||
public boolean inicioSesion(String clave) {
|
||||
return this.clave == clave;
|
||||
}
|
||||
|
||||
public void setClave(String clave) {
|
||||
this.clave = clave;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class Cliente implements Autenticable {
|
||||
private String nombre;
|
||||
private String documento;
|
||||
private String telefono;
|
||||
private AutenticacionUtil util;
|
||||
|
||||
public Cliente() {
|
||||
this.util = new AutenticacionUtil();
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
|
||||
public String getDocumento() {
|
||||
return documento;
|
||||
}
|
||||
|
||||
public void setDocumento(String documento) {
|
||||
this.documento = documento;
|
||||
}
|
||||
|
||||
public String getTelefono() {
|
||||
return telefono;
|
||||
}
|
||||
|
||||
public void setTelefono(String telefono) {
|
||||
this.telefono = telefono;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClave(String clave) {
|
||||
this.util.setClave(clave);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean inicioSesion(String clave) {
|
||||
return this.util.inicioSesion(clave);
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class Contador extends Funcionario {
|
||||
|
||||
@Override
|
||||
public double getBonificacion() {
|
||||
return 200.0;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class ControlBonificacion {
|
||||
private double suma_bonific;
|
||||
|
||||
public double registrarSalario(Funcionario funcionario) {
|
||||
System.out.println(this.suma_bonific);
|
||||
return this.suma_bonific += funcionario.getBonificacion();
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public abstract class Cuenta {
|
||||
protected double saldo;
|
||||
private int agencia;
|
||||
private int numero;
|
||||
private Cliente titular = new Cliente();
|
||||
private static int contador = 0;
|
||||
|
||||
public Cuenta(int agencia, int numero) {
|
||||
if (agencia <= 0) {
|
||||
System.out.println("No se permiten valores negativos");
|
||||
this.agencia = 1;
|
||||
} else {
|
||||
this.agencia = agencia;
|
||||
}
|
||||
this.numero = numero;
|
||||
contador++;
|
||||
System.out.println("Cuentas creadas: "+contador);
|
||||
}
|
||||
|
||||
public abstract void depositar(double valorDeposito);
|
||||
|
||||
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
|
||||
if (this.saldo < valorRetiro) {
|
||||
throw new SaldoInsuficienteExcepction("Saldo insuficiente");
|
||||
}
|
||||
this.saldo -= valorRetiro;
|
||||
}
|
||||
|
||||
public boolean transferir(double montoTransferencia, Cuenta cuenta) throws SaldoInsuficienteExcepction{
|
||||
if (this.saldo >= montoTransferencia) {
|
||||
try {
|
||||
this.retirar(montoTransferencia);
|
||||
} catch (SaldoInsuficienteExcepction e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
cuenta.depositar(montoTransferencia);
|
||||
return true;
|
||||
} else {
|
||||
throw new SaldoInsuficienteExcepction("Saldo insuficiente\nSaldo : $ "+
|
||||
this.saldo+"\nRetiro: $ "+montoTransferencia);
|
||||
}
|
||||
}
|
||||
|
||||
public double getSaldo() {
|
||||
return this.saldo;
|
||||
}
|
||||
|
||||
public int getAgencia(){
|
||||
return this.agencia;
|
||||
}
|
||||
|
||||
public void setNumero(int numero){
|
||||
this.numero = numero;
|
||||
}
|
||||
|
||||
public int getNumero(){
|
||||
return this.numero;
|
||||
}
|
||||
|
||||
public void setTitular(Cliente titular){
|
||||
this.titular = titular;
|
||||
}
|
||||
|
||||
public Cliente getTitular(){
|
||||
return titular;
|
||||
}
|
||||
|
||||
public static int getContador(){
|
||||
return Cuenta.contador;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class CuentaAhorro extends Cuenta {
|
||||
public CuentaAhorro(int agencia, int numero) {
|
||||
super(agencia, numero);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void depositar(double valorDeposito) {
|
||||
this.saldo += valorDeposito;
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class CuentaCorriente extends Cuenta {
|
||||
public CuentaCorriente(int agencia, int numero) {
|
||||
super(agencia, numero);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
|
||||
double comision = 0.2;
|
||||
System.out.println("Ejecutando retiro sobreescrito");
|
||||
super.retirar( valorRetiro + comision );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void depositar(double valorDeposito) {
|
||||
this.saldo += valorDeposito;
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public abstract class Funcionario {
|
||||
|
||||
private String nombre;
|
||||
private String documento;
|
||||
private Double salario;
|
||||
private int tipo;
|
||||
|
||||
public Funcionario() {
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
public String getDocumento() {
|
||||
return documento;
|
||||
}
|
||||
public void setDocumento(String documento) {
|
||||
this.documento = documento;
|
||||
}
|
||||
public Double getSalario() {
|
||||
return salario;
|
||||
}
|
||||
public void setSalario(Double salario) {
|
||||
this.salario = salario;
|
||||
}
|
||||
|
||||
public int getTipo() {
|
||||
return tipo;
|
||||
}
|
||||
|
||||
public void setTipo(int tipo) {
|
||||
this.tipo = tipo;
|
||||
}
|
||||
|
||||
public abstract double getBonificacion();
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class Gerente extends Funcionario implements Autenticable {
|
||||
|
||||
private AutenticacionUtil util;
|
||||
|
||||
public Gerente() {
|
||||
this.util = new AutenticacionUtil();
|
||||
}
|
||||
|
||||
//public void setNombre(String nombre){
|
||||
// super.setNombre(nombre);
|
||||
//}
|
||||
|
||||
public double getBonificacion() {
|
||||
return super.getSalario() + (this.getSalario() * 0.5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClave(String clave) {
|
||||
this.util.setClave(clave);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean inicioSesion(String clave) {
|
||||
return this.util.inicioSesion(clave);
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class SaldoInsuficienteExcepction extends Exception {
|
||||
public SaldoInsuficienteExcepction(String mensaje) {
|
||||
super(mensaje);
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class SistemaInterno {
|
||||
|
||||
private String clave = "12345";
|
||||
|
||||
public boolean autentica(Autenticable autenticable) {
|
||||
|
||||
boolean autorizado = autenticable.inicioSesion(clave);
|
||||
if (autorizado) {
|
||||
System.out.println("Sesion iniciada");
|
||||
return true;
|
||||
} else {
|
||||
System.out.println("No autorizado");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package bytebank_excep;
|
||||
|
||||
public class TestCuentaExceptionSaldo {
|
||||
public static void main(String[] args) {
|
||||
Cuenta ca = new CuentaAhorro(11, 22);
|
||||
System.out.println("Deposito 1000");
|
||||
ca.depositar(1000);
|
||||
try {
|
||||
System.out.println("Retirando 1000");
|
||||
ca.retirar(1000);
|
||||
System.out.println("Retiro OK");
|
||||
|
||||
//System.out.println("Retirando 1");
|
||||
//ca.retirar(1);
|
||||
//System.out.println("Retiro OK");
|
||||
|
||||
Cuenta cc = new CuentaCorriente(11, 33);
|
||||
cc.depositar(1000);
|
||||
cc.transferir(500, ca);
|
||||
cc.transferir(5000, ca);
|
||||
System.out.println(ca.getSaldo());
|
||||
System.out.println(cc.getSaldo());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} catch (SaldoInsuficienteExcepction e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("Fin Programa");
|
||||
}
|
||||
}
|
2
008_java_oo/eclipse/bytebank_excep/src/module-info.java
Normal file
2
008_java_oo/eclipse/bytebank_excep/src/module-info.java
Normal file
@ -0,0 +1,2 @@
|
||||
module bytebank_excep {
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package pila_ejecucion;
|
||||
|
||||
public class Conexion implements AutoCloseable {
|
||||
|
||||
public Conexion() {
|
||||
System.out.println("Abriendo conexion");
|
||||
//throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void leerDatos() {
|
||||
System.out.println("Recibiendo datos");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void cerrar() {
|
||||
System.out.println("Cerrando conexion");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
cerrar();
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package pila_ejecucion;
|
||||
|
||||
public class Cuenta {
|
||||
void deposita() throws MiExcepcion2 {
|
||||
throw new MiExcepcion2();
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package pila_ejecucion;
|
||||
|
||||
public class TestConexion {
|
||||
public static void main(String[] args) throws Exception {
|
||||
try (Conexion con = new Conexion()){
|
||||
con.leerDatos();
|
||||
} catch (IllegalStateException e) {
|
||||
System.out.println("Ejecutando catch");
|
||||
e.printStackTrace();
|
||||
}
|
||||
/*
|
||||
Conexion con = null;
|
||||
try {
|
||||
con = new Conexion();
|
||||
con.leerDatos();
|
||||
} catch (IllegalStateException e) {
|
||||
System.out.println("Ejecutando catch");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
System.out.println("Ejecutando finally");
|
||||
if (con != null) {
|
||||
con.cerrar();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package pila_ejecucion;
|
||||
|
||||
public class TestCuentaExceptionChecked {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Cuenta cuenta = new Cuenta();
|
||||
try {
|
||||
System.out.println("en try");
|
||||
cuenta.deposita();
|
||||
} catch (MiExcepcion2 ex) {
|
||||
System.out.println("en catch");
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -253,3 +253,203 @@ comprueba obligatoriamente y las que no.
|
||||
- Los segundos están **unchecked** y se crean como descendientes de
|
||||
**RuntimeException**.
|
||||
|
||||
## Ejemplo de manejo de checked exception
|
||||
|
||||
|
||||
Clase
|
||||
[SaldoInsuficienteExcepction.java](./eclipse/bytebank_excep/src/bytebank_excep/SaldoInsuficienteExcepction.java)
|
||||
, proyecto [bytebank](./eclipse/bytebank_excep/src/bytebank_excep/)
|
||||
|
||||
```java
|
||||
public class SaldoInsuficienteExcepction extends Exception {
|
||||
public SaldoInsuficienteExcepction(String mensaje) {
|
||||
super(mensaje);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Clase [Cuenta.java](./eclipse/bytebank_excep/src/bytebank_excep/Cuenta.java)
|
||||
|
||||
```java
|
||||
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
|
||||
if (this.saldo < valorRetiro) {
|
||||
throw new SaldoInsuficienteExcepction("Saldo insuficiente");
|
||||
}
|
||||
this.saldo -= valorRetiro;
|
||||
}
|
||||
|
||||
public boolean transferir(double montoTransferencia, Cuenta cuenta) throws SaldoInsuficienteExcepction{
|
||||
if (this.saldo >= montoTransferencia) {
|
||||
try {
|
||||
this.retirar(montoTransferencia);
|
||||
} catch (SaldoInsuficienteExcepction e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
cuenta.depositar(montoTransferencia);
|
||||
return true;
|
||||
} else {
|
||||
throw new SaldoInsuficienteExcepction("Saldo insuficiente\nSaldo : $ "+
|
||||
this.saldo+"\nRetiro: $ "+montoTransferencia);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Clase [CuentaCorriente.java](./eclipse/bytebank_excep/src/bytebank_excep/CuentaCorriente.java)
|
||||
|
||||
```java
|
||||
@Override
|
||||
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
|
||||
double comision = 0.2;
|
||||
System.out.println("Ejecutando retiro sobreescrito");
|
||||
super.retirar( valorRetiro + comision );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void depositar(double valorDeposito) {
|
||||
this.saldo += valorDeposito;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Test
|
||||
[TestCuentaExceptionSaldo.java](./eclipse/bytebank_excep/src/bytebank_excep/TestCuentaExceptionSaldo.java)
|
||||
|
||||
```java
|
||||
public class TestCuentaExceptionSaldo {
|
||||
public static void main(String[] args) {
|
||||
Cuenta ca = new CuentaAhorro(11, 22);
|
||||
System.out.println("Deposito 1000");
|
||||
ca.depositar(1000);
|
||||
try {
|
||||
System.out.println("Retirando 1000");
|
||||
ca.retirar(1000);
|
||||
System.out.println("Retiro OK");
|
||||
|
||||
//System.out.println("Retirando 1");
|
||||
//ca.retirar(1);
|
||||
//System.out.println("Retiro OK");
|
||||
|
||||
Cuenta cc = new CuentaCorriente(11, 33);
|
||||
cc.depositar(1000);
|
||||
cc.transferir(500, ca);
|
||||
cc.transferir(5000, ca);
|
||||
System.out.println(ca.getSaldo());
|
||||
System.out.println(cc.getSaldo());
|
||||
} catch (SaldoInsuficienteExcepction e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("Fin Programa");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Salida del programa con mensaje personalizado del error `Saldo: $499.8` y
|
||||
`Retiro: $5000.0`, incluyendo valores de variables
|
||||
|
||||
```java
|
||||
Deposito 1000
|
||||
Retirando 1000
|
||||
Retiro OK
|
||||
Cuentas creadas: 2
|
||||
Ejecutando retiro sobreescrito
|
||||
bytebank_excep.SaldoInsuficienteExcepction: Saldo insuficiente
|
||||
Saldo : $ 499.8
|
||||
Retiro: $ 5000.0
|
||||
at bytebank_excep/bytebank_excep.Cuenta.transferir(Cuenta.java:41)
|
||||
at bytebank_excep/bytebank_excep.TestCuentaExceptionSaldo.main(TestCuentaExceptionSaldo.java:20)
|
||||
Fin Programa
|
||||
```
|
||||
|
||||
### finally
|
||||
|
||||
[Conexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Conexion.java)
|
||||
|
||||
```java
|
||||
public class Conexion {
|
||||
|
||||
public Conexion() {
|
||||
System.out.println("Abriendo conexion");
|
||||
//throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void leerDatos() {
|
||||
System.out.println("Recibiendo datos");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void cerrar() {
|
||||
System.out.println("Cerrando conexion");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[TestConexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/TestConexion.java)
|
||||
|
||||
```java
|
||||
public class TestConexion {
|
||||
public static void main(String[] args) {
|
||||
Conexion con = null;
|
||||
try {
|
||||
con = new Conexion();
|
||||
con.leerDatos();
|
||||
} catch (IllegalStateException e) {
|
||||
System.out.println("Ejecutando catch");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
System.out.println("Ejecutando finally");
|
||||
if (con != null) {
|
||||
con.cerrar();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## try with resources
|
||||
|
||||
Similar a los ***context managers*** de Python. Se usan con **recursos**, donde
|
||||
la clase instanciada implementa la interfáz `AutoCloseable`, que requiere
|
||||
implementar un método `close()`.
|
||||
|
||||
[Conexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Conexion.java)
|
||||
|
||||
```java
|
||||
public class Conexion implements AutoCloseable {
|
||||
|
||||
public Conexion() {
|
||||
System.out.println("Abriendo conexion");
|
||||
//throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void leerDatos() {
|
||||
System.out.println("Recibiendo datos");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
public void cerrar() {
|
||||
System.out.println("Cerrando conexion");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
cerrar();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[TestConexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/TestConexion.java)
|
||||
|
||||
```java
|
||||
public class TestConexion {
|
||||
public static void main(String[] args) throws Exception {
|
||||
try (Conexion con = new Conexion()){
|
||||
con.leerDatos();
|
||||
} catch (IllegalStateException e) {
|
||||
System.out.println("Ejecutando catch");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -31,3 +31,6 @@ primoridiales en programación con Javascript.
|
||||
- [Java](./008_java_oo/README.md) Orientado a Objetos
|
||||
- [Primeros pasos](./008_java_oo/primeros_pasos.md)
|
||||
- [Orientación a objetos](./008_java_oo/orientacion_obj.md)
|
||||
- [Herencia e Interfaces](./008_java_oo/herencia_interfaces.md)
|
||||
- Un poco sobre [Enums y Annotations](./008_java_oo/enums_anotaciones_java.md)
|
||||
- [Excepciones](./008_java_oo/excepciones.md)
|
||||
|
Loading…
Reference in New Issue
Block a user