1
00:00:10,120 --> 00:00:13,240
Hola te saluda nuevamente Ubaldo Acosta.

2
00:00:13,390 --> 00:00:16,030
Espero que estés listo para comenzar con esta elección.

3
00:00:20,640 --> 00:00:24,410
A continuación vamos a estudiar el tema de contexto estático.

4
00:00:24,630 --> 00:00:25,680
Están listos.

5
00:00:25,860 --> 00:00:30,450
Vamos contexto estático y contexto dinámico

6
00:00:34,070 --> 00:00:40,460
comencemos esta lección diferenciando el contexto estático del contexto dinámico para comenzar a crear

7
00:00:40,460 --> 00:00:41,780
objetos de una clase.

8
00:00:41,780 --> 00:00:47,690
Primero se debe cargar la clase en memoria por medio de lo que se conoce como class loader cargador

9
00:00:47,690 --> 00:00:48,980
de clases.

10
00:00:48,980 --> 00:00:55,820
Aquí entra por primera vez el concepto de contexto estático y podrá ser utilizado hasta que la clase

11
00:00:55,850 --> 00:01:01,820
se elimine de la memoria que normalmente ocurre cuando se detiene el proceso de la máquina virtual de

12
00:01:01,820 --> 00:01:09,180
Java es decir que la clase está cargada durante todo el proceso de la ejecución de nuestra aplicación.

13
00:01:09,260 --> 00:01:15,410
Una vez que la clase ya está cargada en memoria es posible empezar a crear objetos de dicha clase.

14
00:01:15,410 --> 00:01:22,880
A esto se le conoce como contexto dinámico ya que en este momento ya es posible crear objetos y empezar

15
00:01:22,940 --> 00:01:25,340
a interactuar entre los mismos.

16
00:01:25,340 --> 00:01:31,880
En resumen el contexto estático se carga primero que el contexto dinámico y por lo tanto también las

17
00:01:31,880 --> 00:01:39,020
clases que vayamos a utilizar se cargan en primera instancia posteriormente se crea el contexto dinámico

18
00:01:39,450 --> 00:01:45,410
y una vez que ya está cargado el contexto dinámico ya se pueden crear los objetos de las clases que

19
00:01:45,410 --> 00:01:52,740
se hayan cargado en memoria como podemos observar en la lámina el contexto estático tiene una mayor

20
00:01:52,740 --> 00:02:00,030
duración que el contexto dinámico y de hecho el contexto estático incluye el contexto dinámico pero

21
00:02:00,030 --> 00:02:07,940
no al revés el operador dis solo tiene uso cuando se ha creado un objeto de una clase por lo tanto no

22
00:02:07,940 --> 00:02:15,340
es posible utilizar este operador dentro del contexto estático el contexto estático lo podemos trabajar

23
00:02:15,430 --> 00:02:21,300
en el código Java por medio de la palabra estática la cual explicaremos a continuación.

24
00:02:23,260 --> 00:02:24,190
Palabra estática

25
00:02:30,040 --> 00:02:37,390
podemos utilizar la palabra Static para interactuar con el contexto estático por ejemplo si definimos

26
00:02:37,450 --> 00:02:44,590
un atributo o un método como estatico lo que estamos indicando es que el atributo o método pertenecen

27
00:02:44,650 --> 00:02:51,860
a la clase y no al objeto por ejemplo si queremos un atributo sin usar la palabra Static que es como

28
00:02:51,860 --> 00:02:55,610
normalmente los definimos cada que creamos un objeto.

29
00:02:55,610 --> 00:02:59,780
También se creará una variable asociada al objeto que se crea.

30
00:03:00,020 --> 00:03:07,250
Pero si definimos el atributo como estático estamos indicando que el atributo sólo se crea una vez.

31
00:03:07,250 --> 00:03:14,420
Así que sin importar cuántos objetos se creen sólo habrá una variable la cual se asocia a la clase y

32
00:03:14,420 --> 00:03:15,940
no al objeto.

