Subido por Angel Antonio Maza Espinosa

Apuntes PROII

Anuncio
Normalmente, las constantes son de tipo “static”, porque queremos que la compartan todos los
objetos de la clase. Los métodos “static” son de la Clase, no de los objetos.
-El método ‘trim()’ elimina los espacios en blanco en ambos extremos del string.
-El método ‘String.valueOf(dni)’ convierte el parámetro pasado a String.
‘Integer.toString(dni)’
// este método tamb
String cuco=”Hola”;
int longitud=cuco.length();
-El método ‘charAt()’ devuelve la letra correspondiente a la posición que le pasemos. Devuelve
un char.
-El método equals() devuelve true si dos cadenas son iguales s2.equals( s3 )
*Un objeto de la clase String es inmutable, no puede cambiar aplicándole sus propios métodos.
Tienes que apuntarle al mismo objeto s = s.trim()
*Un objeto de la clase StringBuilder NO es inmutable, puede cambiar aplicándole sus propios
métodos.
-Los métodos estáticos no van a poder acceder a los atributos de cada objeto, porque
pertenece a la Clase como tal.
int x = Integer.parseInt("9");
double c = Double.parseDouble("5");
// estos métodos arrojan la excepcion
NumberFormatException e
EXCEPCIONES
Cuando se produce un error en un método, el método crea un objeto y lo pasa al sistema de
ejecución. El objeto (objeto excepción) contiene información sobre el error, incluyendo su tipo y
el estado del programa cuando se produjo el error.
Crear un objeto de excepción y pasárselo al sistema de ejecución se denomina lanzar una
excepción.
En las excepciones hay 2 procesos: se lanza el error y se captura para responder al error. El
‘lanzar’ lo va a hacer automáticamente el sistema o lo podemos lanzar nosotros también. La
captura la tenemos que programar.
Excepciones NO Controladas -> se lanzan automáticamente por el sistema, sin necesidad de
que hagamos nada (no hay necesidad de poner ‘throws’ en la cabecera del método, ni tampoco
lanzar un ‘throw new’).
Excepciones Controladas -> las lanzamos nosotros como programadores
Siempre, cuando se ha capturado una ‘excepción’ en un bloque catch, el programa continúa
después del catch que capturó la excepción, NO volvemos adonde se ha producido el error, o sea
las sentencias después del ‘throw new’ NO se ejecutan.
Normalmente en el ‘main’ siempre es bueno tener un ‘’try,catch” ; aunque se pueden tener en
los propios métodos también(échale un vistazo al proyecto).
Usando la estructura while sólo se pasa a ejecutar su contenido si se comprueba una condición lo
que puede ocurrir 0, 1 o más veces. Do While funciona de forma similar, sólo que nos aseguramos de que
el contenido sea ejecutado al menos una vez, es decir que aunque su condición no se cumpla, su
contenido se ejecuta.
String nombre;
// Java no los inicializa. Ni a “”, ni a 0 en caso de enteros
int numero;
int [] matriz=new int [4];
// Sin embargo Java inicializa todas las posiciones de
un array a 0.
String [] matrizz=new String [4];
// Los Strings, al ser objetos; Java los inicializa a ‘null’
Si yo invoco desde un método ( ejemplo: un método toString() ), otro método que puede
lanzar una excepción ( ejemplo: get( i ) ); puedo meter el try..catch en el método toString().
Para leer los valores del teclado, la profe crea un método :
‘ public static Coche leerCoche() {…} ’
Main.
en la misma clase donde se encuentra el método
En el método Main para crear el objeto hacemos:
Coche coche1 = leerCoche();
Si tengo declarada la plantilla del enum en una clase Coche
public class Coche {
public static enum Tipo { MONOVOLUMEN, FAMILIAR, COMPACTO, BERLINA ,
CAMIONETA };
…
…}
en el método main para usar el método values() de los enumerados tendría que poner
Coche.Tipo[] mamerto=Coche.Tipo.values();
A la hora de pedir datos en un formulario, me puede dar el número de la opción
correspondiente, teclear el string de la opción en sí, o teclear un carácter inicial de alguna de
las opciones. (Leer como número, o leer como cadena son más recomendables, pues en caso de
necesitar añadir más categorías al enumerado, no tendríamos que tocar más nada en el código).
El método ‘valueOf()’ de los enumerados te permite convertir un string en una de las
opciones del enumerado(pero el string debe coincidir exactamente con una de las opciones del
enumerado.)
Coche.Tipo ferrari;
ferrari=Coche.Tipo.valueOf("MONOVOLUMEN");
Puedo tratar diferentes excepciones localmente dentro de un método sin necesidad de
arrojarla fuera, pero para ello no puedo poner el ‘throws’ en la cabecera del método.
En las excepciones poner primero siempre las más específicas y abajo la más general. La
Clase Exception siempre irá al final, porque es la más general y engloba a todas las demás.
try{
leerNumeros();
//
5 , 6 , 1 , 0 , 2 , 3 = 17
}
catch (NumberFormatException e){
System.err.println("Formato Erróneo : " + e.getMessage());
}
catch (Exception e){
System.err.println("No puedes poner ni 0 ni número negativo : " +
e.getMessage());
}
IOException (hereda de Exception) -> es un tipo de excepción ‘Controlada’ , o sea que la
lanza el programador. Sirve para indicar que se ha producido una excepción de E/S.
String cad;
cad =String.format( "’%6.2f’\n", 5.6 );
System.out.print(cad);
*El bloque finally se ejecutará tanto si se tira la excepción como sino.
System.out.println("Hola Mundo");
//El ‘out’ y el ‘err’
System.err.println("Error Mundo");
//son objetos de tipo
//PrintStream
La filosofía es que si se captura el error(catch) ; le demos otra
oportunidad al usuario. El try-catch tendría que estar dentro de
un bucle ‘do while’ ó ‘while’.
&
evalúa ambos lados de la operación.
&& evalúa el lado izquierdo de la operación, si es true continúa y evalúa el lado derecho.
Si le pongo ‘final’ a un objeto (dígase de tipo StringBuilder, o de tipo array); no puedo hacer que ese objeto
apunte a otro, pero si podría modificarlo internamente o a través de sus métodos.
// el append también se puede encadenar
// toret.append("Cliente ").append(getNombre()).append(" con DNI ").append(getDni());
// en el throw new Exception puede haber un mensaje entre paréntesis
if (getNumClientes() >= maxClientes) {
throw new Exception ("inserta(): sobrepasa max.: " + maxClientes);
}
Importante: cuando un método llama a otro y este llama a otro y así hasta el último, si en este
último arrojo una excepción (‘throw new Exception()’), y quiero propagar la excepción hasta el
primer método inicial que empezó la llamada en cascada ; debo ir poniendo en la cabecera de cada
método intermedio ‘throws’ sin necesidad de try-catch. Así propagamos la excepción hasta el
método donde queramos tratarla con un try-catch.
En el proyecto, la profe reconduce todos las excepciones a tratarlas en el método public
void ler(); que es dónde se originan todas las llamadas a métodos que luego arrojan
excepciones.
-Podemos definir la herencia como la capacidad de crear clases que adquieren de
manera automática los miembros (atributos y métodos) de otras clases que ya existen, pudiendo al
mismo tiempo añadir atributos y métodos propios.
-A veces, un método de la superclase vale para todas las clases que heredan de ella, en ese
caso, las subclases no tienen que sobrescribir ese método en su cuerpo. Lo podrían invocar aunque
no aparezca declarada en el cuerpo de la subclase, ya que lo heredan de su clase padre.
- Una subclase puede sobrescribir un método de su clase padre, adaptándolo a sí misma.
-El constructor para la superclase construye la porción de la superclase del objeto, y el
constructor para la subclase construye la parte de la subclase.
-Los atributos declarados ‘private’ en la superclase, NO son accesibles desde las clases que
heredan de ella. Para acceder a ellas, debemos implementar ‘getters’ y ‘setters' públicos en la
superclase.
OJO: cualquier clase hereda de la clase Object de Java. Por eso una clase que nosotros
creemos puede usar el método ‘toString()’ sin necesidad de haber reescrito el método. Pero claro,
te devolverá algo ininteligible, devolverá una especie de puntero a un espacio de memoria. Por eso
se reescribe en cada clase, para que se adapte a cada clase.
Enlace tardío en el UPCASTING  es cuando habiendo convertido los objetos de la subclase a objetos de la
superclase: ej:
ArbolGeneral <Integer> arbol = new EnlazadoArbolGeneral <Integer>(-1);
El compilador sabe distinguir cuál es el método sobrescrito que le corresponde a cada objeto en dependencia del
tipo de subclase que es, aunque este objeto se trate como superclase.
Si bien siempre es seguro tratar de apuntar a una subclase con una referencia a la superclase, lo
contrario no lo es (DOWNCASTING). Pero puede ser útil saber si una figura general es un círculo o un
rectángulo:
if ( f instanceof Rectangulo ) {
System.out.format( "%s, superficie: %.2f\n",f, f.calculaArea() );
};
Una clase que hereda de otra no necesariamente tiene que sobrescribir todos los métodos de su clase
padre. Puede ser que algunos métodos le sirvan tal cual están implementados en la clase padre. O sea que
puede usar métodos de su clase padre sin necesidad de reescribirlos si estos le sirven a su propósito.
-Si no quiero que se creen instancias de la superclase (‘Figura’), sólo de las subclases
(‘Rectángulo’, ’Círculo’, etc.) tengo que declarar esa superclase como abstracta
(‘abstract class Figura{…}’).
OJO - una clase abstracta puede tener atributos y métodos, NO es una interface
HE AQUÍ CÓMO SE USA EL CONSTRUCTOR super() que es de la superclase.
El enlace dinámico lo usarán los métodos de las diferentes clases que heredan de la misma
superclase, que tienen el mismo nombre.
Ej: los
@Override
public double calculaArea(){…}
// de cada figura en concreto que hereda de la superclase Figura
los otros métodos propios de cada subclase se pueden poner como ‘public final’.
En la composición hay dos opciones. Si una clase ‘Publicación’ tiene como atributo un objeto de la clase ‘Autor’;
podría pasarle al constructor de ‘Publicación’ una referencia externa de un autor ya creado en el método ‘Main’ , o la
opción menos convencional -> crearlo dentro del propio constructor sin que haga falta incluir un campo Autor en la
cabecera del constructor.
OJO: si inicializas un ArrayList así --- ArrayList<Integer> a=new ArrayList<>(10);
No significa que el ‘a.size ()’ te va a dar 10.
El ‘.size()’ dará la cantidad de elementos que le añadas.
a.add(1);
a.add(2);
//// 3 elementos en este caso
a.add(3);
Por cierto el ArrayList tiene ‘toString()’ ,
para que dejes de poner ‘for’ para mostrar todos
los elementos.
El ‘add’ en ArrayList, añade un elemento
corriendo un espacio a los elementos que están a
su derecha. El ‘set’ es el que sirve para modificar.
Descargar