Populate an ArrayList of different instances of a class
Good effort to get your code working so far. But your code is highly unusual.

You've got the class Question which has an id and question_txt, but each Question also has a reference to a JSONArray of all the questions. Worse than that, for each Question, when you create a new Question and set its reference to all questions, it will come from the API each time.

You've recognised that the behaviour of getting Questions from the API might belong in the Question class (or related class), instead of forcing main (or whatever consumer) to know the details of the API. But it's surely not the responsibility of a single Question instance to fetch all the Questions.

You want the class Question to hold it's data first (and later, some behaviour), so here's a typical data class. 

public class Question {

    private int id;
    private String text;

    public Question (int i, String s) {
        this.id = i;
        this.text = s;
    }

    public int getId() {
        return id;
    }

    public String getText() {
        return text; 
    }

}


You'll see this type of class referred to  as Java Bean or POJO. In this case, because we've used private and only provided get methods, this is a read-only object after its been created.

Then add some behaviour to the class (meaning we're going to use the static keyword) for retrieving the questions:

public static List&lt;Question&gt; fetchQuestions () throws JSONException, IOException {

    HttpURLConnection connection = (HttpURLConnection) new URL("url_to_my.php").openConnection();
    connection.setRequestMethod("GET");
    connection.setRequestProperty("Content-length", "0");
    connection.setUseCaches(false);
    connection.setConnectTimeout(0);
    connection.setReadTimeout(0);
    connection.connect();
    int status = connection.getResponseCode();
    if (!(status == 200 || status == 201)) {
        throw new IOException("Bad status code: " + status);
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }
    br.close();
    String response = sb.toString();

    List&lt;Question&gt; questions = new ArrayList&lt;Question&gt;();
    for (Object arrayItem: new JSONArray(response)) {
        JSONObject questionAsJSON = (JSONObject) arrayItem; // throws on unexpected response format
        questions.add(new Question(questionAsJSON.getInt("id"), 
                questionAsJSON.getString("Question")));
    }

    return questions;

}


And then when we want to grab the questions from the API, it's just a case of invoking the static method:

List&lt;Question&gt; questionnaire = Question.fetchQuestions();