> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/creacion-de-obxectos.md).

# Creación de obxectos

Os elementos que pertencen a unha clase denomínanse **obxectos**. Cada un ten os seus propios valores dos atributos definidos na clase.

Para construír obxectos necesitamos **declarar variables no que o seu tipo de datos sexa unha clase**. A declaración segue as mesmas regras que as variables de tipo primitivo:

```java
Clase nomeVariable;
```

O noso modo de traballo para traballar con obxectos vai a ser a instanciación de unha clase principal no mesmo paquete que as nosas clases de traballo, que lle imos chamar App, e que vai a contar con un único método main:

```java
class App {
    
    public static void main(String[] args){
        Persoa p;
    }
}
```

A diferencia entre unha variable de tipo primitivo e unha variable obxecto é que a variable almacena directamente un valor, mentres que **unha variable obxecto almacena a referencia** (dirección de memoria) ao obxecto. Os obxectos funcionan de xeito moi similar aos vectores neste aspecto (En realidade os vectores tamén son obxectos).

Para reservar memoria para un obxecto necesitamos utilizar o operador `new`.

```java
p = new Persoa();
```

Neste momento, na variable **`p` gárdase unha referencia a un obxecto da clase `Persoa`**<i class="fa-copy">:copy:</i>. Podemos acceder aos seus atributos mediante o operador punto (`.`).

```java
p.nome = "Manuel";
p.idade = 32;
p.estatura = 1.70; 
```

## Funcionamento do operador new e referencias

O funcionamento do operador `new` é igual que no caso dos nos vectores.

1. Cando realizamos a chamada ao operador `new` da clase persoa (`p = new Persoa();`<i class="fa-copy">:copy:</i>) búscase un oco libre onde se poida almacenar o obxecto. Imaxinemos por exemplo que cada obxecto da clase persoa ocupa 50 bytes:

![Reserva de memoria](https://java-6cfe38.gitlab.io/05clases/02obxectos/img2_2_1.png)

2. Java na variable `p` almacena a dirección de memoria onde se almacena o obxecto creado, por exemplo neste caso na dirección `0x00000526`<i class="fa-copy">:copy:</i>. Polo tanto o que se almacena é unha **referencia**.

![Reserva de memoria](https://java-6cfe38.gitlab.io/05clases/02obxectos/img2_2_2.png)

Polo tanto, podemos facer tamén que dúas variables apunten a un mesmo obxecto:

```java
Persoa p1 = new Persoa();
Persoa p2 = p1;
```

![Reserva de memoria](https://java-6cfe38.gitlab.io/05clases/02obxectos/img2_2_3.png)

Podemos utilizar do mesmo xeito o literal `null` para indicar que unha variable non referencia a ningún obxecto. Se unha variable obxecto non reserva memoria, o seu valor é do mesmo xeito que nos vectores `null`.

O **recolector de lixo** tamén busca obxectos non teñen referencias para eliminalos e baleirar memoria.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/creacion-de-obxectos.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
