Java PDF
Java PDF
Java - Inicio
Java - Descripción general
Java - Configuración del entorno
Java: sintaxis básica
Java - Objeto y clases
Java - Constructores
Java - Tipos de datos básicos
Java - Tipos de variables
Java - Tipos de modificadores
Java - Operadores básicos
Java - Control de bucle
Java - Toma de decisiones
Java - Números
Java - Personajes
Java - Cuerdas
Java: matrices
Java - Fecha y hora
Java - Expresiones regulares
Java - Métodos
Java - Archivos y E / S
Java - Excepciones
Java - Clases internas
Orientado a objetos Java
Java - Herencia
Java: anulación
Java - Polimorfismo
Java - Abstracción
Java - Encapsulación
Java - Interfaces
Java - Paquetes
Java avanzado
Java - Estructuras de datos
Java - Colecciones
Java - Genéricos
Java - Serialización
Java - Redes
Java - Envío de correo electrónico
Java - Multithreading
Java - Conceptos básicos de Applet
Java - Documentación
Java - Descripción general
El lenguaje de programación Java fue desarrollado originalmente por Sun
Microsystems, que fue iniciado por James Gosling y lanzado en 1995 como
componente principal de la plataforma Java de Sun Microsystems (Java 1.0
[J2SE]).
La última versión de Java Standard Edition es Java SE 8. Con el avance de
Java y su gran popularidad, se crearon múltiples configuraciones para
adaptarse a varios tipos de plataformas. Por ejemplo: J2EE para aplicaciones
empresariales, J2ME para aplicaciones móviles.
Las nuevas versiones de J2 fueron renombradas como Java SE, Java EE y
Java ME respectivamente. Se garantiza que Java será Write Once, Run
Anywhere.
Java es -
Orientado a objetos : en Java, todo es un objeto. Java se puede extender
fácilmente ya que se basa en el modelo de objetos.
Independiente de la plataforma : a diferencia de muchos otros lenguajes de
programación, incluidos C y C ++, cuando se compila Java, no se compila en una
máquina específica de la plataforma, sino en un código de bytes independiente de
la plataforma. Este código de bytes se distribuye a través de la web y es
interpretado por la máquina virtual (JVM) en cualquier plataforma en la que se
ejecute.
Simple : Java está diseñado para ser fácil de aprender. Si comprende el concepto
básico de OOP Java, sería fácil de dominar.
Seguro : con la función segura de Java, permite desarrollar sistemas libres de
virus y manipulaciones. Las técnicas de autenticación se basan en el cifrado de
clave pública.
Arquitectura neutral : el compilador de Java genera un formato de archivo de
objeto neutral de arquitectura, que hace que el código compilado sea ejecutable
en muchos procesadores, con la presencia del sistema de tiempo de ejecución
Java.
Portable : ser neutral en cuanto a la arquitectura y no tener aspectos
dependientes de la implementación de la especificación hace que Java sea
portátil. El compilador en Java está escrito en ANSI C con un límite de portabilidad
limpio, que es un subconjunto POSIX.
Robusto : Java se esfuerza por eliminar las situaciones propensas a errores
enfatizando principalmente la verificación de errores en tiempo de compilación y la
verificación de tiempo de ejecución.
Multiproceso : con la característica multiproceso de Java, es posible escribir
programas que pueden realizar muchas tareas simultáneamente. Esta
característica de diseño permite a los desarrolladores construir aplicaciones
interactivas que pueden ejecutarse sin problemas.
Interpretado : el código de bytes de Java se traduce sobre la marcha a las
instrucciones de la máquina nativa y no se almacena en ningún lugar. El proceso
de desarrollo es más rápido y analítico ya que la vinculación es un proceso
incremental y liviano.
Descarga más libros de programación GRATIS click aquí
Download more FREE programming books click here
Ejemplo
Demo en vivo
public class MyFirstJavaProgram {
Salida
Sintaxis Básica
Acerca de los programas Java, es muy importante tener en cuenta los
siguientes puntos.
Mayúsculas y minúsculas: Java distingue entre mayúsculas y minúsculas, lo que
significa que los identificadores Hello y hello tendrían un significado diferente en
Java.
Nombres de clase : para todos los nombres de clase, la primera letra debe estar
en mayúscula. Si se utilizan varias palabras para formar un nombre de la clase, la
primera letra de cada palabra interna debe estar en mayúscula.
Ejemplo: clase MyFirstJavaClass
Nombres de métodos : todos los nombres de métodos deben comenzar con una
letra minúscula. Si se usan varias palabras para formar el nombre del método,
entonces la primera letra de cada palabra interna debe estar en mayúscula.
Ejemplo: public void myMethodName ()
Nombre del archivo de programa : el nombre del archivo de programa debe
coincidir exactamente con el nombre de la clase.
Al guardar el archivo, debe guardarlo usando el nombre de la clase (Recuerde
que Java distingue entre mayúsculas y minúsculas) y agregue '.java' al final del
nombre (si el nombre del archivo y el nombre de la clase no coinciden, su
programa no se compilará )
Ejemplo: Suponga que 'MyFirstJavaProgram' es el nombre de la clase. Entonces
el archivo debe guardarse como 'MyFirstJavaProgram.java'
public static void main (String args []) : el procesamiento del programa Java
comienza desde el método main (), que es una parte obligatoria de cada
programa Java.
Identificadores Java
Todos los componentes de Java requieren nombres. Los nombres utilizados
para clases, variables y métodos se denominan identificadores .
En Java, hay varios puntos para recordar acerca de los identificadores. Son
los siguientes:
Todos los identificadores deben comenzar con una letra (de la A a la Z o de la a a
la z), un carácter de moneda ($) o un guión bajo (_).
Después del primer carácter, los identificadores pueden tener cualquier
combinación de caracteres.
Una palabra clave no se puede utilizar como identificador.
Lo más importante, los identificadores distinguen entre mayúsculas y minúsculas.
Ejemplos de identificadores legales: edad, $ salario, _valor, __1_valor.
Ejemplos de identificadores ilegales: 123abc, -salary.
Modificadores Java
Al igual que otros lenguajes, es posible modificar clases, métodos, etc.,
utilizando modificadores. Hay dos categorías de modificadores:
Modificadores de acceso : predeterminado, público, protegido, privado
Modificadores sin acceso : final, abstracto, estricto fp
Buscaremos más detalles sobre modificadores en la siguiente sección.
Variables Java
Los siguientes son los tipos de variables en Java:
Variables Locales
Variables de clase (variables estáticas)
Variables de instancia (variables no estáticas)
Matrices Java
Las matrices son objetos que almacenan múltiples variables del mismo
tipo. Sin embargo, una matriz en sí misma es un objeto en el
montón. Veremos cómo declarar, construir e inicializar en los próximos
capítulos.
Enums de Java
Las enumeraciones se introdujeron en Java 5.0. Las enumeraciones
restringen una variable para tener uno de los pocos valores predefinidos. Los
valores en esta lista enumerada se denominan enumeraciones.
Con el uso de enumeraciones es posible reducir la cantidad de errores en su
código.
Por ejemplo, si consideramos una aplicación para una tienda de jugos frescos,
sería posible restringir el tamaño del vidrio a pequeño, mediano y grande. Esto
aseguraría que no permitiría a nadie ordenar cualquier tamaño que no sea
pequeño, mediano o grande.
Ejemplo
Demo en vivo
class FreshJuice {
enum FreshJuiceSize{ SMALL, MEDIUM, LARGE }
FreshJuiceSize size;
}
Salida
Size: MEDIUM
Nota : las enumeraciones se pueden declarar como propias o dentro de una
clase. Los métodos, las variables y los constructores también se pueden
definir dentro de las enumeraciones.
volatile while
Comentarios en Java
Java admite comentarios de una o varias líneas muy similares a C y C ++. El
compilador de Java ignora todos los caracteres disponibles dentro de
cualquier comentario.
Ejemplo
Demo en vivo
public class MyFirstJavaProgram {
Salida
Hello World
Herencia
En Java, las clases se pueden derivar de las clases. Básicamente, si necesita
crear una nueva clase y aquí ya hay una clase que tiene parte del código que
necesita, entonces es posible derivar su nueva clase del código ya existente.
Este concepto le permite reutilizar los campos y métodos de la clase existente
sin tener que volver a escribir el código en una nueva clase. En este
escenario, la clase existente se llama superclase y la clase derivada se
llama subclase .
Interfaces
En lenguaje Java, una interfaz se puede definir como un contrato entre objetos
sobre cómo comunicarse entre sí. Las interfaces juegan un papel vital cuando
se trata del concepto de herencia.
Una interfaz define los métodos que debe usar una clase derivada
(subclase). Pero la implementación de los métodos depende totalmente de la
subclase.
Polimorfismo
Herencia
Encapsulación
Abstracción
Clases
Objetos
Ejemplo
Método
Paso de mensajes
En este capítulo, analizaremos los conceptos: clases y objetos.
Objeto : los objetos tienen estados y comportamientos. Ejemplo: un perro tiene
estados (color, nombre, raza y comportamientos), menea la cola, ladra, come. Un
objeto es una instancia de una clase.
Clase : una clase se puede definir como una plantilla / plano que describe el
comportamiento / estado que admite el objeto de su tipo.
Objetos en Java
Veamos ahora en profundidad qué son los objetos. Si consideramos el mundo
real, podemos encontrar muchos objetos a nuestro alrededor, automóviles,
perros, humanos, etc. Todos estos objetos tienen un estado y un
comportamiento.
Si consideramos un perro, entonces su estado es: nombre, raza, color y el
comportamiento es: ladrar, menear la cola, correr.
Si compara el objeto de software con un objeto del mundo real, tienen
características muy similares.
Los objetos de software también tienen un estado y un comportamiento. El
estado de un objeto de software se almacena en campos y el comportamiento
se muestra a través de métodos.
Entonces, en el desarrollo de software, los métodos operan en el estado
interno de un objeto y la comunicación de objeto a objeto se realiza a través
de métodos.
Clases en Java
Una clase es un plano a partir del cual se crean objetos individuales.
A continuación se muestra una muestra de una clase.
Ejemplo
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
Constructores
Cuando se discute sobre las clases, uno de los subtemas más importantes
serían los constructores. Cada clase tiene un constructor. Si no escribimos
explícitamente un constructor para una clase, el compilador de Java construye
un constructor predeterminado para esa clase.
Cada vez que se crea un nuevo objeto, se invocará al menos un
constructor. La regla principal de los constructores es que deben tener el
mismo nombre que la clase. Una clase puede tener más de un constructor.
El siguiente es un ejemplo de un constructor:
Ejemplo
Crear un objeto
Como se mencionó anteriormente, una clase proporciona los planos para los
objetos. Básicamente, un objeto se crea a partir de una clase. En Java, la
nueva palabra clave se usa para crear nuevos objetos.
Hay tres pasos al crear un objeto desde una clase:
Declaración : una declaración de variable con un nombre de variable con un tipo
de objeto.
Instanciación : la palabra clave 'nueva' se usa para crear el objeto.
Inicialización : la palabra clave 'nueva' es seguida por una llamada a un
constructor. Esta llamada inicializa el nuevo objeto.
El siguiente es un ejemplo de creación de un objeto:
Ejemplo
Demo en vivo
public class Puppy {
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
Salida
Ejemplo
Este ejemplo explica cómo acceder a las variables de instancia y los métodos
de una clase.
Demo en vivo
public class Puppy {
int puppyAge;
Salida
Paquete Java
En palabras simples, es una forma de categorizar las clases y las
interfaces. Al desarrollar aplicaciones en Java, se escribirán cientos de clases
e interfaces, por lo tanto, categorizar estas clases es imprescindible y hace la
vida mucho más fácil.
Declaraciones de Importación
En Java, si se proporciona un nombre completo, que incluye el paquete y el
nombre de la clase, el compilador puede localizar fácilmente el código fuente o
las clases. La declaración de importación es una forma de proporcionar la
ubicación adecuada para que el compilador encuentre esa clase en particular.
Por ejemplo, la siguiente línea le pediría al compilador que cargue todas las
clases disponibles en el directorio java_installation / java / io -
import java.io.*;
Ejemplo
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
Ahora, compile ambas clases y luego ejecute EmployeeTest para ver el
resultado de la siguiente manera:
Salida
Java - Constructores
Un constructor inicializa un objeto cuando se crea. Tiene el mismo nombre que
su clase y es sintácticamente similar a un método. Sin embargo, los
constructores no tienen un tipo de retorno explícito.
Normalmente, usará un constructor para dar valores iniciales a las variables
de instancia definidas por la clase, o para realizar cualquier otro procedimiento
de inicio requerido para crear un objeto completamente formado.
Todas las clases tienen constructores, ya sea que defina uno o no, porque
Java proporciona automáticamente un constructor predeterminado que
inicializa todas las variables miembro a cero. Sin embargo, una vez que define
su propio constructor, el constructor predeterminado ya no se usa.
Sintaxis
A continuación se muestra la sintaxis de un constructor:
class ClassName {
ClassName() {
}
}
Ejemplo
Public class MyClass {
Int num;
MyClass() {
num = 100;
}
}
Constructores parametrizados
Muy a menudo, necesitará un constructor que acepte uno o más
parámetros. Los parámetros se agregan a un constructor de la misma manera
que se agregan a un método, simplemente declare dentro de los paréntesis
después del nombre del constructor.
Ejemplo
Aquí hay un ejemplo simple que usa un constructor:
// A simple constructor.
class MyClass {
int x;
byte
El tipo de datos de byte es un entero de dos bits con signo de 8 bits
El valor mínimo es -128 (-2 ^ 7)
El valor máximo es 127 (inclusive) (2 ^ 7 -1)
El valor predeterminado es 0
El tipo de datos de byte se utiliza para ahorrar espacio en matrices grandes,
principalmente en lugar de enteros, ya que un byte es cuatro veces más pequeño
que un entero.
Ejemplo: byte a = 100, byte b = -50
corto
En t
El tipo de datos Int es un entero de complemento de dos con signo de 32 bits.
El valor mínimo es - 2,147,483,648 (-2 ^ 31)
El valor máximo es 2,147,483,647 (inclusive) (2 ^ 31 -1)
El entero se usa generalmente como el tipo de datos predeterminado para los
valores integrales, a menos que exista una preocupación por la memoria.
El valor predeterminado es 0
Ejemplo: int a = 100000, int b = -200000
largo
El tipo de datos largo es un entero de complemento de dos con signo de 64 bits
El valor mínimo es -9,223,372,036,854,775,808 (-2 ^ 63)
El valor máximo es 9.223.372.036.854.775.807 (inclusive) (2 ^ 63 -1)
Este tipo se usa cuando se necesita un rango más amplio que int
El valor predeterminado es 0L
Ejemplo: largo a = 100000L, largo b = -200000L
flotador
El tipo de datos flotantes es un punto flotante IEEE 754 de 32 bits de precisión
simple
Float se utiliza principalmente para ahorrar memoria en grandes conjuntos de
números de coma flotante
El valor predeterminado es 0.0f
El tipo de datos flotantes nunca se usa para valores precisos como la moneda
Ejemplo: flotador f1 = 234.5f
doble
El tipo de datos doble es un punto flotante IEEE 754 de doble precisión de 64 bits
Este tipo de datos generalmente se usa como el tipo de datos predeterminado
para valores decimales, generalmente la opción predeterminada
El tipo de datos doble nunca debe usarse para valores precisos como la moneda
El valor predeterminado es 0.0d
Ejemplo: doble d1 = 123.4
booleano
el tipo de datos booleanos representa un bit de información
Solo hay dos valores posibles: verdadero y falso
Este tipo de datos se usa para indicadores simples que rastrean condiciones
verdaderas / falsas
El valor predeterminado es falso
Ejemplo: booleano uno = verdadero
carbonizarse
Literales Java
Un literal es una representación del código fuente de un valor fijo. Se
representan directamente en el código sin ningún cálculo.
Los literales se pueden asignar a cualquier variable de tipo primitivo. Por
ejemplo
byte a = 68;
char a = 'A';
byte, int, long y short pueden expresarse también en sistemas de números
decimales (base 10), hexadecimales (base 16) u octales (base 8).
El prefijo 0 se usa para indicar octal, y el prefijo 0x indica hexadecimal cuando
se usan estos sistemas numéricos para literales. Por ejemplo
int decimal = 100;
int octal = 0144;
int hexa = 0x64;
Los literales de cadena en Java se especifican como en la mayoría de los
otros idiomas al encerrar una secuencia de caracteres entre un par de comillas
dobles. Ejemplos de literales de cadena son:
Ejemplo
"Hello World"
"two\nlines"
"\"This is in quotes\""
\s Espacio (0x20)
\t lengüeta
\" Cita doble
\\ barra invertida
Ejemplo
int a, b, c; // Declares three ints, a, b, and c.
int a = 10, b = 10; // Example of initialization
byte B = 22; // initializes a byte type variable B.
double pi = 3.14159; // declares and assigns a value of PI.
char a = 'A'; // the char variable a iis initialized
with value 'a'
Variables Locales
Las variables locales se declaran en métodos, constructores o bloques.
Las variables locales se crean cuando se ingresa el método, el constructor o el
bloque y la variable se destruirá una vez que salga del método, constructor o
bloque.
Los modificadores de acceso no pueden usarse para variables locales.
Las variables locales solo son visibles dentro del método, constructor o bloque
declarado.
Las variables locales se implementan a nivel de pila internamente.
No hay un valor predeterminado para las variables locales, por lo que las variables
locales deben declararse y debe asignarse un valor inicial antes del primer uso.
Ejemplo
Aquí, la edad es una variable local. Esto se define dentro del método pupAge
() y su alcance se limita solo a este método.
Demo en vivo
public class Test {
public void pupAge() {
int age = 0;
age = age + 7;
System.out.println("Puppy age is : " + age);
}
Salida
Ejemplo
El siguiente ejemplo usa age sin inicializarlo, por lo que daría un error en el
momento de la compilación.
Demo en vivo
public class Test {
public void pupAge() {
int age;
age = age + 7;
System.out.println("Puppy age is : " + age);
}
Salida
Test.java:4:variable number might not have been initialized
age = age + 7;
^
1 error
Variables de instancia
Las variables de instancia se declaran en una clase, pero fuera de un método,
constructor o cualquier bloque.
Cuando se asigna un espacio para un objeto en el montón, se crea un espacio
para cada valor de variable de instancia.
Las variables de instancia se crean cuando se crea un objeto con el uso de la
palabra clave 'nuevo' y se destruye cuando se destruye el objeto.
Las variables de instancia contienen valores que deben ser referenciados por más
de un método, constructor o bloque, o partes esenciales del estado de un objeto
que deben estar presentes en toda la clase.
Las variables de instancia se pueden declarar en el nivel de clase antes o después
del uso.
Se pueden dar modificadores de acceso, por ejemplo, variables.
Las variables de instancia son visibles para todos los métodos, constructores y
bloques de la clase. Normalmente, se recomienda hacer que estas variables sean
privadas (nivel de acceso). Sin embargo, se puede dar visibilidad para las
subclases para estas variables con el uso de modificadores de acceso.
Las variables de instancia tienen valores predeterminados. Para los números, el
valor predeterminado es 0, para los booleanos es falso y para las referencias a
objetos es nulo. Los valores pueden asignarse durante la declaración o dentro del
constructor.
Se puede acceder directamente a las variables de instancia llamando al nombre
de la variable dentro de la clase. Sin embargo, dentro de los métodos estáticos
(cuando las variables de instancia tienen accesibilidad), deben llamarse con el
nombre completo. ObjectReference.VariableName .
Ejemplo
Demo en vivo
import java.io.*;
public class Employee {
Salida
name : Ransika
salary :1000.0
Ejemplo
Demo en vivo
import java.io.*;
public class Employee {
// DEPARTMENT is a constant
public static final String DEPARTMENT = "Development ";
Salida
Ejemplo
Operadores aritméticos
Operadores relacionales
Operadores bit a bit
Operadores logicos
Operadores de Asignación
Operadores diversos
C << = 2
es lo
<< = Desplazamiento a la izquierda Y operador de asignación.
mismo que
C = C << 2
C >> = 2
es lo
>> = Desplazamiento a la derecha Y operador de asignación.
mismo que
C = C >> 2
C & = 2 es
lo mismo
&= Operador de asignación Y a nivel de bit.
que C = C
&2
Operadores Misceláneos
Hay algunos otros operadores compatibles con Java Language.
No Bucle y descripción
Señor.
1 mientras bucle
2 en bucle
Ejecute una secuencia de declaraciones varias veces y abrevia el código que
administra la variable de bucle.
1 declaración de ruptura
2 continuar declaración
Hace que el bucle omita el resto de su cuerpo e inmediatamente vuelva a probar
su condición antes de reiterar.
Sintaxis
Ejemplo
Demo en vivo
public class Test {
for(int x : numbers ) {
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names = {"James", "Larry", "Tom", "Lacy"};
Salida
1 si la declaración
3 anidada si la declaración
Puede usar una declaración if o else if dentro de otra declaración if o else if (s).
44 declaración de cambio
Una declaración de cambio permite que una variable sea probada para la
igualdad contra una lista de valores.
Los ? : Operador
Hemos cubierto operador condicional? : en el capítulo anterior que se puede
usar para reemplazar las declaraciones if ... else . Tiene la siguiente forma
general:
Exp1 ? Exp2 : Exp3;
Donde Exp1, Exp2 y Exp3 son expresiones. Observe el uso y la colocación del
colon.
Para determinar el valor de toda la expresión, inicialmente se evalúa exp1.
Si el valor de exp1 es verdadero, entonces el valor de Exp2 será el valor de toda la
expresión.
Si el valor de exp1 es falso, se evalúa Exp3 y su valor se convierte en el valor de
toda la expresión.
Ejemplo
int i = 5000;
float gpa = 13.65;
double mask = 0xaf;
Sin embargo, en el desarrollo, nos encontramos con situaciones en las que
necesitamos usar objetos en lugar de tipos de datos primitivos. Para lograr
esto, Java proporciona clases de contenedor .
Todas las clases de contenedor (Entero, Largo, Byte, Doble, Flotante, Corto)
son subclases de la clase abstracta Número.
Ejemplo
Demo en vivo
public class Test {
Salida
15
Cuando a x se le asigna un valor entero, el compilador encajona el número
entero porque x es un objeto entero. Más tarde, x se desempaqueta para que
se puedan agregar como un entero.
Métodos numéricos
La siguiente es la lista de los métodos de instancia que implementan todas las
subclases de la clase Number:
No Método y descripción
Señor.
1 xxxValue ()
2 comparar con()
Compara este objeto Número con el argumento.
3 es igual a ()
Determina si este objeto numérico es igual al argumento.
44 valor de()
Devuelve un objeto entero que contiene el valor de la primitiva especificada.
55 Encadenar()
Devuelve un objeto String que representa el valor de un int o Integer
especificado.
66 parseInt ()
Este método se utiliza para obtener el tipo de datos primitivos de una
determinada cadena.
77 abdominales()
Devuelve el valor absoluto del argumento.
8 fortificar techo()
Devuelve el entero más pequeño que es mayor o igual que el
argumento. Devuelto como un doble.
99 piso()
Devuelve el entero más grande que es menor o igual que el
argumento. Devuelto como un doble.
10 rint ()
Devuelve el entero que tiene el valor más cercano al argumento. Devuelto como
un doble.
11 redondo()
Devuelve el largo o int más cercano, como lo indica el tipo de retorno del método
al argumento.
12 min ()
Devuelve el menor de los dos argumentos.
13 max ()
Devuelve el mayor de los dos argumentos.
14 Exp()
Devuelve la base de los logaritmos naturales, e, a la potencia del argumento.
15 Iniciar sesión()
Devuelve el logaritmo natural del argumento.
dieciséis pow ()
Devuelve el valor del primer argumento elevado a la potencia del segundo
argumento.
17 sqrt ()
Devuelve la raíz cuadrada del argumento.
18 años pecado()
Devuelve el seno del valor doble especificado.
19 cos ()
Devuelve el coseno del valor doble especificado.
20 bronceado()
Devuelve la tangente del valor doble especificado.
21 como en()
Devuelve el arcoseno del valor doble especificado.
22 acos ()
Devuelve el arcocoseno del valor doble especificado.
23 un bronceado()
Devuelve el arcotangente del valor doble especificado.
24 atan2 ()
Convierte coordenadas rectangulares (x, y) en coordenadas polares (r, theta) y
devuelve theta.
25 toDegrees ()
Convierte el argumento en grados.
26 toRadians ()
Convierte el argumento en radianes.
27 aleatorio()
Devuelve un número aleatorio.
Ejemplo
char ch = 'a';
// an array of chars
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
Ejemplo
Secuencias de escape
Un carácter precedido por una barra invertida (\) es una secuencia de escape
y tiene un significado especial para el compilador.
El carácter de nueva línea (\ n) se ha utilizado con frecuencia en este tutorial
en las declaraciones System.out.println () para avanzar a la siguiente línea
después de que se imprime la cadena.
La siguiente tabla muestra las secuencias de escape de Java:
Secuencia de Descripción
escape
Ejemplo
Si desea poner comillas entre comillas, debe usar la secuencia de escape, \ ",
en las comillas interiores -
Demo en vivo
public class Test {
Salida
She said "Hello!" to me.
Métodos de personaje
La siguiente es la lista de los métodos de instancia importantes que
implementan todas las subclases de la clase Character:
No Método y descripción
Señor.
1 isLetter ()
2 isDigit ()
Determina si el valor de char especificado es un dígito.
3 isWhitespace ()
Determina si el valor de char especificado es un espacio en blanco.
44 isUpperCase ()
Determina si el valor de char especificado es mayúscula.
55 isLowerCase ()
Determina si el valor de char especificado es minúscula.
66 toUpperCase ()
Devuelve la forma en mayúscula del valor de char especificado.
77 toLowerCase ()
Devuelve la forma en minúscula del valor de char especificado.
8 Encadenar()
Devuelve un objeto String que representa el valor de carácter especificado, es
decir, una cadena de un carácter.
Creando cadenas
La forma más directa de crear una cadena es escribir:
String greeting = "Hello world!";
Cada vez que encuentra un literal de cadena en su código, el compilador crea
un objeto de cadena con su valor en este caso, "¡Hola, mundo!".
Al igual que con cualquier otro objeto, puede crear objetos String utilizando la
nueva palabra clave y un constructor. La clase String tiene 11 constructores
que le permiten proporcionar el valor inicial de la cadena utilizando diferentes
fuentes, como una matriz de caracteres.
Ejemplo
Demo en vivo
public class StringDemo {
Salida
hello.
Nota : la clase String es inmutable, por lo que una vez que se crea un objeto
String no se puede cambiar. Si es necesario realizar muchas modificaciones
en las Cadenas de caracteres, entonces debe usar las Clases de Buffer de
Cadena y de Generador de Cadena .
Longitud de la cuerda
Los métodos utilizados para obtener información sobre un objeto se conocen
como métodos de acceso . Un método de acceso que puede usar con
cadenas es el método length (), que devuelve el número de caracteres
contenidos en el objeto de cadena.
El siguiente programa es un ejemplo de longitud () , método Clase de cadena.
Ejemplo
Demo en vivo
public class StringDemo {
Salida
String Length is : 17
Cuerdas Concatenadas
La clase String incluye un método para concatenar dos cadenas:
string1.concat(string2);
Esto devuelve una nueva cadena que es cadena1 con cadena2 agregada al
final. También puede usar el método concat () con literales de cadena, como
en -
"My name is ".concat("Zara");
Las cadenas se concatenan más comúnmente con el operador +, como en -
"Hello," + " world" + "!"
lo que resulta en -
"Hello, world!"
Veamos el siguiente ejemplo:
Ejemplo
Demo en vivo
public class StringDemo {
Salida
Ejemplo
Métodos de cuerda
Aquí está la lista de métodos admitidos por la clase String:
No Método y descripción
Señor.
8 static String copyValueOf (datos char [], int offset, int count)
Devuelve una cadena que representa la secuencia de caracteres en la matriz
especificada.
12 byte getBytes ()
Codifica esta cadena en una secuencia de bytes utilizando el juego de caracteres
predeterminado de la plataforma, almacenando el resultado en una nueva matriz
de bytes.
14 void getChars (int srcBegin, int srcEnd, char [] dst, int dstBegin)
Copia los caracteres de esta cadena en la matriz de caracteres de destino.
15 int hashCode ()
Devuelve un código hash para esta cadena.
20 Pasante interno ()
Devuelve una representación canónica para el objeto de cadena.
25 int length ()
Devuelve la longitud de esta cadena.
27 boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset,
int len)
Comprueba si dos regiones de cadena son iguales.
28 boolean regionMatches (int toffset, String other, int ooffset, int len)
Comprueba si dos regiones de cadena son iguales.
39 char [] toCharArray ()
Convierte esta cadena en una nueva matriz de caracteres.
40 String toLowerCase ()
Convierte todos los caracteres de esta cadena en minúsculas utilizando las
reglas de la configuración regional predeterminada.
42 String toString ()
Este objeto (que ya es una cadena) se devuelve.
43 String toUpperCase ()
Convierte todos los caracteres de esta cadena a mayúsculas utilizando las reglas
de la configuración regional predeterminada.
45 Recorte de cuerda ()
Devuelve una copia de la cadena, con espacios en blanco iniciales y finales
omitidos.
Java: matrices
Java proporciona una estructura de datos, la matriz , que almacena una
colección secuencial de tamaño fijo de elementos del mismo tipo. Una matriz
se usa para almacenar una colección de datos, pero a menudo es más útil
pensar en una matriz como una colección de variables del mismo tipo.
En lugar de declarar variables individuales, como número0, número1, ... y
número99, declara una variable de matriz como números y usa números [0],
números [1] y ..., números [99] para representar variables individuales
Este tutorial presenta cómo declarar variables de matriz, crear matrices y
procesar matrices usando variables indexadas.
Sintaxis
Ejemplo
Crear matrices
Puede crear una matriz utilizando el nuevo operador con la siguiente sintaxis:
Sintaxis
arrayRefVar = new dataType[arraySize];
La declaración anterior hace dos cosas:
Crea una matriz usando el nuevo tipo de datos [arraySize].
Asigna la referencia de la matriz recién creada a la variable arrayRefVar.
Declarar una variable de matriz, crear una matriz y asignar la referencia de la
matriz a la variable se puede combinar en una declaración, como se muestra a
continuación:
dataType[] arrayRefVar = new dataType[arraySize];
Alternativamente, puede crear matrices de la siguiente manera:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
Se accede a los elementos de la matriz a través del índice . Los índices de
matriz están basados en 0; es decir, comienzan desde 0
hasta arrayRefVar.length-1 .
Ejemplo
Procesando matrices
Cuando procesamos elementos de matriz, a menudo usamos for loop
o foreach loop porque todos los elementos en una matriz son del mismo tipo y
se conoce el tamaño de la matriz.
Ejemplo
Aquí hay un ejemplo completo que muestra cómo crear, inicializar y procesar
matrices:
Demo en vivo
public class TestArray {
Salida
1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
Ejemplo
Salida
1.9
2.9
3.4
3.5
Ejemplo
Ejemplo
Ejemplo
La clase de matrices
La clase java.util.Arrays contiene varios métodos estáticos para ordenar y
buscar matrices, comparar matrices y llenar elementos de matriz. Estos
métodos están sobrecargados para todos los tipos primitivos.
No Método y descripción
Señor.
1
public static int binarySearch (Object [] a, Object key)
Busca en la matriz especificada de Object (Byte, Int, double, etc.) el valor
especificado utilizando el algoritmo de búsqueda binaria. La matriz se debe
ordenar antes de realizar esta llamada. Esto devuelve el índice de la clave de
búsqueda, si está contenido en la lista; de lo contrario, devuelve (- (punto de
inserción + 1)).
2
público estático booleano igual (largo [] a, largo [] a2)
Devuelve verdadero si las dos matrices de longitudes especificadas son iguales
entre sí. Dos matrices se consideran iguales si ambas matrices contienen el mismo
número de elementos, y todos los pares de elementos correspondientes en las dos
matrices son iguales. Esto devuelve verdadero si las dos matrices son
iguales. Todos los demás tipos de datos primitivos podrían usar el mismo método
(Byte, short, Int, etc.)
3
relleno de vacío público estático (int [] a, int val)
Asigna el valor int especificado a cada elemento de la matriz de entradas
especificada. El mismo método podría ser utilizado por todos los demás tipos de
datos primitivos (Byte, short, Int, etc.)
44
orden público vacío estático (Objeto [] a)
Ordena la matriz especificada de objetos en un orden ascendente, de acuerdo con
el orden natural de sus elementos. El mismo método podría ser utilizado por todos
los demás tipos de datos primitivos (Byte, short, Int, etc.)
No Constructor y Descripción
Señor.
1
Fecha( )
Este constructor inicializa el objeto con la fecha y hora actuales.
2
Fecha (milisegundos largos)
Este constructor acepta un argumento que equivale al número de milisegundos
que han transcurrido desde la medianoche del 1 de enero de 1970.
No Método y descripción
Señor.
1
booleano después (Fecha fecha)
Devuelve verdadero si el objeto Fecha de invocación contiene una fecha posterior
a la especificada por fecha; de lo contrario, devuelve falso.
2
booleano antes (fecha fecha)
Devuelve verdadero si el objeto Fecha de invocación contiene una fecha anterior a
la especificada por fecha; de lo contrario, devuelve falso.
3
Objeto clon ()
Duplica el objeto de invocación de fecha.
44
int compareTo (fecha fecha)
Compara el valor del objeto que invoca con el de fecha. Devuelve 0 si los valores
son iguales. Devuelve un valor negativo si el objeto que invoca es anterior a la
fecha. Devuelve un valor positivo si el objeto que invoca es posterior a la fecha.
55
int compareTo (Objeto obj)
Funciona de manera idéntica para compareTo (Fecha) si obj es de la clase
Fecha. De lo contrario, arroja una ClassCastException.
66
boolean igual (Fecha del objeto)
Devuelve verdadero si el objeto Fecha de invocación contiene la misma hora y
fecha que la especificada por fecha; de lo contrario, devuelve falso.
77
largo getTime ()
Devuelve el número de milisegundos que han transcurrido desde el 1 de enero de
1970.
8
int hashCode ()
Devuelve un código hash para el objeto que invoca.
99
nulo setTime (mucho tiempo)
Establece la hora y la fecha según lo especificado por la hora, que representa un
tiempo transcurrido en milisegundos desde la medianoche del 1 de enero de 1970.
10
String toString ()
Convierte el objeto de invocación Date en una cadena y devuelve el resultado.
Ejemplo
Demo en vivo
import java.util.Date;
public class DateDemo {
Salida
on May 04 09:51:52 CDT 2009
Comparación de fechas
Las siguientes son las tres formas de comparar dos fechas:
Puede usar getTime () para obtener el número de milisegundos que han
transcurrido desde la medianoche, 1 de enero de 1970, para ambos objetos y
luego comparar estos dos valores.
Puede usar los métodos before (), after () y equals (). Debido a que el 12 del mes
viene antes del 18, por ejemplo, la nueva Fecha (99, 2, 12). Antes (nueva Fecha
(99, 2, 18)) devuelve verdadero.
Puede usar el método compareTo (), que se define mediante la interfaz
Comparable y se implementa por Date.
Ejemplo
Demo en vivo
import java.util.*;
import java.text.*;
Salida
re Día en mes 10
h Hora en AM / PM (1 ~ 12) 12
s Segundo en minuto 55
S Milisegundo 234
w Semana en el año 40
W Semana en mes 1
un Marcador AM / PM PM
Ejemplo
Demo en vivo
import java.util.Date;
public class DateDemo {
System.out.printf(str);
}
}
Esto producirá el siguiente resultado:
Salida
Ejemplo
Demo en vivo
import java.util.Date;
public class DateDemo {
Salida
Ejemplo
Demo en vivo
import java.util.Date;
public class DateDemo {
Salida
Due date: February 09, 2004
Hay otras clases útiles relacionadas con la fecha y la hora. Para obtener más
detalles, puede consultar la documentación de Java Standard.
Ejemplo
Demo en vivo
import java.util.*;
import java.text.*;
Salida
Durmiendo un rato
Puede dormir durante cualquier período de tiempo, desde un milisegundo
hasta la vida útil de su computadora. Por ejemplo, el siguiente programa
dormiría durante 3 segundos:
Ejemplo
Demo en vivo
import java.util.*;
public class SleepDemo {
Salida
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Ejemplo
Demo en vivo
import java.util.*;
public class DiffDemo {
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
Salida
No Constructor y Descripción
Señor.
1
Calendario Gregoriano()
Construye un calendario gregoriano predeterminado utilizando la hora actual en la
zona horaria predeterminada con la configuración regional predeterminada.
2
Calendario gregoriano (int año, int mes, int fecha)
Construye un calendario gregoriano con la fecha dada establecida en la zona
horaria predeterminada con la configuración regional predeterminada.
3
Calendario gregoriano (int año, int mes, int fecha, int hora, int minuto)
Construye un calendario gregoriano con la fecha y hora establecidas para la zona
horaria predeterminada con la configuración regional predeterminada.
44
Calendario gregoriano (int año, int mes, int fecha, int hora, int minuto, int
segundo)
Construye un calendario gregoriano con la fecha y hora establecidas para la zona
horaria predeterminada con la configuración regional predeterminada.
55
GregorianCalendar (Locale aLocale)
Construye un calendario gregoriano basado en la hora actual en la zona horaria
predeterminada con la configuración regional dada.
66
Calendario gregoriano (zona horaria)
Construye un calendario gregoriano basado en la hora actual en la zona horaria
dada con la configuración regional predeterminada.
77
GregorianCalendar (zona horaria, Locale aLocale)
Construye un calendario gregoriano basado en la hora actual en la zona horaria
dada con la configuración regional dada.
No Método y descripción
Señor.
1
void add (campo int, cantidad int)
Agrega la cantidad de tiempo especificada (firmada) al campo de tiempo dado,
según las reglas del calendario.
2
vacío protegido computeFields ()
Convierte UTC como milisegundos en valores de campo de tiempo.
3
vacío protegido computeTime ()
Anula el calendario Convierte los valores del campo de tiempo a UTC en
milisegundos.
44
boolean igual (objeto obj)
Compara este GregorianCalendar con una referencia de objeto.
55
int get (campo int)
Obtiene el valor para un campo de tiempo dado.
66
int getActualMaximum (campo int)
Devuelve el valor máximo que podría tener este campo, dada la fecha actual.
77
int getActualMinimum (campo int)
Devuelve el valor mínimo que podría tener este campo, dada la fecha actual.
8
int getGreatestMinimum (campo int)
Devuelve el valor mínimo más alto para el campo dado si varía.
99
Fecha getGregorianChange ()
Obtiene la fecha de cambio del calendario gregoriano.
10
int getLeastMaximum (campo int)
Devuelve el valor máximo más bajo para el campo dado si varía.
11
int getMaximum (campo int)
Devuelve el valor máximo para el campo dado.
12
Fecha getTime ()
Obtiene la hora actual de este calendario.
13
largo getTimeInMillis ()
Obtiene el tiempo actual de este calendario como largo.
14
TimeZone getTimeZone ()
Obtiene la zona horaria.
15
int getMinimum (campo int)
Devuelve el valor mínimo para el campo dado.
dieciséis
int hashCode ()
Invalida el código hash.
17
boolean isLeapYear (int año)
Determina si el año dado es un año bisiesto.
18 años
rollo vacío (campo int, booleano arriba)
Agrega o resta (arriba / abajo) una sola unidad de tiempo en el campo de tiempo
dado sin cambiar los campos más grandes.
19
conjunto vacío (campo int, valor int)
Establece el campo de tiempo con el valor dado.
20
conjunto nulo (int año, int mes, int fecha)
Establece los valores para los campos año, mes y fecha.
21
conjunto nulo (int año, int mes, int fecha, int hora, int minuto)
Establece los valores para los campos año, mes, fecha, hora y minuto.
22
conjunto nulo (int año, int mes, int fecha, int hora, int minuto, int segundo)
Establece los valores para los campos año, mes, fecha, hora, minuto y segundo.
23
void setGregorianChange (Fecha fecha)
Establece la fecha de cambio de GregorianCalendar.
24
nulo setTime (fecha fecha)
Establece la hora actual de este calendario con la fecha dada.
25
nulo setTimeInMillis (long millis)
Establece la hora actual de este calendario a partir del valor largo dado.
26
nulo setTimeZone (valor de TimeZone)
Establece la zona horaria con el valor de zona horaria dado.
27
String toString ()
Devuelve una representación de cadena de este calendario.
Ejemplo
Demo en vivo
import java.util.*;
public class GregorianCalendarDemo {
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + "
");
System.out.println(year =
gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
Salida
Capturando grupos
Los grupos de captura son una forma de tratar a varios personajes como una
sola unidad. Se crean colocando los caracteres que se agruparán dentro de un
conjunto de paréntesis. Por ejemplo, la expresión regular (perro) crea un solo
grupo que contiene las letras "d", "o" y "g".
Los grupos de captura se numeran contando sus paréntesis de apertura de
izquierda a derecha. En la expresión ((A) (B (C))), por ejemplo, hay cuatro de
estos grupos:
((A B C)))
(UN)
(ANTES DE CRISTO))
(C)
Para averiguar cuántos grupos están presentes en la expresión, llame al
método groupCount en un objeto de coincidencia. El método groupCount
devuelve un int que muestra el número de grupos de captura presentes en el
patrón del emparejador.
También hay un grupo especial, el grupo 0, que siempre representa la
expresión completa. Este grupo no está incluido en el total informado por
groupCount.
Ejemplo
El siguiente ejemplo ilustra cómo encontrar una cadena de dígitos de la
cadena alfanumérica dada:
Demo en vivo
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Subexpresión Partidos
a | si Coincide con ao b.
\Z Coincide con el final de la cadena. Si existe una nueva línea, coincide justo
antes de la nueva línea.
\si Coincide con los límites de la palabra cuando está fuera de los
corchetes. Coincide con el retroceso (0x08) cuando está dentro de los
corchetes.
Métodos de índice
Los métodos de índice proporcionan valores de índice útiles que muestran con
precisión dónde se encontró la coincidencia en la cadena de entrada:
No Método y descripción
Señor.
1
public int start ()
Devuelve el índice de inicio de la coincidencia anterior.
2
public int start (grupo int)
Devuelve el índice de inicio de la subsecuencia capturada por el grupo dado
durante la operación de coincidencia anterior.
3
public int end ()
Devuelve el desplazamiento después de que coincida el último carácter.
44
public int end (int group)
Devuelve el desplazamiento después del último carácter de la subsecuencia
capturado por el grupo dado durante la operación de coincidencia anterior.
Métodos de estudio
No Método y descripción
Señor.
1
Aspecto público booleano ()
Intenta hacer coincidir la secuencia de entrada, comenzando por el comienzo de
la región, con el patrón.
2
public boolean find ()
Intenta encontrar la siguiente subsecuencia de la secuencia de entrada que
coincida con el patrón.
3
public boolean find (int start)
Restablece este emparejador y luego intenta encontrar la siguiente subsecuencia
de la secuencia de entrada que coincida con el patrón, comenzando en el índice
especificado.
44
partidos booleanos públicos ()
Intenta hacer coincidir toda la región con el patrón.
Métodos de reemplazo
Los métodos de reemplazo son métodos útiles para reemplazar texto en una
cadena de entrada:
No Método y descripción
Señor.
1
public Matcher appendReplacement (StringBuffer sb, reemplazo de cadena)
Implementa un paso de agregar y reemplazar no terminal.
2
public StringBuffer appendTail (StringBuffer sb)
Implementa un paso de agregar y reemplazar terminal.
3
Cadena pública replaceAll (Reemplazo de cadena)
Reemplaza cada subsecuencia de la secuencia de entrada que coincide con el
patrón con la cadena de reemplazo dada.
44
Cadena pública replaceFirst (Reemplazo de cadena)
Reemplaza la primera subsecuencia de la secuencia de entrada que coincide con
el patrón con la cadena de reemplazo dada.
55
Presupuesto de cadena estática pública Reemplazo (cadena)
Devuelve una Cadena de reemplazo literal para la Cadena especificada. Este
método produce una cadena que funcionará como un reemplazo literal s en el
método appendReplacement de la clase Matcher.
while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}
}
Esto producirá el siguiente resultado:
Salida
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
Puede ver que este ejemplo utiliza límites de palabras para garantizar que las
letras "c" "a" "t" no sean simplemente una subcadena en una palabra más
larga. También proporciona información útil sobre dónde se produjo la
coincidencia en la cadena de entrada.
El método de inicio devuelve el índice de inicio de la subsecuencia capturada
por el grupo dado durante la operación de coincidencia anterior, y el final
devuelve el índice del último carácter coincidente, más uno.
System.out.println("lookingAt():
"+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());
}
}
Esto producirá el siguiente resultado:
Salida
Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false
Pattern p = Pattern.compile(REGEX);
No Método y descripción
Señor.
1
public String getDescription ()
Recupera la descripción del error.
2
public int getIndex ()
Recupera el índice de error.
3
public String getPattern ()
Recupera el patrón de expresión regular erróneo.
44
public String getMessage ()
Devuelve una cadena de varias líneas que contiene la descripción del error de
sintaxis y su índice, el patrón de expresión regular erróneo y una indicación visual
del índice de error dentro del patrón.
Java - Métodos
Un método Java es una colección de declaraciones que se agrupan para
realizar una operación. Cuando llamas a System.out. El método println () , por
ejemplo, el sistema realmente ejecuta varias declaraciones para mostrar un
mensaje en la consola.
Ahora aprenderá cómo crear sus propios métodos con o sin valores de
retorno, invocar un método con o sin parámetros y aplicar abstracción de
métodos en el diseño del programa.
Método de creación
Considerando el siguiente ejemplo para explicar la sintaxis de un método:
Sintaxis
public static int methodName(int a, int b) {
// body
}
Aquí,
public static - modificador
int - tipo de retorno
methodName - nombre del método
a, b - parámetros formales
int a, int b - lista de parámetros
return min;
}
Método de llamada
Para usar un método, debería llamarse. Hay dos formas en que se llama a un
método, es decir, el método devuelve un valor o no devuelve nada (sin valor
de retorno).
El proceso de llamada al método es simple. Cuando un programa invoca un
método, el control del programa se transfiere al método llamado. Este método
llamado luego devuelve el control a la persona que llama en dos condiciones,
cuando:
return min;
}
}
Esto producirá el siguiente resultado:
Salida
Minimum value = 6
Método de sobrecarga
Cuando una clase tiene dos o más métodos con el mismo nombre pero con
parámetros diferentes, se conoce como sobrecarga de métodos. Es diferente
de anular. Al anular, un método tiene el mismo nombre, tipo, número de
parámetros, etc.
Consideremos el ejemplo discutido anteriormente para encontrar números
mínimos de tipo entero. Si, digamos que queremos encontrar el número
mínimo de tipos dobles. Luego, se introducirá el concepto de sobrecarga para
crear dos o más métodos con el mismo nombre pero con parámetros
diferentes.
El siguiente ejemplo explica lo mismo:
Ejemplo
Demo en vivo
public class ExampleOverloading {
// for integer
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
// for double
public static double minFunction(double n1, double n2) {
double min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
}
Esto producirá el siguiente resultado:
Salida
Minimum Value = 6
Minimum Value = 7.3
Los métodos de sobrecarga hacen que el programa sea legible. Aquí, dos
métodos se dan con el mismo nombre pero con diferentes parámetros. El
número mínimo de tipos enteros y dobles es el resultado.
class Student {
int age;
Student(int age) {
this.age = age;
}
}
Llame a un tipo de constructor (constructor parametrizado o predeterminado) de
otro en una clase. Se conoce como invocación explícita de constructor.
class Student {
int age
Student() {
this(20);
}
Student(int age) {
this.age = age;
}
}
Ejemplo
Aquí hay un ejemplo que usa esta palabra clave para acceder a los miembros
de una clase. Copie y pegue el siguiente programa en un archivo con el
nombre This_Example.java .
Demo en vivo
public class This_Example {
// Instance variable num
int num = 10;
This_Example() {
System.out.println("This is an example program on
keyword this");
}
This_Example(int num) {
// Invoking the default constructor
this();
El método finalize ()
Es posible definir un método que será llamado justo antes de la destrucción
final de un objeto por el recolector de basura. Este método se llama finalize
() , y se puede usar para asegurar que un objeto termine limpiamente.
Por ejemplo, puede usar finalize () para asegurarse de que un archivo abierto
propiedad de ese objeto esté cerrado.
Para agregar un finalizador a una clase, simplemente defina el método finalize
(). El tiempo de ejecución de Java llama a ese método cada vez que está a
punto de reciclar un objeto de esa clase.
Dentro del método finalize (), especificará aquellas acciones que deben
realizarse antes de que un objeto sea destruido.
El método finalize () tiene esta forma general:
protected void finalize( ) {
// finalization code here
}
Aquí, la palabra clave protegida es un especificador que impide el acceso a
finalize () por código definido fuera de su clase.
Esto significa que no puede saber cuándo o incluso si se ejecutará finalize
(). Por ejemplo, si su programa finaliza antes de que se produzca la
recolección de basura, finalize () no se ejecutará.
Java - Archivos y E / S
El paquete java.io contiene casi todas las clases que pueda necesitar para
realizar entradas y salidas (E / S) en Java. Todos estos flujos representan una
fuente de entrada y un destino de salida. La secuencia en el paquete java.io
admite muchos datos, como primitivas, objetos, caracteres localizados, etc.
Corriente
Una secuencia se puede definir como una secuencia de datos. Hay dos tipos
de transmisiones:
InPutStream : InputStream se utiliza para leer datos de una fuente.
OutPutStream : OutputStream se utiliza para escribir datos en un destino.
Byte Streams
try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
Ahora tengamos un archivo input.txt con el siguiente contenido:
This is test for copy file.
Como siguiente paso, compile el programa anterior y ejecútelo, lo que dará
como resultado la creación del archivo output.txt con el mismo contenido que
tenemos en input.txt. Pongamos el código anterior en el archivo CopyFile.java
y hagamos lo siguiente:
$javac CopyFile.java
$java CopyFile
Corrientes de personajes
try {
in = new FileReader("input.txt");
out = new FileWriter("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
Ahora tengamos un archivo input.txt con el siguiente contenido:
This is test for copy file.
Como siguiente paso, compile el programa anterior y ejecútelo, lo que dará
como resultado la creación del archivo output.txt con el mismo contenido que
tenemos en input.txt. Pongamos el código anterior en el archivo CopyFile.java
y hagamos lo siguiente:
$javac CopyFile.java
$java CopyFile
Streams estándar
Todos los lenguajes de programación brindan soporte para E / S estándar
donde el programa del usuario puede recibir información de un teclado y luego
producir una salida en la pantalla de la computadora. Si conoce los lenguajes
de programación C o C ++, debe conocer los tres dispositivos estándar
STDIN, STDOUT y STDERR. Del mismo modo, Java proporciona las
siguientes tres secuencias estándar:
Entrada estándar : se usa para alimentar los datos al programa del usuario y
generalmente se usa un teclado como flujo de entrada estándar y se representa
como System.in .
Salida estándar : se utiliza para generar los datos producidos por el programa del
usuario y, por lo general, se utiliza una pantalla de computadora para el flujo de
salida estándar y se representa como System.out .
Error estándar : se utiliza para generar los datos de error producidos por el
programa del usuario y, por lo general, se utiliza una pantalla de computadora
para el flujo de error estándar y se representa como System.err .
El siguiente es un programa simple, que crea InputStreamReader para leer el
flujo de entrada estándar hasta que el usuario escriba una "q":
Ejemplo
Demo en vivo
import java.io.*;
public class ReadConsole {
try {
cin = new InputStreamReader(System.in);
System.out.println("Enter characters, 'q' to
quit.");
char c;
do {
c = (char) cin.read();
System.out.print(c);
} while(c != 'q');
}finally {
if (cin != null) {
cin.close();
}
}
}
}
FileInputStream
Esta secuencia se utiliza para leer datos de los archivos. Los objetos se
pueden crear usando la palabra clave new y hay varios tipos de constructores
disponibles.
El siguiente constructor toma un nombre de archivo como una cadena para
crear un objeto de flujo de entrada para leer el archivo:
InputStream f = new FileInputStream("C:/java/hello");
El siguiente constructor toma un objeto de archivo para crear un objeto de flujo
de entrada para leer el archivo. Primero creamos un objeto de archivo usando
el método File () de la siguiente manera:
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
Una vez que tenga el objeto InputStream en la mano, hay una lista de
métodos auxiliares que se pueden usar para leer para transmitir o para realizar
otras operaciones en la transmisión.
No Método y descripción
Señor.
1
public void close () arroja IOException {}
Este método cierra la secuencia de salida del archivo. Libera cualquier recurso del
sistema asociado con el archivo. Lanza una IOException.
2
El vacío protegido finalize () arroja IOException {}
Este método limpia la conexión al archivo. Asegura que se llama al método de
cierre de esta secuencia de salida de archivo cuando no hay más referencias a
esta secuencia. Lanza una IOException.
3
public int read (int r) arroja IOException {}
Este método lee el byte de datos especificado de InputStream. Devuelve un
int. Devuelve el siguiente byte de datos y -1 se devolverá si es el final del archivo.
44
public int read (byte [] r) arroja IOException {}
Este método lee r.length bytes de la secuencia de entrada en una
matriz. Devuelve el número total de bytes leídos. Si es el final del archivo, se
devolverá -1.
55
public int available () arroja IOException {}
Da el número de bytes que se pueden leer desde esta secuencia de entrada de
archivo. Devuelve un int.
Hay otros flujos de entrada importantes disponibles, para más detalles puede
consultar los siguientes enlaces:
ByteArrayInputStream
DataInputStream
FileOutputStream
FileOutputStream se utiliza para crear un archivo y escribir datos en él. La
secuencia crearía un archivo, si aún no existe, antes de abrirlo para la salida.
Aquí hay dos constructores que pueden usarse para crear un objeto
FileOutputStream.
El siguiente constructor toma un nombre de archivo como una cadena para
crear un objeto de flujo de entrada para escribir el archivo:
OutputStream f = new FileOutputStream("C:/java/hello")
El siguiente constructor toma un objeto de archivo para crear un objeto de flujo
de salida para escribir el archivo. Primero, creamos un objeto de archivo
usando el método File () de la siguiente manera:
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
Una vez que tenga el objeto OutputStream en la mano, hay una lista de
métodos auxiliares, que se pueden usar para escribir en la transmisión o para
realizar otras operaciones en la transmisión.
No Método y descripción
Señor.
1
public void close () arroja IOException {}
Este método cierra la secuencia de salida del archivo. Libera cualquier recurso del
sistema asociado con el archivo. Lanza una IOException.
2
El vacío protegido finalize () arroja IOException {}
Este método limpia la conexión al archivo. Asegura que se llama al método de
cierre de esta secuencia de salida de archivo cuando no hay más referencias a
esta secuencia. Lanza una IOException.
3
public void write (int w) lanza IOException {}
Este método escribe el byte especificado en la secuencia de salida.
44
escritura pública vacía (byte [] w)
Escribe w.length bytes de la matriz de bytes mencionada en OutputStream.
Hay otros flujos de salida importantes disponibles, para más detalles puede
consultar los siguientes enlaces:
ByteArrayOutputStream
DataOutputStream
Ejemplo
El siguiente es el ejemplo para demostrar InputStream y OutputStream:
import java.io.*;
public class fileStreamTest {
try {
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for(int x = 0; x < bWrite.length ; x++) {
os.write( bWrite[x] ); // writes the bytes
}
os.close();
Navegación de archivos y E / S
Hay varias otras clases por las que estaríamos pasando para conocer los
conceptos básicos de File Navigation y I / O.
Clase de archivo
Clase FileReader
Clase FileWriter
Directorios en Java
Un directorio es un archivo que puede contener una lista de otros archivos y
directorios. Utiliza el objeto Archivo para crear directorios, para enumerar los
archivos disponibles en un directorio. Para obtener detalles completos,
consulte una lista de todos los métodos a los que puede llamar en el objeto
Archivo y lo que está relacionado con los directorios.
Crear directorios
Hay dos métodos útiles de utilidad de archivos , que se pueden utilizar para
crear directorios:
El método mkdir () crea un directorio, devolviendo verdadero en caso de éxito y
falso en caso de error. La falla indica que la ruta especificada en el objeto File ya
existe o que el directorio no se puede crear porque toda la ruta aún no existe.
El método mkdirs () crea un directorio y todos los padres del directorio.
El siguiente ejemplo crea el directorio "/ tmp / user / java / bin" -
Ejemplo
import java.io.File;
public class CreateDir {
Listado de directorios
Puede usar el método list () proporcionado por el objeto File para enumerar
todos los archivos y directorios disponibles en un directorio de la siguiente
manera:
Ejemplo
import java.io.File;
public class ReadDir {
try {
// create new file object
file = new File("/tmp");
Ejemplo
Demo en vivo
import java.io.File;
import java.io.FileReader;
Salida
C:\>javac FilenotFound_Demo.java
FilenotFound_Demo.java:8: error: unreported exception
FileNotFoundException; must be caught or declared to be
thrown
FileReader fr = new FileReader(file);
^
1 error
Nota : Dado que los métodos read () y close () de la clase FileReader arrojan
IOException, puede observar que el compilador notifica que maneja
IOException, junto con FileNotFoundException.
Excepciones no verificadas: una excepción no verificada es una excepción que
ocurre en el momento de la ejecución. También se denominan excepciones de
tiempo de ejecución . Estos incluyen errores de programación, como errores
lógicos o uso incorrecto de una API. Las excepciones de tiempo de ejecución se
ignoran en el momento de la compilación.
Por ejemplo, si se ha declarado una matriz de tamaño 5 en su programa, y
tratando de llamar a la 6 ª elemento de la matriz a continuación,
un ArrayIndexOutOfBoundsExceptionexception se produce.
Ejemplo
Demo en vivo
public class Unchecked_Demo {
Salida
Jerarquía de excepciones
Todas las clases de excepción son subtipos de la clase
java.lang.Exception. La clase de excepción es una subclase de la clase
Throwable. Además de la clase de excepción, hay otra subclase llamada Error
que se deriva de la clase Throwable.
Los errores son condiciones anormales que ocurren en caso de fallas graves,
estos no son manejados por los programas Java. Los errores se generan para
indicar errores generados por el entorno de tiempo de ejecución. Ejemplo:
JVM no tiene memoria. Normalmente, los programas no pueden recuperarse
de los errores.
La clase Exception tiene dos subclases principales: la clase IOException y la
clase RuntimeException.
Métodos de excepciones
La siguiente es la lista de métodos importantes disponibles en la clase
Throwable.
No Método y descripción
Señor.
1
public String getMessage ()
Devuelve un mensaje detallado sobre la excepción que ha ocurrido. Este mensaje
se inicializa en el constructor Throwable.
2
public Throwable getCause ()
Devuelve la causa de la excepción representada por un objeto Throwable.
3
public String toString ()
Devuelve el nombre de la clase concatenada con el resultado de getMessage ().
44
public void printStackTrace ()
Imprime el resultado de toString () junto con el seguimiento de la pila en
System.err, la secuencia de salida de error.
55
public StackTraceElement [] getStackTrace ()
Devuelve una matriz que contiene cada elemento en el seguimiento de la pila. El
elemento en el índice 0 representa la parte superior de la pila de llamadas, y el
último elemento en la matriz representa el método en la parte inferior de la pila de
llamadas.
66
public Throwable fillInStackTrace ()
Llena el seguimiento de la pila de este objeto Throwable con el seguimiento de la
pila actual, agregando a cualquier información previa en el seguimiento de la pila.
Capturando excepciones
Un método detecta una excepción utilizando una combinación de las palabras
clave try y catch . Se coloca un bloque try / catch alrededor del código que
podría generar una excepción. El código dentro de un bloque try / catch se
conoce como código protegido, y la sintaxis para usar try / catch es similar a la
siguiente:
Sintaxis
try {
// Protected code
} catch (ExceptionName e1) {
// Catch block
}
El código que es propenso a excepciones se coloca en el bloque try. Cuando
se produce una excepción, esa excepción se maneja mediante el bloque catch
asociado a ella. Cada bloque de prueba debe ser seguido inmediatamente por
un bloque de captura o finalmente un bloque.
Una declaración catch implica declarar el tipo de excepción que está
intentando detectar. Si se produce una excepción en el código protegido, se
comprueba el bloque (o bloques) de captura que sigue al intento. Si el tipo de
excepción que se produjo aparece en un bloque catch, la excepción se pasa al
bloque catch de la misma forma que se pasa un argumento a un parámetro de
método.
Ejemplo
Salida
Exception thrown :java.lang.ArrayIndexOutOfBoundsException:
3
Out of the block
Sintaxis
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}
Las declaraciones anteriores demuestran tres bloques catch, pero puede tener
cualquier número de ellos después de un solo intento. Si se produce una
excepción en el código protegido, la excepción se lanza al primer bloque catch
de la lista. Si el tipo de datos de la excepción lanzada coincide con
ExceptionType1, queda atrapado allí. Si no, la excepción pasa a la segunda
instrucción catch. Esto continúa hasta que la excepción se detecta o cae en
todas las capturas, en cuyo caso el método actual detiene la ejecución y la
excepción se arroja al método anterior en la pila de llamadas.
Ejemplo
Aquí hay un segmento de código que muestra cómo usar múltiples
declaraciones try / catch.
try {
file = new FileInputStream(fileName);
x = (byte) file.read();
} catch (IOException i) {
i.printStackTrace();
return -1;
} catch (FileNotFoundException f) // Not valid! {
f.printStackTrace();
return -1;
}
Ejemplo
import java.io.*;
public class className {
Ejemplo
import java.io.*;
public class className {
El finalmente bloque
El bloque finalmente sigue a un bloque de prueba o un bloque de captura. Un
bloque de código finalmente siempre se ejecuta, independientemente de la
aparición de una excepción.
El uso de un último bloque le permite ejecutar cualquier tipo de instrucción de
limpieza que desee ejecutar, sin importar lo que suceda en el código
protegido.
Finalmente aparece un bloque al final de los bloques catch y tiene la siguiente
sintaxis:
Sintaxis
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}finally {
// The finally block always executes.
}
Ejemplo
Demo en vivo
public class ExcepTest {
Salida
Exception thrown :java.lang.ArrayIndexOutOfBoundsException:
3
First element value: 6
The finally statement is executed
Tenga en cuenta lo siguiente:
Una cláusula catch no puede existir sin una declaración try.
No es obligatorio tener cláusulas finales siempre que haya un bloque try / catch.
El bloque try no puede estar presente sin la cláusula catch o la cláusula
finalmente.
Cualquier código no puede estar presente entre los bloques try, catch y finalmente.
Ejemplo
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
Sintaxis
Ejemplo
import java.io.FileReader;
import java.io.IOException;
Ejemplo
Salida
Depositing $500...
Withdrawing $100...
Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
at CheckingAccount.withdraw(CheckingAccount.java:25)
at BankDemo.main(BankDemo.java:13)
Excepciones Comunes
En Java, es posible definir dos categorías de Excepciones y Errores.
Excepciones de JVM : estas son excepciones / errores que JVM
genera exclusiva o lógicamente. Ejemplos: NullPointerException,
ArrayIndexOutOfBoundsException, ClassCastException.
Excepciones programáticas : estas excepciones son lanzadas explícitamente
por la aplicación o los programadores de API. Ejemplos:
IllegalArgumentException, IllegalStateException.
Clases anidadas
En Java, al igual que los métodos, las variables de una clase también pueden
tener otra clase como miembro. Escribir una clase dentro de otra está
permitido en Java. La clase escrita dentro se llama clase anidada , y la clase
que contiene la clase interna se llama clase externa .
Sintaxis
La siguiente es la sintaxis para escribir una clase anidada. Aquí, la
clase Outer_Demo es la clase externa y la clase Inner_Demo es la clase
anidada.
class Outer_Demo {
class Inner_Demo {
}
}
Las clases anidadas se dividen en dos tipos:
Clases anidadas no estáticas : son los miembros no estáticos de una clase.
Clases anidadas estáticas : son los miembros estáticos de una clase.
Clase interior
Método de clase interna local
Clase interna anónima
Clase interior
Crear una clase interna es bastante simple. Solo necesita escribir una clase
dentro de una clase. A diferencia de una clase, una clase interna puede ser
privada y una vez que declaras que una clase interna es privada, no se puede
acceder desde un objeto fuera de la clase.
El siguiente es el programa para crear una clase interna y acceder a ella. En el
ejemplo dado, hacemos que la clase interna sea privada y accedemos a la
clase a través de un método.
Ejemplo
Demo en vivo
class Outer_Demo {
int num;
// inner class
private class Inner_Demo {
public void print() {
System.out.println("This is an inner class");
}
}
// inner class
public class Inner_Demo {
public int getNum() {
System.out.println("This is the getnum method of the
inner class");
return num;
}
}
}
Código de muestra
El siguiente es un ejemplo que demuestra la herencia de Java. En este
ejemplo, puede observar dos clases, a saber, Cálculo y Mi cálculo.
Usando la palabra clave extend, My_Calculation hereda los métodos suma () y
Resta () de la clase Cálculo.
Copie y pegue el siguiente programa en un archivo con el nombre
My_Calculation.java
Ejemplo
Demo en vivo
class Calculation {
int z;
Código de muestra
Código de muestra
El programa dado en esta sección muestra cómo usar la palabra clave super
para invocar al constructor parametrizado de la superclase. Este programa
contiene una superclase y una subclase, donde la superclase contiene un
constructor parametrizado que acepta un valor entero, y usamos la palabra
clave super para invocar al constructor parametrizado de la superclase.
Copie y pegue el siguiente programa en un archivo con el nombre
Subclass.java
Ejemplo
Demo en vivo
class Superclass {
int age;
Superclass(int age) {
this.age = age;
}
Relación IS-A
IS-A es una forma de decir: este objeto es un tipo de ese objeto. Veamos
cómo la extiende palabra clave se utiliza para lograr herencia.
clase pública animal { }
Tipos de herencia
Hay varios tipos de herencia como se demuestra a continuación.
Sin embargo, una clase puede implementar una o más interfaces, lo que ha
ayudado a Java a deshacerse de la imposibilidad de herencia múltiple.
Java: anulación
En el capítulo anterior, hablamos sobre superclases y subclases. Si una clase
hereda un método de su superclase, existe la posibilidad de anular el método
siempre que no esté marcado como final.
El beneficio de la anulación es: la capacidad de definir un comportamiento
específico para el tipo de subclase, lo que significa que una subclase puede
implementar un método de clase padre en función de sus requisitos.
En términos orientados a objetos, anular significa anular la funcionalidad de un
método existente.
Ejemplo
Veamos un ejemplo.
Demo en vivo
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
Salida
Ejemplo
Demo en vivo
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
Salida
Ejemplo
Demo en vivo
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
Salida
Ejemplo
Veamos un ejemplo.
public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}
Un ciervo es un animal
Un ciervo es un vegetariano
Un ciervo es un ciervo
Un ciervo es un objeto
Cuando aplicamos los hechos variables de referencia a una referencia de
objeto Deer, las siguientes declaraciones son legales:
Ejemplo
Métodos virtuales
En esta sección, le mostraré cómo el comportamiento de los métodos
anulados en Java le permite aprovechar el polimorfismo al diseñar sus clases.
Ya hemos discutido la anulación de métodos, donde una clase secundaria
puede anular un método en su padre. Un método anulado está esencialmente
oculto en la clase primaria y no se invoca a menos que la clase secundaria
use la palabra clave super dentro del método de anulación.
Ejemplo
Salida
Constructing an Employee
Constructing an Employee
Java - Abstracción
Según el diccionario, la abstracción es la calidad de tratar con ideas en lugar
de eventos. Por ejemplo, cuando considera el caso del correo electrónico, los
detalles complejos como lo que sucede tan pronto como envía un correo
electrónico, el protocolo que utiliza su servidor de correo electrónico quedan
ocultos para el usuario. Por lo tanto, para enviar un correo electrónico solo
necesita escribir el contenido, mencionar la dirección del receptor y hacer clic
en enviar.
Del mismo modo, en la programación orientada a objetos, la abstracción es un
proceso de ocultar los detalles de implementación del usuario, solo la
funcionalidad se proporcionará al usuario. En otras palabras, el usuario tendrá
la información sobre lo que hace el objeto en lugar de cómo lo hace.
En Java, la abstracción se logra usando clases abstractas e interfaces.
Clase abstracta
Una clase que contiene la palabra clave abstracta en su declaración se
conoce como clase abstracta.
Las clases abstractas pueden o no contener métodos abstractos , es decir,
métodos sin cuerpo (public void get ();)
Pero, si una clase tiene al menos un método abstracto, entonces la
clase debe declararse abstracta.
Si una clase se declara abstracta, no se puede instanciar.
Para usar una clase abstracta, debe heredarla de otra clase, proporcionar
implementaciones a los métodos abstractos en ella.
Si hereda una clase abstracta, debe proporcionar implementaciones a todos los
métodos abstractos que contiene.
Ejemplo
Ejemplo
Aquí, no puede crear una instancia de la clase Empleado, pero puede crear
una instancia de la Clase Salario, y utilizando esta instancia puede acceder a
los tres campos y siete métodos de la clase Empleado como se muestra a
continuación.
/* File name : AbstractDemo.java */
public class AbstractDemo {
Salida
Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0
Métodos abstractos
Si desea que una clase contenga un método particular pero desea que la
implementación real de ese método sea determinada por las clases
secundarias, puede declarar el método en la clase primaria como un resumen.
La palabra clave abstract se usa para declarar el método como abstract.
Debe colocar la palabra clave abstracta antes del nombre del método en la
declaración del método.
Un método abstracto contiene una firma de método, pero ningún cuerpo de
método.
En lugar de llaves, un método abstracto tendrá un semoi colon (;) al final.
El siguiente es un ejemplo del método abstracto.
Ejemplo
Java - Encapsulación
La encapsulación es uno de los cuatro conceptos fundamentales de
OOP. Los otros tres son herencia, polimorfismo y abstracción.
La encapsulación en Java es un mecanismo para envolver los datos
(variables) y el código que actúa sobre los datos (métodos) juntos como una
sola unidad. En la encapsulación, las variables de una clase se ocultarán de
otras clases y solo se podrá acceder a ellas a través de los métodos de su
clase actual. Por lo tanto, también se conoce como ocultación de datos .
Para lograr la encapsulación en Java:
Declarar las variables de una clase como privadas.
Proporcione métodos setter y getter públicos para modificar y ver los valores de
las variables.
Ejemplo
Salida
Beneficios de la encapsulación
Los campos de una clase se pueden hacer de solo lectura o solo de escritura.
Una clase puede tener control total sobre lo que está almacenado en sus campos.
Java - Interfaces
Una interfaz es un tipo de referencia en Java. Es similar a la clase. Es una
colección de métodos abstractos. Una clase implementa una interfaz,
heredando así los métodos abstractos de la interfaz.
Junto con los métodos abstractos, una interfaz también puede contener
constantes, métodos predeterminados, métodos estáticos y tipos
anidados. Los cuerpos de método existen solo para métodos predeterminados
y métodos estáticos.
Escribir una interfaz es similar a escribir una clase. Pero una clase describe
los atributos y comportamientos de un objeto. Y una interfaz contiene
comportamientos que implementa una clase.
A menos que la clase que implementa la interfaz sea abstracta, todos los
métodos de la interfaz deben definirse en la clase.
Una interfaz es similar a una clase de las siguientes maneras:
Una interfaz puede contener cualquier cantidad de métodos.
Una interfaz se escribe en un archivo con una extensión .java , con el nombre de
la interfaz que coincide con el nombre del archivo.
El código de byte de una interfaz aparece en un archivo .class .
Las interfaces aparecen en paquetes, y su archivo de bytecode correspondiente
debe estar en una estructura de directorio que coincida con el nombre del
paquete.
Sin embargo, una interfaz es diferente de una clase en varias formas,
incluyendo:
No puede crear una instancia de una interfaz.
Una interfaz no contiene ningún constructor.
Todos los métodos en una interfaz son abstractos.
Una interfaz no puede contener campos de instancia. Los únicos campos que
pueden aparecer en una interfaz deben declararse tanto estáticos como finales.
Una clase no extiende una interfaz; Es implementado por una clase.
Una interfaz puede extender múltiples interfaces.
Declarando interfaces
La palabra clave de interfaz se utiliza para declarar una interfaz. Aquí hay un
ejemplo simple para declarar una interfaz:
Ejemplo
Ejemplo
Implementación de interfaces
Cuando una clase implementa una interfaz, puede pensar en la clase como
firmando un contrato, acordando realizar los comportamientos específicos de
la interfaz. Si una clase no realiza todos los comportamientos de la interfaz, la
clase debe declararse como abstracta.
Una clase utiliza los instrumentos de palabras clave para implementar una
interfaz. La palabra clave implements aparece en la declaración de clase
después de la porción extendida de la declaración.
Ejemplo
Salida
Mammal eats
Mammal travels
Al anular los métodos definidos en las interfaces, hay varias reglas a seguir:
Las excepciones marcadas no deben declararse en métodos de implementación
que no sean los declarados por el método de interfaz o las subclases de los
declarados por el método de interfaz.
La firma del método de interfaz y el mismo tipo o subtipo de retorno deben
mantenerse al anular los métodos.
Una clase de implementación en sí misma puede ser abstracta y, de ser así, no es
necesario implementar métodos de interfaz.
Cuando las interfaces de implementación, hay varias reglas:
Una clase puede implementar más de una interfaz a la vez.
Una clase puede extender solo una clase, pero implementar muchas interfaces.
Una interfaz puede extender otra interfaz, de manera similar a como una clase
puede extender otra clase.
Interfaces extensibles
Una interfaz puede extender otra interfaz de la misma manera que una clase
puede extender otra clase. La palabra clave extend se utiliza para extender
una interfaz, y la interfaz secundaria hereda los métodos de la interfaz
principal.
La siguiente interfaz de deportes se amplía con las interfaces de hockey y
fútbol.
Ejemplo
// Filename: Sports.java
public interface Sports {
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// Filename: Football.java
public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// Filename: Hockey.java
public interface Hockey extends Sports {
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
La interfaz de Hockey tiene cuatro métodos, pero hereda dos de Deportes; por
lo tanto, una clase que implementa Hockey necesita implementar los seis
métodos. Del mismo modo, una clase que implementa Fútbol debe definir los
tres métodos de Fútbol y los dos métodos de Deportes.
Ejemplo
Etiquetado de interfaces
El uso más común de las interfaces de extensión se produce cuando la
interfaz principal no contiene ningún método. Por ejemplo, la interfaz
MouseListener en el paquete java.awt.event extendió java.util.EventListener,
que se define como -
Ejemplo
package java.util;
public interface EventListener
{}
Una interfaz sin métodos se denomina interfaz de etiquetado . Hay dos
propósitos de diseño básicos para etiquetar interfaces:
Crea un padre común : al igual que con la interfaz EventListener, que se
extiende por docenas de otras interfaces en la API de Java, puede usar una
interfaz de etiquetado para crear un padre común entre un grupo de
interfaces. Por ejemplo, cuando una interfaz extiende EventListener, la JVM
sabe que esta interfaz en particular se utilizará en un escenario de delegación
de eventos.
Agrega un tipo de datos a una clase : esta situación es de donde proviene el
término etiquetado. Una clase que implementa una interfaz de etiquetado no
necesita definir ningún método (ya que la interfaz no tiene ninguno), pero la
clase se convierte en un tipo de interfaz a través del polimorfismo.
Java - Paquetes
Los paquetes se utilizan en Java para evitar conflictos de nombres, controlar el
acceso, facilitar la búsqueda / localización y el uso de clases, interfaces,
enumeraciones y anotaciones, etc.
Un paquete se puede definir como una agrupación de tipos relacionados
(clases, interfaces, enumeraciones y anotaciones) que proporcionan
protección de acceso y gestión de espacios de nombres.
Algunos de los paquetes existentes en Java son:
java.lang - agrupa las clases fundamentales
java.io : las clases para las funciones de entrada y salida se incluyen en este
paquete
Los programadores pueden definir sus propios paquetes para agrupar grupos
de clases / interfaces, etc. Es una buena práctica agrupar clases relacionadas
implementadas por usted para que un programador pueda determinar
fácilmente que las clases, interfaces, enumeraciones y anotaciones están
relacionadas.
Como el paquete crea un nuevo espacio de nombres, no habrá conflictos de
nombres con nombres en otros paquetes. Usando paquetes, es más fácil
proporcionar control de acceso y también es más fácil localizar las clases
relacionadas.
Crear un paquete
Al crear un paquete, debe elegir un nombre para el paquete e incluir
una declaración de paquete junto con ese nombre en la parte superior de
cada archivo fuente que contenga las clases, interfaces, enumeraciones y
tipos de anotaciones que desea incluir en el paquete.
La declaración del paquete debe ser la primera línea del archivo fuente. Solo
puede haber una declaración de paquete en cada archivo fuente, y se aplica a
todos los tipos en el archivo.
Si no se usa una declaración de paquete, la clase, las interfaces, las
enumeraciones y los tipos de anotaciones se colocarán en el paquete
predeterminado actual.
Para compilar los programas Java con instrucciones de paquete, debe usar la
opción -d como se muestra a continuación.
javac -d Destination_folder file_name.java
Luego, se crea una carpeta con el nombre de paquete dado en el destino
especificado, y los archivos de clase compilados se colocarán en esa carpeta.
Ejemplo
interface Animal {
public void eat();
public void travel();
}
Ejemplo
Aquí, se agrega una clase llamada Jefe al paquete de nómina que ya contiene
Empleado. El Jefe puede referirse a la clase Empleado sin usar el prefijo de
nómina, como lo demuestra la siguiente clase Jefe.
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
import payroll.*;
class Ups {
}
<path-two>\classes\com\apple\computers\Dell.class
Al hacer esto, es posible dar acceso al directorio de clases a otros
programadores sin revelar sus fuentes. También debe administrar los archivos
fuente y de clase de esta manera para que el compilador y la máquina virtual
Java (JVM) puedan encontrar todos los tipos que utiliza su programa.
La ruta completa al directorio de clases, <path-two> \ classes, se denomina
ruta de clase y se establece con la variable de sistema CLASSPATH. Tanto el
compilador como la JVM construyen la ruta a sus archivos .class agregando el
nombre del paquete a la ruta de la clase.
Digamos que <path-two> \ classes es la ruta de clase, y el nombre del paquete
es com.apple.computers, entonces el compilador y JVM buscarán archivos
.class en <path-two> \ classes \ com \ apple \ computers.
Una ruta de clase puede incluir varias rutas. Las rutas múltiples deben estar
separadas por punto y coma (Windows) o dos puntos (Unix). Por defecto, el
compilador y la JVM buscan el directorio actual y el archivo JAR que contiene
las clases de la plataforma Java para que estos directorios estén
automáticamente en la ruta de clase.
Enumeración
BitSet
Vector
Apilar
Diccionario
Tabla de picadillo
Propiedades
Todas estas clases ahora son heredadas y Java-2 ha introducido un nuevo
marco llamado Marco de colecciones, que se analiza en el próximo capítulo. -
La enumeración
La interfaz de enumeración no es en sí misma una estructura de datos, pero
es muy importante dentro del contexto de otras estructuras de datos. La
interfaz de enumeración define un medio para recuperar elementos sucesivos
de una estructura de datos.
Por ejemplo, Enumeration define un método llamado nextElement que se usa
para obtener el siguiente elemento en una estructura de datos que contiene
múltiples elementos.
Para tener más detalles sobre esta interfaz, consulte La enumeración .
El conjunto de bits
La clase BitSet implementa un grupo de bits o marcas que se pueden
establecer y borrar individualmente.
Esta clase es muy útil en casos en los que necesita mantenerse al día con un
conjunto de valores booleanos; solo asigna un bit a cada valor y lo establece o
borra según corresponda.
Para obtener más detalles sobre esta clase, consulte The BitSet .
El vector
La clase Vector es similar a una matriz Java tradicional, excepto que puede
crecer según sea necesario para acomodar nuevos elementos.
Al igual que una matriz, se puede acceder a los elementos de un objeto Vector
a través de un índice en el vector.
Lo bueno de usar la clase Vector es que no tiene que preocuparse por
establecerla en un tamaño específico después de la creación; se encoge y
crece automáticamente cuando es necesario.
Para obtener más detalles sobre esta clase, consulte The Vector .
La pila
La clase Stack implementa una pila de elementos de último en entrar, primero
en salir (LIFO).
Puedes pensar en una pila literalmente como una pila vertical de
objetos; cuando agrega un nuevo elemento, se apila sobre los demás.
Cuando sacas un elemento de la pila, sale de la parte superior. En otras
palabras, el último elemento que agregaste a la pila es el primero en volver.
Para obtener más detalles sobre esta clase, consulte The Stack .
El diccionario
La clase Dictionary es una clase abstracta que define una estructura de datos
para asignar claves a valores.
Esto es útil en los casos en que desea poder acceder a los datos a través de
una clave particular en lugar de un índice entero.
Dado que la clase Dictionary es abstracta, proporciona solo el marco para una
estructura de datos mapeada de claves en lugar de una implementación
específica.
Para más detalles sobre esta clase, consulte The Dictionary .
La tabla hash
La clase Hashtable proporciona un medio para organizar datos basados en
alguna estructura clave definida por el usuario.
Por ejemplo, en una tabla hash de la lista de direcciones, puede almacenar y
ordenar datos según una clave como el código postal en lugar del nombre de
una persona.
El significado específico de las claves con respecto a las tablas hash depende
totalmente del uso de la tabla hash y de los datos que contiene.
Para obtener más detalles sobre esta clase, consulte The Hashtable .
Las propiedades
Properties es una subclase de Hashtable. Se utiliza para mantener listas de
valores en los que la clave es una Cadena y el valor también es una Cadena.
La clase Propiedades es utilizada por muchas otras clases Java. Por ejemplo,
es el tipo de objeto devuelto por System.getProperties () al obtener valores
ambientales.
Para obtener más detalles sobre esta clase, consulte Las propiedades .
No Interfaz y descripción
Señor.
1 La interfaz de la colección
2 La interfaz de la lista
Esto extiende la Colección y una instancia de Lista almacena una colección
ordenada de elementos.
3 El conjunto
Esto extiende la Colección para manejar conjuntos, que deben contener
elementos únicos.
44 El conjunto ordenado
Esto extiende Set para manejar conjuntos ordenados.
55 El mapa
Esto asigna claves únicas a valores.
66 The Map.Entry
Esto describe un elemento (un par clave / valor) en un mapa. Esta es una clase
interna de Mapa.
77 El mapa ordenado
Esto extiende Map para que las claves se mantengan en orden ascendente.
8 La enumeración
Esta interfaz heredada define los métodos por los cuales puede enumerar
(obtener uno a la vez) los elementos en una colección de objetos. Esta interfaz
heredada ha sido reemplazada por Iterator.
No Clase y descripción
Señor.
1
ResumenColección
Implementa la mayor parte de la interfaz de la Colección.
2
AbstractList
Extiende AbstractCollection e implementa la mayor parte de la interfaz List.
3
AbstractSequentialList
Extiende AbstractList para que lo use una colección que usa acceso secuencial
en lugar de aleatorio de sus elementos.
44 Lista enlazada
Implementa una lista vinculada al extender AbstractSequentialList.
55 Lista de arreglo
Implementa una matriz dinámica extendiendo AbstractList.
66
AbstractSet
Extiende AbstractCollection e implementa la mayor parte de la interfaz Set.
77 HashSet
Extiende AbstractSet para usar con una tabla hash.
8 LinkedHashSet
Extiende HashSet para permitir iteraciones de orden de inserción.
99 TreeSet
Implementa un conjunto almacenado en un árbol. Extiende AbstractSet.
10
ResumenMapa
Implementa la mayor parte de la interfaz del mapa.
11 HashMap
Extiende AbstractMap para usar una tabla hash.
12 TreeMap
Extiende AbstractMap para usar un árbol.
13 WeakHashMap
Extiende AbstractMap para usar una tabla hash con claves débiles.
14 LinkedHashMap
Extiende HashMap para permitir iteraciones de orden de inserción.
15 IdentityHashMap
Extiende AbstractMap y utiliza la igualdad de referencia al comparar documentos.
No Clase y descripción
Señor.
1 Vector
Esto implementa una matriz dinámica. Es similar a ArrayList, pero con algunas
diferencias.
2 Apilar
Stack es una subclase de Vector que implementa una pila estándar de último en
entrar, primero en salir.
3 Diccionario
Dictionary es una clase abstracta que representa un repositorio de
almacenamiento de clave / valor y funciona de manera muy similar a Map.
44 Tabla de picadillo
Hashtable era parte del java.util original y es una implementación concreta de un
Diccionario.
55 Propiedades
Properties es una subclase de Hashtable. Se utiliza para mantener listas de
valores en los que la clave es una Cadena y el valor también es una Cadena.
66 BitSet
Una clase BitSet crea un tipo especial de matriz que contiene valores de bit. Esta
matriz puede aumentar de tamaño según sea necesario.
Aquí hay una lista de todos los métodos con ejemplos proporcionados por las
interfaces Iterator y ListIterator.
Aquí hay una lista de todos los métodos con ejemplos proporcionados por
Comparator Interface.
Resumen
El marco de colecciones de Java le da al programador acceso a estructuras de
datos preempaquetadas, así como a algoritmos para manipularlas.
Una colección es un objeto que puede contener referencias a otros
objetos. Las interfaces de recopilación declaran las operaciones que se
pueden realizar en cada tipo de recopilación.
Las clases e interfaces del marco de colecciones están en el paquete java.util.
Java - Genéricos
Sería bueno si pudiéramos escribir un único método de ordenación que
pudiera ordenar los elementos en una matriz Integer, una matriz String o una
matriz de cualquier tipo que admita el orden.
Los métodos genéricos de Java y las clases genéricas permiten a los
programadores especificar, con una sola declaración de método, un conjunto
de métodos relacionados, o con una sola declaración de clase, un conjunto de
tipos relacionados, respectivamente.
Los genéricos también proporcionan seguridad de tipo en tiempo de
compilación que permite a los programadores capturar tipos no válidos en
tiempo de compilación.
Usando el concepto genérico de Java, podríamos escribir un método genérico
para ordenar una matriz de objetos, luego invocar el método genérico con
matrices enteras, matrices dobles, matrices de cadenas, etc., para clasificar
los elementos de la matriz.
Métodos genéricos
Puede escribir una única declaración de método genérico que se pueda
invocar con argumentos de diferentes tipos. Según los tipos de argumentos
pasados al método genérico, el compilador maneja cada llamada al método de
manera apropiada. Las siguientes son las reglas para definir los métodos
genéricos:
Todas las declaraciones de métodos genéricos tienen una sección de parámetros
de tipo delimitada por corchetes angulares (<y>) que precede al tipo de retorno
del método (<E> en el siguiente ejemplo).
Cada sección de parámetros de tipo contiene uno o más parámetros de tipo
separados por comas. Un parámetro de tipo, también conocido como variable de
tipo, es un identificador que especifica un nombre de tipo genérico.
Los parámetros de tipo se pueden usar para declarar el tipo de retorno y actuar
como marcadores de posición para los tipos de argumentos pasados al método
genérico, que se conocen como argumentos de tipo real.
El cuerpo de un método genérico se declara como el de cualquier otro
método. Tenga en cuenta que los parámetros de tipo solo pueden representar
tipos de referencia, no tipos primitivos (como int, double y char).
Ejemplo
Salida
Array integerArray contains:
1 2 3 4 5
Ejemplo
if(y.compareTo(max) > 0) {
max = y; // y is the largest so far
}
if(z.compareTo(max) > 0) {
max = z; // z is the largest now
}
return max; // returns the largest object
}
Salida
Max of 3, 4 and 5 is 5
Clases Genéricas
Una declaración de clase genérica se parece a una declaración de clase no
genérica, excepto que el nombre de la clase es seguido por una sección de
parámetro de tipo.
Al igual que con los métodos genéricos, la sección de parámetros de tipo de
una clase genérica puede tener uno o más parámetros de tipo separados por
comas. Estas clases se conocen como clases parametrizadas o tipos
parametrizados porque aceptan uno o más parámetros.
Ejemplo
public T get() {
return t;
}
integerBox.add(new Integer(10));
stringBox.add(new String("Hello World"));
Salida
Integer Value :10
String Value :Hello World
Java - Serialización
Java proporciona un mecanismo, llamado serialización de objetos, donde un
objeto puede representarse como una secuencia de bytes que incluye los
datos del objeto, así como información sobre el tipo de objeto y los tipos de
datos almacenados en el objeto.
Después de que un objeto serializado se haya escrito en un archivo, se puede
leer del archivo y deserializarlo, es decir, la información de tipo y los bytes que
representan el objeto y sus datos se pueden usar para recrear el objeto en la
memoria.
Lo más impresionante es que todo el proceso es independiente de JVM, lo
que significa que un objeto se puede serializar en una plataforma y
deserializar en una plataforma completamente diferente.
Las clases ObjectInputStream y ObjectOutputStream son flujos de alto
nivel que contienen los métodos para serializar y deserializar un objeto.
La clase ObjectOutputStream contiene muchos métodos de escritura para
escribir varios tipos de datos, pero un método en particular se destaca:
public final void writeObject(Object x) throws IOException
El método anterior serializa un objeto y lo envía a la secuencia de salida. Del
mismo modo, la clase ObjectInputStream contiene el siguiente método para
deserializar un objeto:
public final Object readObject() throws IOException,
ClassNotFoundException
Este método recupera el siguiente objeto fuera de la secuencia y lo
deserializa. El valor de retorno es Object, por lo que deberá convertirlo a su
tipo de datos apropiado.
Para demostrar cómo funciona la serialización en Java, voy a usar la clase
Employee que discutimos al principio del libro. Supongamos que tenemos la
siguiente clase Employee, que implementa la interfaz serializable:
Ejemplo
Serializar un objeto
La clase ObjectOutputStream se usa para serializar un objeto. El siguiente
programa SerializeDemo crea una instancia de un objeto Employee y lo
serializa en un archivo.
Cuando el programa termina de ejecutarse, se crea un archivo llamado
employee.ser. El programa no genera ningún resultado, pero estudia el código
e intenta determinar qué está haciendo el programa.
Nota : Al serializar un objeto en un archivo, la convención estándar en Java es
darle al archivo una extensión .ser .
Ejemplo
import java.io.*;
public class SerializeDemo {
try {
FileOutputStream fileOut =
new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new
ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in
/tmp/employee.ser");
} catch (IOException i) {
i.printStackTrace();
}
}
}
Deserializar un objeto
El siguiente programa DeserializeDemo deserializa el objeto Empleado creado
en el programa SerializeDemo. Estudie el programa e intente determinar su
salida.
Ejemplo
import java.io.*;
public class DeserializeDemo {
System.out.println("Deserialized Employee...");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
}
}
Salida
Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101
Aquí están los siguientes puntos importantes a tener en cuenta:
El bloque try / catch intenta atrapar una ClassNotFoundException, que es
declarada por el método readObject (). Para que una JVM pueda deserializar un
objeto, debe poder encontrar el código de bytes para la clase. Si la JVM no puede
encontrar una clase durante la deserialización de un objeto, arroja una
ClassNotFoundException.
Observe que el valor de retorno de readObject () se convierte en una referencia de
empleado.
El valor del campo SSN era 11122333 cuando se serializó el objeto, pero debido a
que el campo es transitorio, este valor no se envió a la secuencia de salida. El
campo SSN del objeto empleado deserializado es 0.
Java - Redes
El término programación de red se refiere a escribir programas que se
ejecutan a través de múltiples dispositivos (computadoras), en los cuales
todos los dispositivos están conectados entre sí mediante una red.
El paquete java.net de las API J2SE contiene una colección de clases e
interfaces que proporcionan los detalles de comunicación de bajo nivel, lo que
le permite escribir programas que se centran en resolver el problema en
cuestión.
El paquete java.net proporciona soporte para los dos protocolos de red
comunes:
TCP : TCP significa Protocolo de control de transmisión, que permite una
comunicación confiable entre dos aplicaciones. TCP generalmente se usa sobre
el Protocolo de Internet, que se conoce como TCP / IP.
UDP : UDP significa User Datagram Protocol, un protocolo sin conexión que
permite la transmisión de paquetes de datos entre aplicaciones.
Este capítulo ofrece una buena comprensión de los siguientes dos temas:
Programación de sockets : este es el concepto más utilizado en redes y se ha
explicado con mucho detalle.
Procesamiento de URL : esto se cubriría por separado. Haga clic aquí para
obtener información sobre el procesamiento de URL en lenguaje Java.
Programación de socket
Los sockets proporcionan el mecanismo de comunicación entre dos
computadoras que utilizan TCP. Un programa cliente crea un socket en su
extremo de la comunicación e intenta conectar ese socket a un servidor.
Cuando se realiza la conexión, el servidor crea un objeto de socket en su
extremo de la comunicación. El cliente y el servidor ahora pueden
comunicarse escribiendo y leyendo desde el socket.
La clase java.net.Socket representa un socket y la clase java.net.ServerSocket
proporciona un mecanismo para que el programa del servidor escuche a los
clientes y establezca conexiones con ellos.
Los siguientes pasos ocurren cuando se establece una conexión TCP entre
dos computadoras usando sockets:
El servidor crea una instancia de un objeto ServerSocket, que indica en qué
comunicación de número de puerto se producirá.
El servidor invoca el método accept () de la clase ServerSocket. Este método
espera hasta que un cliente se conecta al servidor en el puerto dado.
Después de que el servidor está esperando, un cliente crea una instancia de un
objeto Socket, especificando el nombre del servidor y el número de puerto para
conectarse.
El constructor de la clase Socket intenta conectar al cliente con el servidor
especificado y el número de puerto. Si se establece la comunicación, el cliente
ahora tiene un objeto Socket capaz de comunicarse con el servidor.
En el lado del servidor, el método accept () devuelve una referencia a un nuevo
socket en el servidor que está conectado al socket del cliente.
Una vez que se establecen las conexiones, la comunicación puede ocurrir
usando flujos de E / S. Cada socket tiene un OutputStream y un
InputStream. OutputStream del cliente está conectado a InputStream del
servidor, y InputStream del cliente está conectado a OutputStream del
servidor.
TCP es un protocolo de comunicación bidireccional, por lo tanto, los datos
pueden enviarse a través de ambos flujos al mismo tiempo. Las siguientes son
las clases útiles que proporcionan un conjunto completo de métodos para
implementar sockets.
Métodos de clase ServerSocket
Las aplicaciones del servidor utilizan la clase java.net.ServerSocket para
obtener un puerto y escuchar las solicitudes de los clientes.
La clase ServerSocket tiene cuatro constructores:
No Método y descripción
Señor.
No Método y descripción
Señor.
No Método y descripción
Señor.
Enchufe público ()
55 Crea un zócalo desconectado. Use el método connect () para conectar este socket
a un servidor.
No Método y descripción
Señor.
No Método y descripción
Señor.
String getHostAddress ()
44
Devuelve la cadena de la dirección IP en una presentación textual.
String getHostName ()
55
Obtiene el nombre de host para esta dirección IP.
InetAddress estática InetAddress getLocalHost ()
66
Devuelve el host local.
String toString ()
77
Convierte esta dirección IP en una cadena.
Ejemplo
Ejemplo
System.out.println(in.readUTF());
DataOutputStream out = new
DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to " +
server.getLocalSocketAddress()
+ "\nGoodbye!");
server.close();
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
Salida
Ejemplo
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compile y ejecute este programa para enviar un correo electrónico simple:
Salida
$ java SendEmail
Sent message successfully....
Si desea enviar un correo electrónico a múltiples destinatarios, los siguientes
métodos se utilizarían para especificar múltiples ID de correo electrónico:
void addRecipients(Message.RecipientType type, Address[]
addresses)
throws MessagingException
Aquí está la descripción de los parámetros:
tipo : se establecería en TO, CC o BCC. Aquí CC representa Carbon Copy y BCC
representa Black Carbon Copy. Ejemplo: Message.RecipientType.TO
direcciones : esta es una matriz de ID de correo electrónico. Debería usar el
método InternetAddress () al especificar ID de correo electrónico.
Ejemplo
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compile y ejecute este programa para enviar un correo electrónico HTML:
Salida
$ java SendHTMLEmail
Sent message successfully....
Ejemplo
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compile y ejecute este programa para enviar un correo electrónico HTML:
Salida
$ java SendFileEmail
Sent message successfully....
Java - Multithreading
Java es un lenguaje de programación multiproceso, lo que significa que
podemos desarrollar un programa multiproceso utilizando Java. Un programa
multiproceso contiene dos o más partes que pueden ejecutarse
simultáneamente y cada parte puede manejar una tarea diferente al mismo
tiempo haciendo un uso óptimo de los recursos disponibles, especialmente
cuando su computadora tiene múltiples CPU.
Por definición, la multitarea es cuando varios procesos comparten recursos de
procesamiento comunes, como una CPU. Multi-threading amplía la idea de la
multitarea en aplicaciones donde puede subdividir operaciones específicas
dentro de una sola aplicación en subprocesos individuales. Cada uno de los
hilos puede ejecutarse en paralelo. El sistema operativo divide el tiempo de
procesamiento no solo entre diferentes aplicaciones, sino también entre cada
subproceso dentro de una aplicación.
Multi-threading le permite escribir de una manera en la que múltiples
actividades pueden realizarse simultáneamente en el mismo programa.
Paso 1
Paso 2
Paso 3
Ejemplo
Salida
Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
Paso 1
Paso 2
Ejemplo
Salida
Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
Métodos de hilo
La siguiente es la lista de métodos importantes disponibles en la clase Thread.
No Método y descripción
Señor.
1
inicio nulo público ()
Inicia el hilo en una ruta de ejecución separada, luego invoca el método run () en
este objeto Thread.
2
vacío público run ()
Si este objeto Thread fue instanciado usando un objetivo Runnable separado, el
método run () se invoca en ese objeto Runnable.
3
public final void setName (nombre de cadena)
Cambia el nombre del objeto Thread. También hay un método getName () para
recuperar el nombre.
44
public final void setPriority (int prioridad)
Establece la prioridad de este objeto Thread. Los valores posibles están entre 1 y
10.
55
public final void setDaemon (booleano encendido)
Un parámetro de verdadero denota este Hilo como un hilo de demonio.
66
unión nula pública final (milisegundos largos)
El subproceso actual invoca este método en un segundo subproceso, lo que hace
que el subproceso actual se bloquee hasta que el segundo subproceso finalice o
pase el número especificado de milisegundos.
77
interrupción pública nula ()
Interrumpe este hilo, haciendo que continúe la ejecución si fue bloqueado por
alguna razón.
8
public boolean final isAlive ()
Devuelve verdadero si el hilo está vivo, que es en cualquier momento después de
que se ha iniciado el hilo pero antes de que se ejecute hasta su finalización.
No Método y descripción
Señor.
1
rendimiento vacío público estático ()
Hace que el subproceso actualmente en ejecución ceda el paso a cualquier otro
subproceso de la misma prioridad que esté esperando ser programado.
2
sueño vacío público estático (milisegundos largos)
Hace que el subproceso actualmente en ejecución se bloquee durante al menos
el número especificado de milisegundos.
3
booleano público estático HoldLock (Object x)
Devuelve verdadero si el hilo actual mantiene el bloqueo en el objeto dado.
44
Hilo público estático currentThread ()
Devuelve una referencia al hilo que se está ejecutando actualmente, que es el
hilo que invoca este método.
55
public static void dumpStack ()
Imprime el seguimiento de la pila para el subproceso que se está ejecutando
actualmente, lo cual es útil al depurar una aplicación multiproceso.
Ejemplo
System.out.println("Starting thread3...");
Thread thread3 = new GuessANumber(27);
thread3.start();
try {
thread3.join();
} catch (InterruptedException e) {
System.out.println("Thread interrupted.");
}
System.out.println("Starting thread4...");
Thread thread4 = new GuessANumber(75);
thread4.start();
System.out.println("main() is ending...");
}
}
Esto producirá el siguiente resultado. Puede probar este ejemplo una y otra
vez y obtendrá un resultado diferente cada vez.
Salida
Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......
java.applet.Applet
java.awt.Graphics
Sin esas declaraciones de importación, el compilador de Java no reconocería
las clases Applet y Graphics, a las que se refiere la clase applet.
La clase de applet
Cada applet es una extensión de la clase java.applet.Applet . La clase Applet
básica proporciona métodos que una clase Applet derivada puede llamar para
obtener información y servicios del contexto del navegador.
Estos incluyen métodos que hacen lo siguiente:
Solicitar información sobre el autor, la versión y los derechos de autor del applet
Solicitar una descripción de los parámetros que reconoce el applet
Inicializar el applet
Destruye el applet
Comienza la ejecución del applet
Detener la ejecución del applet
La clase Applet proporciona implementaciones predeterminadas de cada uno
de estos métodos. Esas implementaciones pueden anularse según sea
necesario.
El applet "Hola, Mundo" está completo tal como está. El único método anulado
es el método de pintura.
Invocar un applet
Se puede invocar un applet incrustando directivas en un archivo HTML y
visualizando el archivo a través de un visor de applet o un navegador
habilitado para Java.
La etiqueta <applet> es la base para incrustar un applet en un archivo
HTML. El siguiente es un ejemplo que invoca el applet "Hello, World":
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code = "HelloWorldApplet.class" width = "320"
height = "120">
If your browser was Java-enabled, a "Hello, World"
message would appear here.
</applet>
<hr>
</html>
Nota : puede consultar la etiqueta HTML Applet para obtener más información
sobre cómo llamar a applet desde HTML.
Se requiere el atributo de código de la etiqueta <applet>. Especifica la clase
de Applet para ejecutar. El ancho y la altura también son necesarios para
especificar el tamaño inicial del panel en el que se ejecuta un applet. La
directiva de applet debe cerrarse con una etiqueta </applet>.
Si un applet toma parámetros, se pueden pasar valores para los parámetros
agregando etiquetas <param> entre <applet> y </applet>. El navegador ignora
el texto y otras etiquetas entre las etiquetas de applet.
Los navegadores no habilitados para Java no procesan <applet> y
</applet>. Por lo tanto, cualquier cosa que aparezca entre las etiquetas, no
relacionada con el applet, es visible en los navegadores no habilitados para
Java.
El visor o navegador busca el código Java compilado en la ubicación del
documento. Para especificar lo contrario, use el atributo codebase de la
etiqueta <applet> como se muestra:
<applet codebase = "https://amrood.com/applets" code =
"HelloWorldApplet.class"
width = "320" height = "120">
Si un applet reside en un paquete distinto al predeterminado, el paquete de
retención debe especificarse en el atributo de código utilizando el carácter de
punto (.) Para separar los componentes del paquete / clase. Por ejemplo
<applet = "mypackage.subpackage.TestApplet.class"
width = "320" height = "120">
Obteniendo Parámetros de Applet
El siguiente ejemplo muestra cómo hacer que un applet responda a los
parámetros de configuración especificados en el documento. Este applet
muestra un patrón de tablero de ajedrez de color negro y un segundo color.
El segundo color y el tamaño de cada cuadrado pueden especificarse como
parámetros para el applet dentro del documento.
CheckerApplet obtiene sus parámetros en el método init (). También puede
obtener sus parámetros en el método paint (). Sin embargo, obtener los
valores y guardar la configuración una vez al comienzo del applet, en lugar de
cada actualización, es conveniente y eficiente.
El visor o navegador de applets llama al método init () de cada applet que
ejecuta. El espectador llama a init () una vez, inmediatamente después de
cargar el applet. (Applet.init () se implementa para no hacer nada). Anule la
implementación predeterminada para insertar un código de inicialización
personalizado.
El método Applet.getParameter () obtiene un parámetro dado el nombre del
parámetro (el valor de un parámetro siempre es una cadena). Si el valor es
numérico u otros datos sin caracteres, la cadena debe analizarse.
El siguiente es un esqueleto de CheckerApplet.java:
import java.applet.*;
import java.awt.*;
setBackground (Color.black);
setForeground (fg);
}
Manejo de eventos
Los applets heredan un grupo de métodos de manejo de eventos de la clase
Container. La clase Container define varios métodos, como processKeyEvent
y processMouseEvent, para manejar tipos particulares de eventos, y luego un
método general llamado processEvent.
Para reaccionar a un evento, un applet debe anular el método apropiado
específico del evento.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;
Mostrar imágenes
Un applet puede mostrar imágenes en formato GIF, JPEG, BMP y otros. Para
mostrar una imagen dentro del applet, utilice el método drawImage () que se
encuentra en la clase java.awt.Graphics.
El siguiente es un ejemplo que ilustra todos los pasos para mostrar imágenes:
import java.applet.*;
import java.awt.*;
import java.net.*;
Reproducción de audio
Un applet puede reproducir un archivo de audio representado por la interfaz
AudioClip en el paquete java.applet. La interfaz de AudioClip tiene tres
métodos, que incluyen:
public void play () : reproduce el clip de audio una vez, desde el principio.
public void loop () : hace que el clip de audio se reproduzca continuamente.
public void stop () : deja de reproducir el clip de audio.
Para obtener un objeto AudioClip, debe invocar el método getAudioClip () de la
clase Applet. El método getAudioClip () regresa inmediatamente, ya sea que la
URL se resuelva o no en un archivo de audio real. El archivo de audio no se
descarga hasta que se intente reproducir el clip de audio.
El siguiente es un ejemplo que ilustra todos los pasos para reproducir un
audio:
import java.applet.*;
import java.awt.*;
import java.net.*;
No Comentario y descripción
Señor.
1
/ * texto * /
El compilador ignora todo, desde / * hasta * /.
2
//texto
El compilador ignora todo, desde // hasta el final de la línea.
3
/ ** documentación * /
Este es un comentario de documentación y, en general, se llama comentario de
documentación . La herramienta JDK javadoc utiliza comentarios de
documentos al preparar documentación generada automáticamente.
¿Qué es Javadoc?
Javadoc es una herramienta que viene con JDK y se usa para generar
documentación de código Java en formato HTML a partir del código fuente de
Java, que requiere documentación en un formato predefinido.
El siguiente es un ejemplo simple donde las líneas dentro de /*….*/ son
comentarios de múltiples líneas de Java. Del mismo modo, la línea que
precede // es un comentario de línea única de Java.
Ejemplo
/**
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
*
* @author Zara Ali
* @version 1.0
* @since 2014-03-31
*/
public class HelloWorld {
Ejemplo
/**
* <h1>Hello, World!</h1>
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
* <p>
* Giving proper comments in your program makes it more
* user friendly and it is assumed as a high quality code.
*
*
* @author Zara Ali
* @version 1.0
* @since 2014-03-31
*/
public class HelloWorld {
@serialData Documenta los datos escritos por los métodos Descripción de datos
writeObject () o writeExternal (). de @serialData
Ejemplo
El siguiente programa utiliza algunas de las etiquetas importantes disponibles
para comentarios de documentación. Puede utilizar otras etiquetas según sus
requisitos.
La documentación sobre la clase AddNum se producirá en el archivo HTML
AddNum.html, pero al mismo tiempo también se creará un archivo maestro
con un nombre index.html.
import java.io.*;
/**
* <h1>Add Two Numbers!</h1>
* The AddNum program implements an application that
* simply adds two given integer numbers and Prints
* the output on the screen.
* <p>
* <b>Note:</b> Giving proper comments in your program makes
it more
* user friendly and it is assumed as a high quality code.
*
* @author Zara Ali
* @version 1.0
* @since 2014-03-31
*/
public class AddNum {
/**
* This method is used to add two integers. This is
* a the simplest form of a class method, just to
* show the usage of various javadoc Tags.
* @param numA This is the first paramter to addNum method
* @param numB This is the second parameter to addNum
method
* @return int This returns sum of numA and numB.
*/
public int addNum(int numA, int numB) {
return numA + numB;
}
/**
* This is the main method which makes use of addNum
method.
* @param args Unused.
* @return Nothing.
* @exception IOException On input error.
* @see IOException
*/