33
00:03:16,220 --> 00:03:22,520
Y si un objeto accede al valor de la variable estática leerá el mismo valor que los demás objetos.

34
00:03:23,300 --> 00:03:30,320
Y si un objeto modifica el valor estático todos los demás objetos accederán al mismo valor ya que este

35
00:03:30,320 --> 00:03:35,520
valor está almacenado en la clase y no en los objetos de dicha clase.

36
00:03:36,740 --> 00:03:43,190
Utilizando la palabra Static es posible interactuar con la clase sin necesidad de haber creado un objeto

37
00:03:43,190 --> 00:03:44,220
de la misma.

38
00:03:44,360 --> 00:03:51,320
Por ejemplo podemos acceder a atributos y o métodos sin necesidad de haber instancias o ningún objeto

39
00:03:51,320 --> 00:03:59,320
de la clase que deseamos utilizar con el uso de la palabra estática ya sea en el atributo o en el método

40
00:03:59,320 --> 00:04:01,270
que deseamos acceder.

41
00:04:01,330 --> 00:04:09,240
Podremos usar directamente el atributo o método sin necesidad de generar un objeto de la clase sólo

42
00:04:09,250 --> 00:04:15,260
colocando el nombre de la clase el operador punto y finalmente el nombre del atributo.

43
00:04:15,280 --> 00:04:21,700
Un método estático definido en la clase normalmente los atributos o métodos estáticos.

44
00:04:21,970 --> 00:04:29,230
Si deseamos que sean accedidos desde otras clases deberán contener el modificador de acceso públic para

45
00:04:29,230 --> 00:04:33,010
que no tengan ningún problema en ser accedidos.

46
00:04:33,010 --> 00:04:38,560
Por lo tanto los atributos o métodos marcados con la palabra Static se les conoce como miembros de la

47
00:04:38,560 --> 00:04:46,240
clase o métodos de clase ya que pertenecen a la clase y no a los objetos que se crean de dicha clase

48
00:04:48,080 --> 00:04:50,100
palabra Static y palabra dis

49
00:04:54,050 --> 00:04:55,220
Veamos a continuación.

50
00:04:55,220 --> 00:05:00,770
Un ejemplo del uso del operador dis y también mencionando el contexto estático

51
00:05:03,610 --> 00:05:10,440
bien una vez que hemos mencionado el contexto estático y el contexto dinámico podemos aclarar lo siguiente

52
00:05:11,280 --> 00:05:17,940
el operador dice asocia con el contexto dinámico y debido a que el contexto estático carga primero que

53
00:05:17,940 --> 00:05:23,760
el contexto dinámico el operador dis no funciona dentro del contexto estático.

54
00:05:23,820 --> 00:05:30,900
Es por esta razón que en el método main o cualquier otro método estático no es posible utilizar el operador

55
00:05:30,900 --> 00:05:38,870
dis así que esto se muestra en el código y si quisiéramos utilizar este operador nos marcaría un error

56
00:05:38,870 --> 00:05:45,120
de compilación ya que el operador dis no puede ser utilizado dentro del contexto estático.

57
00:05:45,170 --> 00:05:52,850
Sin embargo un método dinámico sí puede acceder a un método estático ya que este contexto ya ha sido

58
00:05:52,850 --> 00:05:53,690
creado.

59
00:05:53,990 --> 00:06:00,710
Ahora podemos acceder a un método dinámico desde un método estático siempre y cuando creemos un nuevo

60
00:06:00,740 --> 00:06:01,640
objeto.

61
00:06:01,790 --> 00:06:08,910
De esta manera es que un objeto puede acceder tanto a los métodos no estáticos como a los métodos estáticos.

62
00:06:08,930 --> 00:06:13,900
Sin embargo un método estático aunque pueda ser accedido por medio de un objeto.

63
00:06:14,030 --> 00:06:20,540
Lo correcto es que utilice el nombre de la clase y no el nombre del objeto ya que recordemos que los

64
00:06:20,540 --> 00:06:26,870
métodos estáticos o atributos estáticos pertenecen a la clase y no a los objetos

