Saltar navegación

241210Args y Static 1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 10 de diciembre de 2024 por Stefano C.

10 visualizaciones

Descargar la transcripción

Voy a grabar esta clase, si habláis me dais consentimiento para que grabe esta voz. 00:00:00
Entonces, nosotros hemos hecho los primeros pasos en el mundo de la programación orientada a objetos. 00:00:06
Hemos empezado a ver la diferencia entre objetos y clases, hemos empezado a ver que es un constructor, 00:00:14
hemos visto el concepto de sobrecargar un constructor o sobrecargar un método. 00:00:19
Hemos visto... ¿qué más hemos visto? Poco más. 00:00:25
Hemos visto las bases para poder crear objetos, hemos hecho ejemplos, etc. 00:00:30
Antes de entrar en las capacidades avanzadas de la programación orientada a objetos, como son herencia, como son polimorfismo, como son cosas por el estilo, 00:00:35
pues tenemos que acabar de dar unas pinceladas siempre sobre el concepto de clases y sobre lo que se puede hacer en una clase. 00:00:49
Algunas cosas son cosas que hemos visto siempre allí y no sabemos exactamente qué es 00:00:56
Pues ahora vamos a ver qué es 00:01:01
Y algunas cosas ya las hemos dicho en ejemplos anteriores, pues hoy las formalizamos 00:01:03
Entonces, primer punto, el método main 00:01:09
Nosotros desde el primer día, desde aquel día de septiembre en el que empezamos el primer Hello World 00:01:13
En el que, además de public class no sé qué, escribimos un public static void main, ¿vale? 00:01:20
Y, si os dais cuenta, cada día que pasa, vamos añadiendo algo más que nos hace entender qué es este public static main void, ¿vale? 00:01:27
Por ejemplo, al principio no sabíamos nada de todo esto. 00:01:40
Hoy sabemos que main es el nombre, que void, ¿qué quiere decir void? 00:01:44
Que el main no me espero que devuelva algo 00:01:48
¿Vale? 00:01:52
Static, todavía no lo entendemos muy bien 00:01:54
Pero entendemos que cuando es static no depende de un objeto 00:01:57
Y cuando no es static depende de un objeto 00:02:02
O sea que el main no necesita haber creado un objeto sobre el que llamar el main 00:02:05
¿Vale? 00:02:09
Y es normal porque cuando empiezo no tengo objetos 00:02:10
¿Sí? 00:02:13
Public, que es accesible desde fuera 00:02:15
de esta clase, hoy veremos mejor 00:02:18
el concepto de visibilidad 00:02:21
y que pilla como parámetro 00:02:23
una cosa que se llama args 00:02:26
que es una variable, que es un array de string 00:02:29
esto es todo lo que sabemos 00:02:33
esto lo sabemos más o menos leer, lo entendemos más o menos 00:02:35
sabemos que es un método especial, es el punto de acceso 00:02:39
a mi programa, a mi sistema 00:02:42
Siempre tendrá que haber un punto de acceso más importante 00:02:43
Esto no quita que pueda hacer varias clases con un main 00:02:48
Pero mi sistema tendrá que empezar con un main concreto 00:02:52
Habrá una clase, clase principal, la clase inicio, la clase de llamarla como os da la gana 00:02:56
Que será la clase que tendrá el main, que es el que crea todos los objetos que tiene que crear 00:03:00
Y a partir de allí sale y empieza mi sistema 00:03:06
¿Vale? Como es static, se puede invocar su ejecución si necesita de que exista un objeto de la clase a la que pertenece 00:03:09
¿Vale? Entonces se puede lanzar ya directamente, si esta es la clase, mi clase, ¿vale? 00:03:18
Puede tener o no un main, nosotros hemos hecho clases con main y clases sin main 00:03:24
¿Recordáis? ¿Sí? Vale 00:03:28
¿Qué es esto de string args? ¿Sí? 00:03:30
En realidad, StringArgs representa un array de parámetros con el que yo ejecuto el programa. 00:03:34
Si vosotros habéis usado algún programita en línea de comando, muchos de estos programas, después del programa, admiten parámetros. 00:03:43
¿Habéis usado un ping alguna vez en vuestra vida? 00:03:53
Ping es el comando, pero luego, después del ping, admite parámetros. 00:03:56
En particular, ¿a quién haces ping? 00:04:01
o ping menos t 00:04:04
y a quien hacéis ping 00:04:06
el menos t es un parámetro 00:04:09
que permite hacer ping para siempre 00:04:10
hasta que tú lo bloquees 00:04:12
entonces, todos los programas 00:04:13
que nosotros podemos crear 00:04:16
admiten parámetros 00:04:18
yo puedo crear en mi 00:04:20
programa Java 00:04:22
un programa que al lanzarlo 00:04:24
le añado parámetros 00:04:27
en el momento del lanzamiento 00:04:28
en línea de comando 00:04:30
Y primero utilizamos el programa Java C 00:04:40
Java C 00:04:43
Que es sustancialmente 00:04:43
El compilador de Java 00:04:46
Que transforma el punto Java en un punto class 00:04:47
Transforma Java como lo conocéis vosotros 00:04:50
En otro lenguaje intermedio 00:04:53
Que se llama el bytecode 00:04:54
Y luego hacíamos Java 00:04:55
Y el nombre de la clase 00:04:58
Y esto crea la Java Virtual Machine 00:05:00
Le pasa como parámetro el nombre de la clase 00:05:02
Y ya está 00:05:04
Entonces 00:05:05
Yo tenía Java C 00:05:07
mi clase 00:05:15
punto java 00:05:18
esto me crea 00:05:20
mi clase punto class 00:05:23
y luego hacía java mi clase 00:05:25
esto es 00:05:27
lo básico 00:05:30
ahora yo puedo a esta 00:05:31
cosa de aquí darle 00:05:34
unos parámetros, es decir que cuando lo llamo 00:05:36
así, vale, podría 00:05:38
por ejemplo pasarle aquí 00:05:40
1, 10 00:05:42
esto le estaría pasando dos 00:05:44
parámetros, el parámetro 1 y el parámetro 10 00:05:46
¿sí? que por ejemplo 00:05:48
luego podría utilizar como 00:05:50
no sé, imaginamos que mi clase sea 00:05:52
una 00:05:54
una clase que lo que hace es generar 00:05:55
números aleatorios 00:05:58
pues yo quiero crear que cuando la lanzo así 00:05:59
sea un número aleatorio entre 1 y 10 00:06:02
si lo lanzo así 00:06:04
genera un número aleatorio 00:06:05
entre 10 o 100 00:06:08
¿sí? o sea que si lo estoy pasando 00:06:09
no pidiendo al usuario 00:06:12
oye usuario, dame un número 00:06:14
dentro del código 00:06:16
sino que al momento de lanzarlo 00:06:18
yo le puedo dar unos parámetros 00:06:21
determinados, por ejemplo 00:06:23
esto se usará en un futuro para pasarle 00:06:25
un fichero, por ejemplo, yo lanzo mi clase 00:06:27
y aquí le digo el nombre 00:06:29
del fichero, log.txt 00:06:31
y esto será el fichero 00:06:33
que él utilizará durante 00:06:35
esta ejecución, si cambio en log2 00:06:37
pues usará un fichero distinto 00:06:39
esto podría ser un 00:06:41
fichero de configuración 00:06:43
configuración, config.cfg, qué sé yo, entonces cuando él arranca dentro de este fichero encontrará una serie de parámetros que utilizará para arrancar de una determinada forma, quién es el servidor, quién es el local, cuántos jugadores puede admitir, no lo sé, lo que me haga falta, ¿vale? 00:06:45
Ahora, cuando yo lanzo algo así, Java, mi clase, y pongo cosas aquí, ¿dónde acaban estos datos? Es decir, ¿cómo puedo pillar estos datos desde dentro del programa? 00:07:07
Y estos datos se van insertando en un array de string donde en la posición cero está el primer argumento, en la segunda está el segundo argumento, en la tercera posición está gato. 00:07:25
Y este array es este array. ¿Se entiende? 00:07:43
entonces, una vez que yo lanzo el main 00:07:48
tengo estos argumentos que pueden estar vacíos 00:07:53
nosotros hemos usado hasta ahora vacío 00:07:56
no hemos nunca rellenado algo allí 00:07:58
pero puede ser que yo lance 00:08:00
mi programa pasándole lo que se llaman 00:08:02
argumentos, y como los encuentro 00:08:04
los encuentro como string 00:08:06
dentro de args 00:08:07
args de 0 00:08:09
será el primer argumento, args de 1 00:08:11
será el primer argumento, me puedo preguntar 00:08:13
¿cuánto es grande args? 00:08:15
y si args.length es 0 00:08:17
Quiere decir que no me has pasado argumentos 00:08:20
Si args.length es mayor que 0 00:08:22
Quiere decir que me has pasado algún argumento 00:08:24
Y ahora hacemos pruebas 00:08:27
¿Vale? 00:08:27
Una clase, mi clase, cotoriego, comando, Java, mi clase 00:08:29
Java, mi clase, algo, 3, otra cosa 00:08:31
Generaría que en args de 0 estaría algo 00:08:33
En args de 1 estaría 3 00:08:36
Cuidado, como string 00:08:39
No como número 00:08:40
Si lo quiero como número 00:08:42
Tengo que hacer algo para transformarla en número 00:08:43
Pero esto es un array de string 00:08:46
¿Sí? 00:08:48
Y en el args de dos estaría otra cosa, ¿vale? Separado por espacios, allí pongo los valores, los string. En Eclipse se puede hacer lo mismo sin tener que llegar allí diciéndole, oye, mira, estos son los parámetros cuando ejecutas la clase, ¿vale? 00:08:49
Decíamos antes que existe un punto de acceso a mi sistema, una clase main 00:09:04
Clase main quiere decir principal, cuidado, no el método main, la clase main 00:09:13
No se tiene que llamar así, se puede llamar inicio, se puede llamar con el nombre de vuestro programa 00:09:18
Se puede llamar como os da la gana, pero esa es la clase que yo tengo que ejecutar 00:09:23
Eso no quiere decir que tenga que tener un solo main, cada clase puede tener su main 00:09:27
De hecho, muchas veces las clases tienen un main para probar esa clase. 00:09:32
Yo hago la clase persona, que simula a una persona, y dentro tiene un main para crear dos o tres personas y hacerles algo. 00:09:36
Luego creo la clase coche, y dentro de la clase coche tengo un main que prueba esa clase. 00:09:44
Y luego tengo clase garage o taller, que asocia personas a clases, y eso es mi sistema de verdad. 00:09:50
Las tres tienen un main 00:09:56
Pero dos de los main no hacen prácticamente nada 00:09:59
Prueban solo la clase interna 00:10:02
O hacen cosillas pequeñas 00:10:03
Y es el main principal 00:10:05
Es la clase taller que permite lanzar el sistema 00:10:06
¿Se entiende? 00:10:09
Vale 00:10:11
Estas clases pueden tener o no un main 00:10:12
Si lo tienen normalmente se utiliza para probarlo unitariamente 00:10:15
Aunque con utilidades como JUnit 00:10:17
¿Habéis visto yo JUnit ya? 00:10:20
No, lo veréis 00:10:22
No es lo habitual 00:10:22
no tiene por qué llamarse main, se puede llamar como se le da la gana 00:10:26
y es el detonante de mi sistema 00:10:29
paramos aquí, hacemos un ejemplito 00:10:31
esto es un proyecto, voy a hacer un package 00:10:59
de ejemplos 00:11:07
args 00:11:10
ejemplos args 00:11:13
y creo un ejemplo arg 00:11:17
con un main 00:11:20
yo tengo este aquí para hacer un ejemplo 00:11:23
pues lo que puede hacer es decir si args.length es cero, si so, este programa no se usa así, tienes que darme parámetros o argumentos, args, ¿sí? 00:11:29
Esto es típico. Cuando vosotros lanzáis un programa sin lanzarlo con los parámetros correctos, lo que suele salir es una descripción de cómo se usa. 00:12:03
Pinga secas no hace nada porque te dice, mira, pinga después necesita algunos de estos parámetros. 00:12:23
Si están entre corchetes, normalmente es que son opcionales. 00:12:29
Puede ser "-t", "-a", "-ncount", "-liz", y luego tiene que poner un nombre destino, que es donde haces el ping. 00:12:35
Entonces, estos son todos parámetros. 00:12:42
Y luego te explica todos los parámetros. 00:12:44
"-t", hace esto, "-a", hace esto, "-liz", hace esto. 00:12:45
Entonces, la idea es que si tu programa necesita parámetros y tú no le das parámetros, 00:12:50
Pues lo que haga él es decirte, oye, mira, no se usa así, se usa de esta forma. 00:12:59
Te explica cómo se usa, ¿vale? 00:13:06
Nosotros lo hacemos más sencillo, que dice que si sustancialmente no me has pasado ningún parámetro, 00:13:08
pues entonces dime que este parámetro, este programa no se usa así, tienes que darme parámetros. 00:13:13
Si ahora lo lanzo, me está diciendo esto. 00:13:17
Y de esto deduzco una cosa que es, que args no es null. 00:13:21
O sea, que esta cosa alguien la ha creado. Justo. Porque si no, esto me habría explotado. Con un null pointer exception. El hecho de que esto no haya explotado quiere decir que alguien, mágicamente, por debajo, me ha creado este objeto. Este objeto no es null. Este objeto existe. 00:13:33
Alguien ha creado este objeto 00:13:56
Antes de que yo empezara 00:13:58
A ejecutar esto 00:14:01
¿Quién? 00:14:02
La Java Virtual Machine 00:14:05
Al asumir que a llamar esto 00:14:06
La Java Virtual Machine habrá creado 00:14:10
Un array a partir de los argumentos que le he dado 00:14:11
Y se lo habrá pasado aquí 00:14:14
¿Vale? Entonces 00:14:16
Este de aquí 00:14:17
Es un objeto, es un objeto real 00:14:19
Que existe 00:14:21
Ahora, ¿cómo le doy esta cosa? 00:14:22
En realidad yo debería hacer, por ejemplo, java ejemplo args algo, ¿vale? 00:14:26
Entonces este algo se metería aquí dentro, ¿sí? 00:14:35
En Eclipse no lo puede hacer así, ahora vemos cómo se hace, pero antes hagámoslo de hacer algo. 00:14:39
else, asumiendo que 00:14:47
si no es cero 00:14:49
entonces quiere decir que hay algo 00:14:51
¿vale? entonces 00:14:53
vamos a hacer que liste por ejemplo 00:14:55
lo que tenga 00:14:57
entonces lo que hago es for 00:14:58
string s 00:15:01
dos puntos args 00:15:03
siso s 00:15:05
¿vale? esto lo que me 00:15:12
hace es que me escribe los parámetros que te he dado 00:15:16
¿sí? entonces si yo lo lanzo 00:15:18
ahora, me dice no, este programa 00:15:20
no es aquí, tiene que darme unos argumentos 00:15:22
¿Cómo le doy argumentos? 00:15:24
Aquí cuando lanzáis, tenéis al lado una flechita negra 00:15:27
Si le dais aquí, le podéis dar Run Configurations 00:15:32
Run Configurations, abre un menú que dice cuando lanzo este señor 00:15:37
Fijaos que aquí os aparecen todos los main que podéis lanzar 00:15:42
Entonces a veces que le dais a lanzar y en vez de lanzar vuestro programa 00:15:47
está lanzando otro programa, podéis venir aquí y seleccionar 00:15:51
cuál es el main que queréis lanzar, si no aparece aquí, es que os habéis 00:15:55
equivocado en escribir el main y el main no está correcto, entonces él no lo reconoce como 00:15:59
main, entonces no lo puede lanzar, entonces nosotros estamos 00:16:03
lanzando ejemplo args y si 00:16:07
os fijáis aquí arriba, está arguments 00:16:11
si pincháis en arguments, esto es lo que 00:16:14
escribiríais después de Java mi clase o Java ejemplo args en este caso. 00:16:19
Entonces, si yo escribo aquí gato turrón 22 y algo más, 00:16:25
pues yo estoy mandando cuatro parámetros. 00:16:36
Uno, dos, tres y cuatro parámetros. 00:16:39
en el momento en que lo lanzo 00:16:41
run 00:16:45
veis que ahora ya 00:16:47
ha encontrado algo dentro de args 00:16:49
en args de 0 00:16:52
me ha escrito gato 00:16:54
turrón 22 00:16:56
algo más 00:16:57
¿se entiende? 00:16:58
entonces 00:17:03
¿qué podéis hacer aquí? 00:17:05
si hizo 00:17:11
args.length 00:17:12
para que me diga 00:17:14
que tiene cuatro parámetros 00:17:20
y luego me dice cuáles son los parámetros 00:17:23
este es un array, normal y corriente 00:17:24
¿vale? 00:17:27
esta es una forma de pasarle datos 00:17:28
en vez de 00:17:31
dentro desde el usuario 00:17:32
en el momento en que se lanza 00:17:34
¿vale? y muchos programas 00:17:36
cuando se lanzan ya tienen varios 00:17:39
argumentos, usa esos argumentos 00:17:40
y trabaja 00:17:43
repito que por ahora 00:17:44
sepa que existe, esto es para completar 00:17:46
que es esto, porque hasta ahora no lo sabíamos 00:17:49
y ahora tenemos todos los elementos para entender que es esto, por lo tanto 00:17:52
lo vemos, probablemente 00:17:55
lo usaremos relativamente poco, porque normalmente 00:17:57
damos datos de otra forma, pero 00:18:01
es una forma, por ejemplo, lo que decía 00:18:03
de poder pasar por parámetros 00:18:07
a vuestros programas, ficheros 00:18:10
de configuración alternativos o cosas por el estilo que si aquí no hay nada 00:18:13
pilla el fichero de configuración por defecto si aquí se lo explícito pues 00:18:17
pillará los datos que yo le doy dudas sobre esto 00:18:23
paz si acabo de hacerte un ejemplo imagínate que tú tienes un fichero con 00:18:32
con información algo que podéis utilizar vosotros si vosotros conocéis ping si por ejemplo trabajar 00:18:40
es el próximo curso con apache o cosas por el estilo que son servidores web pues servidores 00:18:49
web tienen un conjunto de ficheros de configuración vale y tú a lo mejor cuando lanzas el apache puede 00:18:57
decir apache a secas y lo que estás lanzando es con los ficheros de configuración suyos o le 00:19:04
puedes explicitar, oye mira, no uses 00:19:09
los ficheros normales 00:19:11
pero usa este fichero de aquí, ¿qué te 00:19:14
paso yo? ¿vale? o por ejemplo 00:19:15
en el ping, el ping normalmente lo que 00:19:17
hace es lanzar cuatro veces un mensaje 00:19:20
a otro, ¿vale? pero si 00:19:22
tú no quieres lanzarlo cuatro veces, tú lo quieres 00:19:24
lanzar infinitas veces para comprobar 00:19:26
el momento en que se 00:19:28
cierra la comunicación 00:19:29
pues entonces le puedes dar el parámetro menos t 00:19:31
¿vale? entonces si tú haces tu 00:19:34
java que normalmente 00:19:35
hace una cosa, pero si le pones el parámetro 00:19:37
menos t, hace una cosa distinta 00:19:39
o el parámetro t hace otra cosa 00:19:41
pues lo puedes hacer con este de aquí 00:19:43
tú tienes tu programa que funciona sin parámetros 00:19:45
o no funciona sin parámetros 00:19:47
por ejemplo, el ejercicio que hemos hecho ahora 00:19:49
no funciona sin parámetros 00:19:51
si tú no le das parámetros, te dice, oye, me tienes que dar parámetros 00:19:52
¿sí? 00:19:55
y en el momento en que en vez tiene parámetros, pues lo que hace 00:19:57
te lo escribe por pantalla 00:19:59
no lo sé, ¿vale? a lo mejor algunos 00:20:00
ejemplos, tú piensa 00:20:03
a los ejercicios que has hecho, que empieza 00:20:04
con dame tu nombre, dame tu edad 00:20:07
pues esta cosa aquí en vez de pedírsela 00:20:10
habrías podido ponerla directamente como argumento 00:20:13
en el momento en que lo lanzas, no es lo normal 00:20:16
porque depende de 00:20:18
mientras lo que pides por consola es 00:20:20
comunicación con el usuario 00:20:25
pues esto es otra cosa, no es el usuario 00:20:26
normalmente que hace esto, sino son parámetros tuyos 00:20:31
que al momento de lanzarlos te sirven de alguna forma 00:20:33
Por ejemplo, podrías decidir dónde, podrías hacer un numerito, 1, 2, 3, que es el nivel de verbose de tu programa. 00:20:36
Que si es 1, no escribe nada. Si es 2, escribe solo las cosas más importantes. 00:20:46
Y si es 3, escribe cualquier cosa que está haciendo. Existe esto, se llama verbose. 00:20:52
Entonces tú, cuando escribes algo en pantalla, en vez de escribirlo directamente, preguntas, 00:20:57
sí, args de cero 00:21:02
vale, no sé qué, pues entonces lo escribes 00:21:04
y si no, no 00:21:06
por ejemplo, si args 00:21:07
de cero 00:21:11
punto equals 00:21:12
verbose 00:21:16
entonces 00:21:17
de cero 00:21:27
entonces escribe también esta frase 00:21:31
si no, no, entonces si yo lo lanzo 00:21:34
ahora, pues no me lo va a escribir 00:21:36
porque el primer 00:21:38
elemento es gato 00:21:40
Si yo cuando lanzo este de aquí 00:21:41
Le digo, no, entra en modalidad verbose 00:21:44
Entonces la primera opción es verbose 00:21:48
Pues ahora al lanzarlo me escribe también los parámetros que tengo 00:21:52
Vale 00:21:57
No, esto 00:22:05
Vale, entonces clase main más o menos, método main más o menos 00:22:08
Entonces, concepto de static 00:22:14
Lo hemos visto, lo hemos probado 00:22:18
Hemos hecho algunos ejemplos y algunas cosillas 00:22:21
Vamos a intentar darle una espincelada más 00:22:23
Para entender la diferencia de cuando hago algo static 00:22:28
Y cuando hago algo no static 00:22:31
Ten en cuenta que esto es algo que luego se os olvida con el tiempo 00:22:33
Pero es una de las cosas muy importantes de la programación orientada a objetos 00:22:36
Por lo tanto, por favor, atención 00:22:41
Y si no lo entendéis, levantad la mano, no hay ningún problema 00:22:44
Entonces, cuando no pongo static 00:22:47
Cuando Java no utiliza la palabra reservada static 00:22:50
Me estoy refiriendo a algo que depende de un objeto concreto 00:22:56
Eso quiere decir que este método, esta variable, este lo que sea 00:22:59
Tiene que estar asociado a un objeto 00:23:04
y que objetos distintos tendrán resultados distintos haciendo lo que estoy llamando, ¿vale? 00:23:07
Static puede ser una variable o un método, por ahora, nosotros, ¿vale? Como lo usamos. 00:23:17
Si es una variable, no static quiere decir que es una variable propia del objeto. 00:23:22
Objetos distintos tendrán copias distintas de esa variable, con el mismo nombre, pero copias distintas, 00:23:28
Y que si yo llamo el nombre de la persona 1 o el nombre de la persona 2, pues tendré cosas distintas ahí dentro. Cada uno tiene lo suyo. Y cuando en vez de no estático un método, no es lo mismo. El resultado será distinto si yo lo llamo sobre el objeto persona 1 o sobre el objeto persona 2. 00:23:34
Por ejemplo, el método saludar no es estático, que no pilla parámetros, y lo que hace es decir hola, me llamo, y su propio nombre, pues si lo llamo sobre persona 1, dirá hola, me llamo, como se llama la persona 1, Paco, y si lo llamo sobre la persona 2, dirá hola, me llamo, Sara, porque la persona 2 tiene como nombre Sara. 00:23:53
¿Se entiende? 00:24:16
Entonces, un atributo de una clase 00:24:19
Aparecerá en todas las instancias de esa clase 00:24:21
Los objetos, pero cada instancia 00:24:23
Podrá tener un valor distinto de ese atributo 00:24:25
¿Sí? 00:24:27
Y un método que no es estático 00:24:29
Quiere decir que hay que llamarlo 00:24:30
Sobre un objeto concreto 00:24:33
Y usará datos de ese objeto concreto 00:24:34
En su ejecución 00:24:37
Normalmente un método no estático 00:24:38
Debería usar algo propio del objeto 00:24:40
Algún variable del objeto 00:24:43
Si no usa nada del objeto 00:24:45
No depende de ese objeto 00:24:48
Y por lo tanto 00:24:50
Podría ser que no lo quiera 00:24:51
No es estático, sino que lo quiera estático 00:24:54
¿Sí? 00:24:56
Ahora hacemos el ejemplo 00:24:58
El ejemplo de no estático 00:24:59
La clase rectángulo 00:25:00
Tiene un largo y un ancho 00:25:03
Tiene una 00:25:06
Funcionalidad que es setData 00:25:08
Que me da el largo 00:25:10
L y B 00:25:11
Y me pone que largo es igual a L y ancho es igual a B 00:25:12
O 10.largo y 10.ancho, me da igual 00:25:17
Y luego tiene área que no pilla parámetros 00:25:20
¿Por qué no pilla parámetros? 00:25:24
¿Dónde encuentro los parámetros para calcular el área? 00:25:26
Desde sus propios atributos 00:25:29
Rectángulo área será igual a largo por ancho 00:25:32
Que son estos, 10.largo por 10.ancho 00:25:37
Y devuelve el área de rectángulo 00:25:41
¿Cómo se usa este señor? 00:25:43
Pues este señor para poder utilizarlos 00:25:46
Necesito crear un rectángulo 00:25:48
Si no creo objetos rectángulos 00:25:53
No puedo hacer nada 00:25:55
Entonces creo REC1 y REC2 00:25:57
Que son dos rectángulos 00:26:01
Al primero le excepto los datos a 5 y 6 00:26:02
Entonces es un rectángulo 5 por 6 00:26:05
Al segundo le excepto los datos 1 y 3 00:26:08
Entonces es un rectángulo 1 por 3 00:26:11
Cuando hago int result es igual a rec.area 00:26:12
Lo que estoy haciendo, rec1.area 00:26:17
Estoy diciendo, oye, cálculame el área 00:26:19
Llámame este método 00:26:21
Pero sobre aquel objeto que es rec1 00:26:22
Que tiene lado 5 y alto 6 00:26:26
O lo que sea 00:26:30
Entonces este método de aquí 00:26:30
Me usará los datos de rectángulo 1 00:26:34
Entonces será 5 por 6 00:26:37
Y este 5 por 6 lo pondrá en resultado 00:26:38
Y luego cuando lo escribe, lo escribe en resultado 00:26:42
Cuando hago esto y vuelvo a usar result 00:26:44
Pero lo llamo sobre rectángulo 2 00:26:48
Pues este es el mismo método 00:26:51
Pero ahora no lo está usando con los datos de rect1 00:26:53
O sea 5 y 6, más lo está usando con los datos de rect2 00:26:57
O sea 1 y 3 00:27:00
Entonces el resultado de área 00:27:01
Depende sobre el objeto que yo lo estoy llamando 00:27:05
Por lo tanto, no es estático 00:27:08
Por lo tanto, área no es estática 00:27:12
¿Dudas? 00:27:17
¿Preguntas? 00:27:21
¿Cuándo en vez de algo es estático? 00:27:25
Cuando estamos en un entorno estático 00:27:29
Me refiero a algo que no pertenece a un objeto concreto 00:27:31
Sino a la clase en general 00:27:35
Entonces yo estoy definiendo la clase rectángulos, la clase persona, la clase lo que sea 00:27:37
Y hay algunos conceptos, algunas variables, algunos atributos o algunos métodos 00:27:44
Que no dependen de personas distintas 00:27:51
Sino que cada persona siempre dará el mismo resultado, siempre tendrá el mismo valor 00:27:55
Es como si fuera una variable compartida entre todas las personas 00:28:01
o un método que cualquier persona que lo llame, en realidad, no use nada de esa persona para poder hacer algo, ¿vale? 00:28:06
Entonces no tiene sentido llamarlo sobre un objeto persona, no tiene ni siquiera sentido tener un objeto persona. 00:28:17
Por ejemplo, imaginamos una variable que dice homo sapiens, entonces todas las personas tienen como variable asociada que su especie es homo sapiens, ¿vale? 00:28:24
Eso no depende de una persona o de otra. 00:28:35
No puedo pillar a otra persona y decir, no, pero tú no eres homo sapiens, eres otra cosa. 00:28:38
Entonces, eso es para todas las personas. 00:28:43
Entonces, esa de allí no sería una variable de objeto, una variable no estática, 00:28:47
sino sería una variable estática porque todas las personas compartirían su especie. 00:28:52
Entonces, cualquier persona que llama, tú no llamarías, si se llama la variable especie, 00:28:58
persona1.especie o persona2.especie. 00:29:02
Si no, llamarías persona.especies, donde persona es la clase. 00:29:05
Ahora hacemos ejemplo. 00:29:11
Una variable estática tendría el mismo valor para cualquier objeto que la use, 00:29:13
no depende del objeto sino de la clase. 00:29:17
Y un método estático no se llama sobre un objeto sino se llama sobre la clase. 00:29:20
Cuando ayer hicimos utils y poníamos dentro leer número, 00:29:24
yo no creaba un objeto de utils. 00:29:30
Utils x es igual a new utils, y luego hacía x.learnumero, ¿vale? 00:29:32
Sino que hacía directamente utils.learnumero. 00:29:37
Estaba llamando el método sobre la clase, no sobre un objeto. 00:29:41
No usa los datos de un objeto concreto para ejecutarse. 00:29:46
Puede usar los datos estáticos de esa clase, ¿vale? 00:29:49
En contextos estáticos se puede utilizar las cosas estáticas. 00:29:52
En contextos estáticos no puede usar cosas estáticas. 00:29:58
¿Qué quiere decir? Si estoy en un método static que depende de la clase, que no está llamado sobre un objeto, no puedo usar variables de un objeto porque no sabría de qué objeto es. 00:30:03
Un método no estático usa los valores del objeto sobre el que lo llamo. Cuando en área tengo que utilizar largo y ancho, sé que son los largos y anchos de este objeto. 00:30:15
pero si yo este método de aquí lo hago estático 00:30:34
entonces no lo llamo sobre un rectángulo 00:30:38
y lo llamo sobre rectángulo como área 00:30:40
como clase, punto área 00:30:44
pues cuando llega aquí y dice úsame largo, ¿largo de quién? 00:30:47
no lo estás usando sobre un objeto, lo estás usando sobre la clase 00:30:50
entonces no tengo ese valor, ese valor es propio de un objeto 00:30:53
tengo que crear un objeto para saber cuánto hay dentro de largo 00:30:56
entonces no lo puedo usar, ahora hacemos ejemplos 00:30:59
en Eclipse y veréis que se enfada. 00:31:02
Después. ¿Vale? Entonces, lo mismo 00:31:10
no es lo mismo. Sí, es lo mismo. Lo mismo 00:31:16
en modalidad estática. 00:31:20
¿Vale? Tengo una clase estática. Aquí tengo un static int 00:31:25
operaciones hechas, que es cero. ¿Vale? Y aquí, mirad, 00:31:28
calcular el rectángulo hace lo mismo que el otro. 00:31:32
Pero como esto es estático, no depende de un objeto 00:31:36
Por lo tanto, esos valores, el ancho y el largo, no los tengo 00:31:41
Se los tengo que pasar como parámetro 00:31:45
Entonces, en el ejemplo anterior, este método se llamaba sobre un objeto 00:31:47
Y era este objeto que empaquetaba los datos necesarios para poder hacer lo que tenga que hacer 00:31:55
Aquí, como no tengo un objeto, los datos necesarios se los estoy pasando por parámetro 00:31:59
y una vez que se lo he pasado por parámetro 00:32:04
hace lo mismo 00:32:08
y fijaos que dentro de un contexto estático 00:32:09
puede usar una variable estática 00:32:12
una variable de esta clase 00:32:14
que es operaciones hechas 00:32:16
cada vez que haga una operación 00:32:17
me suma uno aquí 00:32:19
entonces yo puedo saber 00:32:20
cuantas veces han sido hechas estas operaciones 00:32:22
tanto calcular área como calcular perímetro 00:32:26
porque fijaos que aquí también hace operaciones hechas 00:32:28
y me está contando que cada vez que alguien hace esto 00:32:31
Pues me suma 1 allí 00:32:34
Entonces en cualquier momento puedo decir 00:32:35
¿Cuántas operaciones se han hecho hasta ahora? 00:32:37
Y me dirá cuántas veces se ha calculado un área 00:32:39
O cuántas veces se ha calculado un perímetro 00:32:41
¿Por qué me sirve esto? No lo sé 00:32:44
Eso ya veremos usos 00:32:45
El main, si os fijáis, dice 00:32:49
El área de rectángulo 1 tiene 00:32:54
Fijaos que ahora el método estático 00:32:56
Lo llamo sobre una clase 00:33:00
No sobre un objeto 00:33:02
En ningún momento he hecho una new 00:33:03
¿Vale? Pero ahora 00:33:05
Este solo no me sirve 00:33:08
Para calcular el área del triángulo 00:33:10
Le tendré que decir cuáles son 00:33:11
El ancho y el lado del triángulo 00:33:13
Entonces lo pongo aquí 00:33:15
El ancho y el largo 00:33:17
¿Sí? 00:33:19
Aquí estoy haciendo 00:33:22
El cálculo de otro rectángulo 00:33:23
Está aquí, ¿vale? 00:33:25
Y perímetro, lo que sea 00:33:27
Al final puede escribir 00:33:29
Cuántas operaciones se ha hecho 00:33:31
Cuántas operaciones dará 00:33:33
¿Cuánto dará esto? 00:33:34
Hola, buenos días 00:33:45
Tres 00:33:47
Porque cuando llama este método 00:33:49
Se habrá sumado uno 00:33:52
Cuando llama este método 00:33:54
Se habrá sumado otro 00:33:56
Cuando llama este método 00:33:57
Se habrá sumado un tercero 00:33:59
Entonces, ¿cómo accedo a ese variable? 00:34:01
Pues utilizando su clase 00:34:04
Punto 00:34:06
El nombre de la variable 00:34:07
¿Dudas? 00:34:08
Hagamos un ejemplo 00:34:18
static 00:34:24
y un ejemplo 00:34:26
no static 00:34:31
un ejemplo 00:34:38
main 00:34:42
entonces 00:34:43
tengo un ejemplo static y un ejemplo no static 00:34:48
¿vale? pongamos que en el ejemplo 00:34:53
no static este es un objeto 00:34:55
¿vale? tenga algún parámetro 00:34:56
dentro, por ejemplo tiene 00:34:59
un int edad 00:35:01
¿sí? 00:35:03
entonces 00:35:04
ahora yo puedo hacer un programa 00:35:05
un método 00:35:08
que sea el método 00:35:09
public 00:35:10
boolean 00:35:15
puedes entrar 00:35:17
a la 00:35:20
disco 00:35:22
que me dice que si 00:35:23
edad es mayor 00:35:28
igual que 18 00:35:31
return true 00:35:32
return false 00:35:36
Si la edad que tiene 00:35:39
Este valor 00:35:46
Es mayor o igual a 18 00:35:48
Puedes entrar a la discoteca 00:35:50
Si no, no 00:35:51
Ten en cuenta que esto sería así 00:35:52
Funciona igual 00:35:55
Necesitaría un constructor 00:35:58
Entonces tengo un public 00:36:02
Ejemplo 00:36:04
No static 00:36:06
Que recibe un int 00:36:07
Y lo que hago es this.edad 00:36:10
es igual a e 00:36:13
¿si? vale, perfecto 00:36:14
entonces, esto quiere decir 00:36:18
que en mi ejemplo main 00:36:20
lo que puedo hacer yo es crear un 00:36:21
ejemplo no 00:36:23
static 00:36:25
es igual a new 00:36:29
ejemplo no 00:36:31
static 00:36:34
no static 00:36:39
se me ha castellanizado 00:36:46
¿Sí? 00:36:50
Puedo crear también otro objeto 00:36:51
Que 00:36:55
Tiene xc 00:37:01
¿Vale? Y ahora me puedo preguntar 00:37:03
Si eso, uno 00:37:06
Si entra uno 00:37:10
A la discoteca, más 00:37:13
Uno punto 00:37:14
Puede entrar a disco 00:37:15
Y dos 00:37:17
Dos, ¿qué me lo llaman? 00:37:25
Entonces, uno 00:37:32
Usará sus datos 00:37:33
Y me dará true 00:37:35
2 usará sus datos 00:37:37
y me dará false 00:37:40
hasta aquí 00:37:41
hagamos lo mismo 00:37:43
en versión estático 00:37:46
en versión estático 00:37:48
lo que hago yo es 00:37:51
utilizar un método 00:37:53
que pero no depende de los atributos 00:37:58
de esta clase 00:38:00
entonces hago un public 00:38:01
static 00:38:04
Voyder, no, Boolean 00:38:06
Entra 00:38:09
Se lo llamo igual 00:38:13
Puedes entrar a disco 00:38:14
Esto será prácticamente igual dentro 00:38:18
Pero el problema es que ahora 00:38:27
La edad yo no lo tengo 00:38:31
Porque no es de un objeto 00:38:32
Antes yo tenía el objeto y decía 00:38:35
Puedes entrar, voy a mirar tu edad 00:38:37
Y en base a eso te digo si sí o no 00:38:39
Pero ahora no 00:38:40
Entonces, ¿de dónde saco este dato? 00:38:42
le pondré un parámetro aquí 00:38:46
¿vale? entonces aquí habrá un int edad 00:38:51
es decir que este método lo que hace es 00:38:54
puedes entrar a disco pero le tienes que pasar la edad 00:38:57
y en base a la edad que le has pasado 00:39:00
lo hará uno 00:39:02
¿cómo se usa esto? pues desde ejemplo main 00:39:05
si yo quiero usarlo haré 00:39:09
ejercicio 00:39:11
3 que no es un objeto 00:39:13
Y daré 00:39:19
Ejemplo static 00:39:22
Lo estoy llamando sobre la clase 00:39:27
Punto 00:39:28
Veis que ahora me aparece aquí 00:39:30
El método static 00:39:32
Puedes entrar a Discord 00:39:33
Que pero necesitará ponerle aquí 00:39:35
Un valor 00:39:38
Con 20 00:39:40
Esto me dará true 00:39:43
Y esto me tendrá que dar 00:39:44
False 00:39:57
¿Veis la diferencia? 00:40:01
Este de aquí no se puede utilizar a menos que no tenga un objeto, porque este método depende del objeto y usa datos de este objeto. 00:40:09
Llamándolo sobre dos objetos distintos, tendré resultados distintos. 00:40:23
Este no depende de ningún objeto porque no usa parámetros de los objetos, usa estos parámetros de aquí, los parámetros que yo le paso. 00:40:29
Pero su resultado no depende de ningún objeto 00:40:37
Distintos objetos harían lo mismo 00:40:41
Me explico 00:40:45
Imaginémonos que yo aquí 00:40:46
Cree otra versión 00:40:48
¿Vale? 00:40:54
Pero no estática 00:40:56
Que haga esto 00:40:58
¿Sí? 00:41:01
Ahora 00:41:06
Esto yo lo puedo llamar desde aquí 00:41:06
00:41:09
¿Cómo? 00:41:10
Así, déjame copiar esto 00:41:11
Uno bis 00:41:18
Dos bis 00:41:22
¿Vale? 00:41:24
Yo puedo llamar el otro método, sí 00:41:26
Pero le tengo que poner 00:41:28
Algo así 00:41:30
Fijaos 00:41:32
Este señor de aquí tiene dentro 00:41:34
Que tiene, no sé cuántos años tiene 00:41:36
Y este aquí 15 00:41:38
Decía 8 y 15 00:41:40
¿Vale? O sea que esto me debería dar true 00:41:42
Y esto me debería dar false 00:41:44
¿Sí? Sin embargo 00:41:46
True y true 00:41:48
¿Por qué? 00:41:51
Porque ahora ya no dependo de este objeto. 00:41:53
Llamándolo sobre objetos distintos, lo que cuenta es esta variable de aquí. 00:41:56
Porque si os fijáis en su definición, esta es la definición del objeto, ¿vale? 00:42:03
Del no estático, pues se está usando esta edad de aquí. 00:42:08
Entonces, este método, que yo lo he metido como no estático, 00:42:15
o sea, le estoy diciendo, lo tienes que llamar sobre un objeto. 00:42:20
Pero en realidad no depende del objeto, depende solo de esta cosa de aquí 00:42:22
Entonces que yo lo llame sobre un objeto 1 o yo lo llame sobre un objeto 2 00:42:27
Con el mismo parámetro no tiene ninguna diferencia 00:42:33
Entonces esto debería ser estático 00:42:37
Cuando el resultado de este método no depende del objeto sobre el que lo llamo 00:42:41
Debería ser estático, ¿se entiende? 00:42:48
Si yo quito uno, me da error porque en esta clase, él lo busca en esta clase aquí, en la clase ejemplo main, y no hay este método. 00:42:52
Si yo lo llamo sobre ejemplo no static, me da error porque no hay un método estático que se llame así dentro de la clase ejemplo no static. 00:43:10
¿Por qué? Si ahora pusiera aquí static 00:43:31
Pues entonces 00:43:35
Este de aquí 00:43:37
Ahora me dice muy bien 00:43:38
Este de aquí también 00:43:40
¿Vale? Pero es feo 00:43:42
Porque estoy llamando un método estático 00:43:44
Sobre un objeto, esto no tiene sentido 00:43:47
No se suele utilizar 00:43:48
¿Sí? 00:43:50
Él asume que, como lo estás llamando sobre este método 00:43:52
Él asume que lo estás llamando 00:43:55
Sobre esta clase 00:43:57
Porque este objeto es 00:43:58
de esta clase, pero 00:44:00
veis que te lo marca 00:44:03
te dice 00:44:05
el método estático 00:44:05
método estático 00:44:08
este de aquí, de la clase 00:44:11
ejemplo no estático, debería 00:44:13
ser accedido 00:44:15
en un 00:44:17
modo estático, o sea 00:44:18
no sobre un objeto, sino sobre la clase 00:44:20
aún así 00:44:23
te dice, bueno, entiendo lo que querías hacer 00:44:25
pero te lo marco 00:44:27
Repito que si aquí quito lo static 00:44:29
Pues esto se enfada 00:44:35
Y repito también que este método de aquí 00:44:37
Debería ser static 00:44:41
Porque no hace referencia aquí dentro 00:44:43
A nada de este objeto 00:44:47
¿Dudas? 00:44:48
Más cosillas 00:44:53
Y fijaos que este es un error 00:44:54
¿Vale? 00:44:56
Porque yo 00:44:57
Me has dicho que no es estático 00:44:58
Que depende de un objeto 00:45:00
Entonces cuando yo lo llamo sobre una clase 00:45:01
no sabría, no lo puede hacer 00:45:04
porque necesito el objeto para poder llamar 00:45:06
el último ejemplo 00:45:08
es con 00:45:13
variables estáticas, porque el 00:45:14
acceso a esta variable aquí 00:45:16
más o menos lo tenemos claro 00:45:19
lo hemos ya hecho, vale, yo desde aquí 00:45:20
puedo poner 00:45:22
siso1.edad 00:45:23
y esto me escribe 00:45:30
la edad de 1 00:45:33
aquí, 19 00:45:34
La cosa que todavía no hemos utilizado 00:45:36
No hemos visto 00:45:41
Es que en el ejemplo estático 00:45:42
Yo puedo crear una variable estática 00:45:44
Static 00:45:47
Public 00:45:48
Static 00:45:50
Personas 00:45:52
En la disco 00:45:57
Que me está diciendo 00:45:59
Cuántas personas han entrado en la disco 00:46:08
Entonces 00:46:10
Cuando puedes entrar en la cosa 00:46:12
Si yo entro aquí dentro y tienes mayor que 18 00:46:14
Entonces has entrado en la disco 00:46:17
Puedo hacer personas en la disco 00:46:18
Más, más 00:46:22
00:46:25
Que si tú pones int así 00:46:27
Ahora para que esto funcione 00:46:35
Necesitas un ejemplo, un objeto ejemplo static 00:46:37
Sin embargo, si lo pones así 00:46:39
No necesitas un ejemplo static 00:46:43
Y que si lo pones así 00:46:44
Cada objeto ejemplo static 00:46:46
tiene una copia distinta de personas en la disco 00:46:49
entonces si este objeto suma uno 00:46:52
este objeto no lo suma 00:46:54
no está compartido entre objetos de esta cosa 00:46:56
mientras que así es una cosa de la lista 00:47:01
entonces cada vez que yo ejecutaré 00:47:06
este tipo de estos 00:47:10
estaré sumando uno a esta variable 00:47:13
si entra, si no entra no 00:47:15
Y entonces aquí me puedo preguntar si eso, gente en la disco, estática, y puedo hacer ejemplo static, punto, y acceder a esta variable de aquí. 00:47:18
Fijaos que esto no es de un objeto, es de una clase. 00:47:45
Entonces si yo lo lanzo ahora, en la clase estática hay uno. 00:47:52
¿Vale? Porque he llamado solo una vez 00:47:56
¿Dudas hasta aquí? 00:47:58
Vale 00:48:06
Si yo pongo esto 00:48:06
Como estático 00:48:10
Esto depende de esta clase 00:48:11
¿Vale? Entonces todas las clases 00:48:13
Todas las 00:48:16
Esta clase tiene una única variable 00:48:17
¿Vale? Una única variable personal a disco 00:48:20
Cuando se está sumando 00:48:22
O restando sobre esta variable 00:48:24
Todos 00:48:25
Hay solo esa variable 00:48:26
Entonces todos que acceden a esta variable ven que ha cambiado 00:48:30
Si yo esto lo quito como static 00:48:34
Ahora esta de aquí es una cosa que depende de un objeto 00:48:37
Entonces primero no puedo acceder a ella como ejemplo static.personal.disco 00:48:43
Porque depende de un objeto, necesito un objeto ejemplo static 00:48:48
Tendré que hacer new ejemplo static por algún lado 00:48:53
Y que si ahora en un new ejemplo static sumo 1 00:48:56
En otro objeto 00:49:00
No tendré la misma variable 00:49:02
Tendré variables distintas 00:49:04
A ver si lo consigo hacer 00:49:06
Fijaos que esto no lo puedo hacer ahora 00:49:09
¿Por qué no? 00:49:12
Porque este es un objeto 00:49:20
Y yo estoy en un entorno estático 00:49:22
Esto es 00:49:24
Estoy hablando de la clase 00:49:26
No estoy en ningún objeto concreto 00:49:27
Y de repente te digo 00:49:31
Oye, añádele uno a persona en la disco 00:49:32
Pero es algo que depende de un objeto 00:49:34
Y no te he dicho de qué objeto 00:49:36
Por lo tanto no lo puede hacer 00:49:38
Y se enfada y te lo dice 00:49:40
No puedes hacer una referencia estática 00:49:42
A un campo no estático 00:49:46
Que es este campo aquí 00:49:48
Desde un entorno estático 00:49:50
En el que no saben qué objeto estás trabajando 00:49:54
Porque estás trabajando sobre la clase 00:49:57
No puedes modificar un campo no estático 00:49:59
Que depende de un objeto 00:50:03
Puedes trabajar con cosas estáticas también 00:50:04
Pero no con cosas no estáticas 00:50:12
Vamos a meter algo parecido aquí 00:50:14
A esto en el otro 00:50:21
En el ejemplo no estático 00:50:23
Public si queréis, ahora luego vemos que es este de public 00:50:28
Y hagamos que si puede entrar a la clase 00:50:32
A la cosa pues hago 00:50:38
Personas en la disco 00:50:42
Más 00:50:45
Tiene que ir antes 00:50:45
Parece lo mismo 00:50:49
¿Sí? Ahora, ¿cómo uso 00:50:54
Esto? En un determinado 00:50:57
Momento, yo aquí he entrado 00:51:02
Personas, ha entrado personas 00:51:04
¿Vale? Hagamos 00:51:06
Que los dos puedan entrar 00:51:08
Pueden entrar, ¿vale? 00:51:09
Entran, entonces ahora 00:51:16
Me pregunto, si hizo 00:51:18
Uno punto 00:51:20
personas en la disco 00:51:21
exciso 00:51:23
dos puntos personas en la disco 00:51:25
¿cuánto me debería dar? 00:51:30
si esto está pensado 00:51:42
como quiero saber cuántas personas 00:51:44
hay en la disco en este momento 00:51:46
esto está mal hecho, porque cada uno 00:51:47
contará a sí mismo 00:51:50
¿veis? sin embargo 00:51:51
la que es estática 00:51:58
si yo pongo dos personas 00:51:59
que sí pueden entrar 00:52:02
a ver 00:52:03
Donde están 00:52:06
Aquí, aquí, aquí 00:52:06
Si pongo dos personas que 00:52:11
Pueden entrar 00:52:13
Ahora me dirá que hay dos personas 00:52:15
En la disco 00:52:18
¿Se entiende la diferencia? 00:52:21
O sea, que unes todo depende del objeto 00:52:25
Cada objeto tiene sus copias de cosas 00:52:27
¿Vale? 00:52:29
Paint 00:52:30
Cuando yo hago una cosa no estática 00:52:31
Yo tengo aquí mi edad 00:52:36
Y también mi personas en la disco 00:52:39
¿Sí? 00:52:43
Cuando creo otro, este es uno, cuando creo otro objeto, dos, tengo mi edad y tengo mi persona, se la disco, es una copia distinta, cuando modifico esto, no se modifica esto, porque son dos objetos distintos, ¿sí? 00:52:47
Entonces, cuando yo llamo el método no estático, irá a mirar este valor de aquí, que es 20, y por lo tanto sumará 1 aquí. 00:53:08
Cuando voy aquí y veo que este aquí es 25, me dirá, muy bien, puedes entrar y sumará 1 aquí. 00:53:17
Esto no me va a 2. Cada uno conta por separado. 00:53:23
Sin embargo, todos estos son instancias de una clase. 00:53:28
Si yo hago un persona en la disco estático, esto no depende de ningún objeto. 00:53:32
Y cuando aquí se suma, no depende de este objeto o de este objeto, 00:53:44
sino depende de la clase en general. 00:53:51
Entonces, para completar. 00:53:54
Y si yo quisiera, en este ejemplo de aquí, que cada uno tuviera su edad, o sea, quiero crear personas así, pero luego quiero saber cuántas personas en la disco hay, lo podría hacer. 00:53:57
Sí. ¿Cómo? Pues esta variable de aquí la hago estática, porque de un contexto estático no puedo acceder a un contexto no estático, pero desde un contexto no estático sí puedo acceder a un contexto estático. 00:54:17
entonces ahora en este ejemplo aquí edad es propia del objeto pero personas en 00:54:50
la disco no es propia del objeto es propia de la clase y que cada vez que 00:54:58
yo admito una persona en la disco estoy sumando uno a esta variable estática de 00:55:04
esta clase ahora esto se enfada porque ahora esta persona la disco aquí no la 00:55:11
debería llamar sobre el objeto sino la debería llamar sobre la clase y 00:55:21
entonces ahora también las dos personas que han entrado 00:55:32
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
10
Fecha:
10 de diciembre de 2024 - 10:38
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
55′ 40″
Relación de aspecto:
16:10 El estándar usado por los portátiles de 15,4" y algunos otros, es ancho como el 16:9.
Resolución:
1152x720 píxeles
Tamaño:
186.06 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid