public boolean carregar() {
		StringBuilder builder = new StringBuilder();

		// todos os atributos
		String[] atributosNome = getNomeDosAtributosDaSubClasse();
		Object[] atributosValor = getValorDosAtributosDaSubClasse();

		// atributos NAO NULOS
		List<String> atributosNome_NotNull = new ArrayList<String>();
		List<Object> atributosValor_NotNull = new ArrayList<Object>();

		ResultSet rs = null;

		try {
			// Verificando se o array dos valores não é vazio
			if (is_todosValoresNulos(atributosValor))
				throw new Exception("Nenhum valor para os atributos no objeto da classe "
						+ this.subClasse.getSimpleName() + " foi preenchido.");

			builder.append("SELECT * FROM ");
			builder.append(this.nomeDaTabela);
			builder.append(" WHERE ");

			for (int i = 0; i < atributosNome.length; i++) {
				// Verificando se o valor é diferente de nulo e vazio
				if (atributosValor[i] != null && !atributosValor[i].toString().isEmpty()) {

					atributosNome_NotNull.add(atributosNome[i]);
					atributosValor_NotNull.add(atributosValor[i]);
				}
			}

			builder.append(montaStringCampoEqualCoringa(atributosNome_NotNull, atributosValor_NotNull,
					true, "AND"));

			builder.append(" LIMIT 1");
			builder.append(";");

			PreparedStatement ps = AbstractDAO.conn.prepareStatement(builder.toString());
			this.prepareStatement(ps, atributosValor_NotNull, true);

			rs = ps.executeQuery();

			if (!rs.next()) {
				rs.close();
				ps.close();
				return false;
			}

			// inserindo valores do resultSet na subclasse
			this.setaValoresComReflexao(this, atributosDaSubClasse, rs);

			rs.close();
			ps.close();

		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(0);

		} catch (Exception e) {
			e.printStackTrace();
			System.exit(0);
		}

		return true;
	}