65
00:06:29,800 --> 00:06:38,280
ejemplos de código estático Veamos a continuación un ejemplo para entender a más detalle el contexto

66
00:06:38,280 --> 00:06:46,030
estático por un lado estamos creando la clase ejemplo Attic y por otro lado estamos creando la clase

67
00:06:46,030 --> 00:06:46,600
persona

68
00:06:50,030 --> 00:06:56,480
así que en este código vamos a ver un pequeño ejemplo de cómo podemos trabajar con la palabra static.

69
00:06:56,570 --> 00:07:04,320
Por un lado estamos definiendo un atributo de tipo estático llamado contador de personas al declarar

70
00:07:04,380 --> 00:07:10,830
esta variable como estática lo que buscamos es que cada vez que creamos un objeto de tipo persona vamos

71
00:07:10,830 --> 00:07:14,250
a incrementar el valor de esta variable.

72
00:07:14,250 --> 00:07:20,330
Esto lo podemos lograr utilizando el constructor de la clase por ello dentro del constructor de esta

73
00:07:20,330 --> 00:07:26,870
clase lo que vamos a hacer es que cada vez que se manda a llamar este constructor es decir cada que

74
00:07:26,870 --> 00:07:34,640
creamos un objeto entonces incrementamos el contador de personas y debido a que esta variable se asocia

75
00:07:34,730 --> 00:07:42,260
a la clase y no a cada uno de los objetos entonces podremos saber cuántos objetos de tipo Persona se

76
00:07:42,260 --> 00:07:49,590
han creado contabilizándose con nuestra variable estática la cual se está asociando a la clase.

77
00:07:49,670 --> 00:07:56,060
Así cada vez que mandamos a llamar el constructor de la clase podemos incrementar la variable Contador

78
00:07:56,060 --> 00:07:59,080
personas con cada llamada al constructor.

79
00:07:59,330 --> 00:08:05,560
Una vez que se ha incrementado esta variable estática este valor aplica para todos los objetos creados.

80
00:08:05,780 --> 00:08:12,560
Por lo tanto cada que incrementamos esta variable puede ser consultada por todos los objetos que creemos

81
00:08:13,150 --> 00:08:16,940
y de esta manera es que esta variable no comienza desde cero.

82
00:08:16,940 --> 00:08:23,670
Cada que creamos un nuevo objeto sino que se queda en el último valor y se incrementa una vez más.

83
00:08:23,960 --> 00:08:31,330
Esto debido a que esta variable pertenece a la clase y no a los objetos una vez que ya tenemos el nuevo

84
00:08:31,330 --> 00:08:38,910
valor podemos entonces asignar el nuevo valor al atributo Heydi persona así.

85
00:08:39,000 --> 00:08:45,570
En esta línea podemos asignar el valor del contador actual y cada que estamos creando un objeto cada

86
00:08:45,570 --> 00:08:47,330
que llamamos a este constructor.

87
00:08:47,460 --> 00:08:53,070
El Heydi persona va a ser diferente para cada uno de los objetos que creemos.

88
00:08:53,070 --> 00:08:56,950
Es decir que este valor va a ser único por cada objeto.

89
00:08:57,030 --> 00:09:03,990
Otra sección importante de este código es la línea 27 en donde estamos creando el método GET Contador

90
00:09:03,990 --> 00:09:11,190
personas para poder consultar cuántos objetos de tipo Persona se han creado y también podemos observar

91
00:09:11,190 --> 00:09:13,320
que este método es estático.

92
00:09:13,320 --> 00:09:19,980
Ahora en el método main el cual también es estático vamos a hacer uso de la clase persona en primer

93
00:09:19,980 --> 00:09:27,750
lugar creamos un objeto de tipo Persona y asignamos el valor de Juan al atributo de nombre con ayuda

94
00:09:27,750 --> 00:09:34,620
del constructor de la clase así que aquí creamos un nuevo objeto se manda a llamar el constructor de

