Em java, como posso instanciar dentro de um IF sem dar erro

Olá, eu estou com um trabalho que preciso instanciar 5 funcionários para cada tipo de endereço. Eu comecei tentando instanciar logo de cara, mas está dando erro pois quero usar IF. E, se não for possível, qual a opção que eu poderia escolher?
Código: Obs(são 3 classes, em funcionario possui um atributo do tipo da classe objeto e a main está em uma outra classe).

import java.util.Scanner;

public class Testaprograma {
public static void main(String[] args) {
int i, n;

	Scanner ler=new Scanner(System.in);
	
	//Menu endereço
	System.out.print("Menu");
	System.out.println("1- Funcionário sem endereço");
	System.out.println("2- Funcionário que mora em uma casa");
	System.out.println("3- Funcionário que mora em uma casa com complemento");
	System.out.println("4- Funcionário que mora em um apartamento");
	System.out.println("5- Funcionário que mora em um apartamento com complemento");
	
	n=ler.nextInt();
	
	
	//Opcao em condicao
			
	String tpLogradouro=ler.next();
	String noLogradouro=ler.next();
	int nLogradouro=ler.nextInt();
	int nApart=ler.nextInt();
	String complement=ler.next();
	
	if(n==1) {
		Endereco end=new Endereco();
	}
	if(n==2) {
		System.out.println("Tipo de logradouro:");
		System.out.println("Nome do logradouro:");
		System.out.println("Numero do logradouro:");
		Endereco end=new Endereco(tpLogradouro,noLogradouro,nLogradouro);
	}
	
	if(n==3) {
		System.out.println("Tipo de logradouro:");
		System.out.println("Nome do logradouro:");
		System.out.println("Numero do logradouro:");
		System.out.println("Complemento:");
		Endereco end=new Endereco(tpLogradouro,noLogradouro,nLogradouro,complement);
	}
		
	
	if(n==4) {
		System.out.println("Tipo de logradouro:");
		System.out.println("Nome do logradouro:");
		System.out.println("Numero do logradouro:");
		Endereco end=new Endereco(tpLogradouro,noLogradouro,nLogradouro,nApart);
		
	}
	
	if(n==5) {
		
		Endereco end=new Endereco(tpLogradouro,noLogradouro,nLogradouro,nApart,complement);
	}
	
	
	
	
	for(i=1;i<=5;i++) {
		
		
		
		System.out.println("Matrícula:");
		int matricula=ler.nextInt();
		
		double salBase=ler.nextDouble();
		int qtdHex=ler.nextInt(); 
		int qtdHat=ler.nextInt(); 
		int qtdDep = ler.nextInt();
		int tempServ=ler.nextInt();
		Funcionario funci(matricula,end,salBase,qtdHex,qtdHat,qtdDep,tempServ);
		
	}
	

}

}

O problema nao é exatamente com instanciar dentro do IF, mas declarar a variável dentro dele.
Se você declara uma variável dentro de um bloco, ela só existe dentro daquele bloco e dá erro em tentar acessar de fora:

if (n == 1) {
  Endereco endereco = new Endereco(1);
} else if ( n == 2) {
  Endereco endereco = new Endereco(2);
}
println(endereco); // isso dá erro, a variável foi declarada dentro do if e nao existe aqui

A primeira tentativa soluçao é declarar a variável fora do if:

Endereco endereco;
if (n == 1) {
  endereco = new Endereco(1);
} else if ( n == 2) {
  endereco = new Endereco(2);
}
println(endereco); // isso dá outro erro, a variável pode nao ter sido instanciada

O erro aqui é que o compilador sabe que endereço existe, mas nao tem garantia que vai ser inicializada (no seu código, por exemplo, se o usuário digita opçao 6).
Uma alternativa entao é sempre declarar endereço com um valor inicial:

Endereco endereco = new Endereco(0);
if (n == 1) {
  endereco = new Endereco(1);
} else if ( n == 2) {
  endereco = new Endereco(2);
}
println(endereco); // agora funciona
2 curtidas

Ah sim, obrigado! Eu consegui fazer e agora não está dando erro. Muito obrigada pela ajuda!