Erro ao testar o pool de conexões

Olá amigos do fórum. Hoje trago a seguinte questão:

Estou iniciando os estudos sobre conexões JAVA/Postgres. E me deparei com o seguinte problema:
Quando tento testar a minha classe chamada, “PoolDeConexoes”, ela me retorna os seguintes erros:

“Exception in thread “main” java.lang.NullPointerException
at BDAccess.PoolDeConexoes.(PoolDeConexoes.java:13)
at BDAccess.PoolDeConexoes.getInstance(PoolDeConexoes.java:21)
at BDAccess.Main.main(Main.java:9)”

Porém, a IDE não me exibe nenhum erro semântico durante a digitação, então, o mais provável é que se trata de um erro lógico.
Abaixo estão as minhas classes, todas comentadas com o devido processo do pool de conexões, nos moldes solicitados pelo meu professor.

package BDAccess;

import java.util.ArrayList;

public class PoolDeConexoes {

private static ArrayList<Conexao> conexoes;
private static PoolDeConexoes pool;

private PoolDeConexoes() {
	Conexao cn1 = new Conexao();
	Conexao cn2 = new Conexao();
	conexoes.add(cn1);
	conexoes.add(cn2);
	
	getConexao();
}

public static PoolDeConexoes getInstance() {
	if(pool == null) {
		 pool = new PoolDeConexoes();
	}
	return pool ;
}

public Conexao getConexao() {
	if(conexoes == null) {
		Conexao c = new Conexao();
		conexoes.add(c);
		return c;
	}else {
		for(Conexao s:conexoes) {
			if(s.isLivre()) {
				return s;
			}
		}
	}
	return null;
	
}

}

Acima, a classe denominada: PoolDeConexoes.java

package BDAccess;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Conexao {

private Connection cnx; 
private boolean livre; 

public Conexao() {
	this.livre = true; 
	
	Parametros prm = Parametros.getInstance();
	
	String driverJDBC = prm.getParametros("driverJdbc");
	
	String urlBanco = prm.getParametros("urlBanco");
	
	String nomeUsuario = prm.getParametros("nomeUsuario");
	
	String senha = prm.getParametros("senha");
	
	try {
		
		Class.forName(driverJDBC);
		System.out.println("Driver importado!");
		
		cnx = DriverManager.getConnection(urlBanco, nomeUsuario, senha);
		
		System.out.println("Conexão estabelecida");
		
	}catch (Exception e) {
		System.out.println("Conexão não estabelecida!");
	}
}


public Connection getConnection() {
	return cnx; 
}

public void reserva() {
	if(livre) {
		livre = false;
	}else {
		System.out.println("Esta conexão já está em uso!");
	}
}

public void libera() {
	livre = true; 
}
public boolean isLivre() {
	return livre;
}

}

Acima, a classe com o objeto Conexão.

package BDAccess;

import java.io.IOException;
import java.util.ArrayList;

public class Main {

public static void main(String[] args) throws IOException{
	PoolDeConexoes plc = PoolDeConexoes.getInstance();
	
	System.out.println(plc.getConexao());
}

}

E aqui o meu método principal.

Agradeço desde já pelo auxílio de vocês sobre a minha questão.

Vc n pode dar add em um objeto null.