95
00:09:34,620 --> 00:09:43,210
nuestra clase el cual inicialmente está en cero sin embargo en este momento lo incrementamos y una vez

96
00:09:43,210 --> 00:09:49,750
que lo hemos incrementado en la persona la primera vez que creamos un objeto de tipo persona se le asigna

97
00:09:49,840 --> 00:09:51,710
el valor de 1.

98
00:09:51,760 --> 00:09:59,570
Debido a que lo hemos incrementado anteriormente y cada vez que queremos un nuevo objeto como se muestra

99
00:10:00,320 --> 00:10:07,250
entonces este contador se va a ir incrementando y le va a asignar siempre un valor único a nuestro Heydi

100
00:10:07,250 --> 00:10:08,310
persona.

101
00:10:08,480 --> 00:10:14,540
Aquí algo importante mencionar es que desde que estamos utilizando la palabra neo quiere decir que ya

102
00:10:14,540 --> 00:10:20,180
estamos trabajando con el contexto dinámico así que de esta manera es como vamos a combinar el contexto

103
00:10:20,180 --> 00:10:27,470
estático pero también podremos crear objetos es decir empezar a trabajar con el contexto dinámico y

104
00:10:27,470 --> 00:10:30,250
por lo tanto al crear el objeto persona.

105
00:10:30,260 --> 00:10:34,850
El constructor de la clase se encarga de asignar el Heydi persona.

106
00:10:34,850 --> 00:10:42,560
En esta línea con un valor único al incrementar la variable Contador persona la cual al ser estática

107
00:10:42,770 --> 00:10:49,130
permite que el conteo de objetos persona sea el correcto y sea único para cada uno de los objetos que

108
00:10:49,130 --> 00:10:51,230
se están creando de tipo personal.

109
00:10:51,260 --> 00:10:58,010
En este código estamos omitiendo la implementación del método string para la clase persona el cual se

110
00:10:58,010 --> 00:11:01,580
debe agregar para observar el estado del objeto impreso.

111
00:11:01,610 --> 00:11:02,840
En esta línea.

112
00:11:02,840 --> 00:11:08,210
Finalmente una vez que ya se han terminado de crear los objetos de tipo personal respectivos podemos

113
00:11:08,210 --> 00:11:15,230
mandar a imprimir el número total de objetos personas que se han creado con ayuda del método GET Contador

114
00:11:15,230 --> 00:11:22,520
personas y aquí es donde podemos observar la anotación que hemos platicado para mandar a llamar.

115
00:11:22,520 --> 00:11:30,200
Un método estático público de una clase basta con colocar el nombre de la clase seguido del nombre del

116
00:11:30,200 --> 00:11:37,680
método estático es decir que aquí no estamos utilizando la variable P 1 sino que directamente estamos

117
00:11:37,740 --> 00:11:41,530
utilizando el nombre de la clase punto.

118
00:11:41,550 --> 00:11:49,050
El método estático o el atributo estático de la clase ya que como hemos comentado los métodos estáticos

119
00:11:49,380 --> 00:11:52,680
pertenecen a la clase y no a los objetos.

120
00:11:52,740 --> 00:11:57,750
Sin embargo también podríamos acceder por medio de la variable P 1.

121
00:11:57,840 --> 00:12:02,850
También podríamos mandar a llamar el método GET Contador personas.

122
00:12:02,850 --> 00:12:09,810
Sin embargo esto no es recomendable sino que los métodos estáticos sí los vamos a utilizar de esta forma

123
00:12:10,200 --> 00:12:15,930
se recomienda que utilicemos el nombre de la clase punto el nombre del método estático.

124
00:12:15,930 --> 00:12:21,330
Posteriormente vamos a ver que existe otro tipo de notación también para el contexto estático pero de

125
00:12:21,330 --> 00:12:27,300
momento si estamos manejando de esta manera el código tenemos que especificar el número de la clase

126
00:12:27,540 --> 00:12:30,120
junto el nombre del método estático.

127
00:12:30,120 --> 00:12:33,540
Con esto concluimos el uso del contexto estático en Java.
