0

Java 기본 클래스에서 선생님은 클래스의 기본 생성자를 작성할 때 작성한 임의의 선택 사항에 대해 의견을 말하게했습니다. (그녀는 우리가 설계하는 모든 클래스의 기본 생성자를 작성해야합니다라고 우리에게 이야기했다) 그래서 예를 들어, 나는라는 클래스 RoomDimension을 쓰고 있어요, 다음과 같이 나는 기본 생성자를 만들어 :클래스 작성시 기본 생성자에 대한 설명

public class RoomDimension { 

    //Fields 
    private double length;   //Length of a carpet 
    private double width;   //Width of a carpet 

/** 
* 
*/ 
public RoomDimension(){ 
     length = 0.0; 
     width = 0.0; 
    } 

난 0.0을 내 플래그로 사용하여 사용자가 아무 것도 입력하지 않았거나 잘못된 입력을했음을 나타냅니다. 문서 주석 (/ ** /)에서 유효하지 않은 입력을 나타내는 0.0으로 사용된다는 사실을 언급해야합니까? -1을 내 깃발 (또는 기본 생성자에서 필드의 초기화)으로 사용한다면 -1이 무의미한 입력임을 나타냅니다. 왜냐하면 내가 임의로 그 결정을했기 때문입니다. 0이 임의의 선택인지 아닌지를 알지 못하기 때문에 0을 주석 처리해야하는지 여부를 묻습니다. 프로그래머로서 그 사실을 나타낼까요? 아니면, 사용자가 말하지 않고 그것을 알고 있다고 가정한다면 괜찮습니까?

+0

는 _ _ 나는 그것을 믿을 수 없어 "그녀는 우리가 설계하는 모든 클래스의 기본 생성자를 작성해야합니다라고 우리에게 이야기했다!" 교사는 생성자가 명시 적으로 작성되지 않은 클래스에 대해 컴파일러에서 기본 생성자를 생성한다는 것을 알아야합니다. 또한 귀하의 예제 자체가 _just에 대한 기본 생성자가 one을 악의에 가지고있는 이유를 보여줍니다. 속성의 값이 유효한지 결코 알 수 없습니다. 최소한 액세스 할 때마다 확인해야합니다. –

답변

-1

필자는이 값을 null로 설정할 수 있습니다.

public class RoomDimension 
{ 
private double? length; 
private double? width; 

} 

    public RoomDimension() 
{ 

} 

길이와 너비의 값이 null 값을 허용하는 것으로 간주됩니다. 따라서 기본 생성자를 호출하면 자동으로 null로 설정됩니다.

다른 개체를 포함하는 개체를 가질 때 포함 된 모든 개체를 0.0으로 설정할 수 없기 때문에 null 개체 만 만들면되므로 개체의 관점에서 생각해 볼 수 있습니다. 또한 해당 객체에 대한 작업을 수행 할 때 null이 사전에 null 참조 예외를 피하는 데 도움이되는지 여부 만 확인하면됩니다.

+0

'C#'질문이 아닙니다. – talex

+0

죄송합니다. 더블로하면 자바에 있습니다 – MikeB0317

0

제로에 주석을 달아야하는지 여부는 미래에 생각 나게하기 위해 플래그 또는 코드를 보는 다른 프로그래머임을 나타내는 것이 가장 좋을 것이라고 생각합니다.

0을 플래그로 사용하는 경우 length 및 height가 0보다 작거나 같을 때 예외를 throw하는 것이 더 나은 방법이라고 생각합니다. 미래에 읽기 쉽고 사용자가 양수가 아닌 숫자를 입력 할 때보다 효율적으로 처리 할 수 ​​있습니다.

0

그녀는 우리가

을 설계 모든 클래스 에 대한 기본 생성자를 만들어야합니다라고 우리에게 이야기 그리고 나는 선생님에 대한 이야기 ​​: 가르치고 모르는 누가, 누구를하고있다 알아!

기본 생성자를 만들지 않으면 컴파일러에서 처리합니다. 아시나요? 선생님은 어때요?

데이터를 생성하고 변환하는 많은 도구는 COMPILED "기본 생성자"를 찾지 못하면 중단 될 수 있습니다. 그러나 그들은 그 의견을 완전히 무시할 것이다.

public class RoomDimension { 

static { 
    System.out.println("I an a static initializer, If the classloader will touch your class, I will be called first! ex. RoomDimension.anyStaticmethod() or before new RoomDimension()"); 
} 

{ 
    System.out.println("I am instance initializer. whenever you call any constructor, I will run before the constructor body, try me with: new RoomDimension()"); 
} 

//Fields 
private double length; //Length of a carpet 
private double width; //Width of a carpet 

public RoomDimension() { 
    length = 0.0; 
    width = 0.0; 
} 
} 

코드에서 그런데 : 그래서 다시 클래스에

는 생성자 전에, 그것이 초기화하고 있기 때문에

public RoomDimension() { 
    length = 0.0; 
    width = 0.0; 
} 

완전히 쓸모가 정확히 할 것입니다 당신이 프로퍼티로 선언했기 때문에 생성자 전에 초기화 될 것입니다.

private double length; //Length of a carpet 
private double width; //Width of a carpet 

초기화 여부를 알고 싶다면 double 대신 Double을 사용하고 null 값을 확인하십시오.

예 :

private Double length; //Length of a carpet 
private Double width; //Width of a carpet 
+0

답장을 보내 주셔서 감사합니다. 나는 기본 컴파일러를 생략해도 괜찮은지 물어 보았다. 교과서에 자바 컴파일러가 없다면 나에게 도움이 될 것이라고 지적했기 때문이다. 그녀는 컴파일러가 없을 때만 컴파일러가 나를 대신 할 것이라고 말했다. 내 클래스의 다른 생성자. 사실입니까? 내가 습관에 맞게 만들어야 하나? –

관련 문제