2013-11-02 2 views
0

По какой-то причине я не могу найти этот вопрос нигде и не могу найти ответ в Интернете. Если у меня есть следующие:Использование базового конструктора в java

package temp1; 

public class MainClass { 

    public static void main(String[] args) { 
    } 

    public MainClass(int radius_x, int area_x, int circumference_x) { 
     int radius = radius_x; 
     int area = area_x; 
     int circumference = circumference_x; 
    } 

} 

Предполагая, что это даже правильное использование, то как бы я на самом деле использовать переменные определены в конструкторе здесь? Они работают только внутри конструктора благодаря размаху.

+4

Вы объявляете их в большем объеме. –

ответ

2

Вы правы, что код вы поставляете имеет мало смысла. Более распространенным сценарием является использование конструктора для инициализации нескольких переменных экземпляра, которые затем могут использоваться во всем классе.

public class MainClass { 
    private int radius; 
    private int area; 
    private int circumference; 

    public static void main(String[] args) { 
    } 

    public MainClass(int radius_x, int area_x, int circumference_x) { 
     this.radius = radius_x; 
     this.area = area_x; 
     this.circumference = circumference_x; 
    } 

} 
+0

Спасибо, это имеет смысл. Мне было интересно, потому что я следую абсолютно ужасному учебнику для Java в BlueJ из-за класса в моей школе. Учебник хотел, чтобы я определял переменные в конструкторе, не объявляя их нигде и не показывал, как использовать переменные впоследствии. У меня было ощущение, что это что-то не так, но я хотел уточнить. В предыдущей главе явным образом заявлял, что делать то и то же время и не иметь никаких преимуществ/недостатков, поэтому я не удивлен, что это неправильно. :) –

+0

@Stopforgettingmyaccounts ... из любопытства, не могли бы вы предоставить название учебника или ISBN? – Mena

+0

Blue Pelican Java от Charles E. Cook. –

0

Один из способов повторного использования аргументов вашего конструктора - иметь переменные экземпляра, назначенные значениями аргументов вашего конструктора.

Как таковой:

package temp1; 

public class MainClass { 

    private int radiusX; 
    private int areaX; 
    private int circumferenceX; 

    public static void main(String[] args) { 
    } 

    public MainClass(int radius_x, int area_x, int circumference_x) { 
     this.radiusX = radius_x; 
     this.areaX = area_x; 
     this.circumferenceX = circumference_x; 
    } 
    // TODO getters [and setters] for instance variables 
} 
0
package temp1; 

public class MainClass { 

     int radius ; 
     int area; 
     int circumference; 

    public static void main(String[] args) { 
    } 

    public MainClass(int radius_x, int area_x, int circumference_x) { 
     this.radius = radius_x; 
     this.area = area_x; 
     this.circumference = circumference_x; 
    } 

} 
0

Вы создали конструктор, но переменные внутри только локальными для самого конструктора, а не за его пределами. Для этого вам необходимо члены полей класса:

public class MainClass { 
    private int radius; 
    private int area; 
    private int circumference; 

    public static void main(String[] args) throws Exception { 
     MainClass m = new MainClass(5, 6, 7); 
     System.out.println("The radius is " + m.getRadius()); 
    } 

    public MainClass(int radius_x, int area_x, int circumference_x) { 
     radius = radius_x; 
     area = area_x; 
     circumference = circumference_x; 
    } 

    public int getRadius() { 
     return radius; 
    } 

    public void setRadius(int radius) { 
     this.radius = radius; 
    } 

    public int getArea() { 
     return area; 
    } 

    public void setArea(int area) { 
     this.area = area; 
    } 

    public int getCircumference() { 
     return circumference; 
    } 

    public void setCircumference(int circumference) { 
     this.circumference = circumference; 
    } 
} 

Имейте в виду также нет никакой необходимости, чтобы пройти в area_x и circumference_x Те могут быть получены из radius_x. Это предполагает, что вы верны значениям терминов, а не просто играете с переменными, чтобы изучать язык.

+0

area_x и circumference_x предназначены для использования с методами, которые здесь не написаны, такими как radiusFromArea и areaFromCircumference, и т. Д., Если один или другой неизвестны. –

Смежные вопросы