2013-02-04 4 views
-2

부재 객체 생성 전에 할당되어 이러한 데이터에 대한 메모리를 수행자바에서 @ 선언 포인트로 초기화 된 데이터 멤버에 메모리가 할당 된 위치는 어디입니까? 자바

public class Print{ 
int n=10; 
String path="C:\\file.txt"; 
} 

같은 코드를 작성하는 것이 가능하다 ?? 그리고 우리는 C++에서도 같은 것을 할 수 없다고 생각합니다 !! C++과 Java로 설명해주세요 ...

+0

Java에 대해서는 잘 모르지만 C++에서는 공백을 채 웁니다. – chris

+0

어? 객체 생성 전에 * 할당되지 않습니다. 그리고 Java와 C++은 서로 거의 관련이 없습니다. –

답변

0

자바에서는 'new'키워드가 사용되거나 값을 할당 할 때까지 메모리가 객체에 할당되지 않습니다.

0

Neighter 자바 나 C에서 당신이 유형 Print객체를 만들기 전에 ++는 변수에 접근 npath 수 없습니다. 어떤 종류의 기억에서 물체가 창조 될지, 같은 종류의 기억 속에는 모든 것이 만들어집니다. 당신이 스택에 만들어집니다이

void foo() { 
    Print obj; 
} 

같은 객체를 생성 C++에서

. 이와 같이 객체를 만들면

void foo() { 
    Print * obj = new Print; 
} 

힙이 생성됩니다.

자바에서는 힙 할당 객체 만 만들 수 있으므로 객체 자체와 필드가 모두 힙에 배치됩니다.

하지에 오직 C++ 11 선언에서 초기화 클래스의 필드를 허용, 주목을 지불 C++ 03 자바에서

3

, 클래스라는 이름의 클래스가, 하나의 클래스 객체 각각에 대해이 클래스는 런타임에 비난되었다. 이러한 Class 객체에는 초기화 작업에 필요한 "C : \ file.txt"와 같은 데이터가 포함되어 있습니다. 에서

C++ 11 동일, (적어도이 같은 모양과 같은 ++은 C에서 의미가 - 틱 방법)을 수행 C++ 03에서

class Print 
{ 
    int n = 10; 
    std::string path = "C:\\file.txt"; 
}; 

을 그 모든 생성자에서 멤버를 초기화해야합니다. 어떻게 C++ 11에서 구현 되는가는 Java와는 다른 것입니다. Java와는 달리 C++에는 Class 객체가 없으며 런타임에는 클래스 로딩이 없습니다. C++ 11에서이 종류의 멤버 초기화는 컴파일러 에 의해 마치처럼 모든 생성자에서 직접 작성했습니다. 어딘가에 컴파일 된 프로그램 코드에서 10과 "C : \ file.txt"가 있으며 각 생성자의 코드에는 생성 될 개체의 두 멤버가 해당 값으로 초기화되는 섹션이 포함되어 있습니다. 즉, 생성자의 멤버 중 하나 또는 두 개를 명시 적으로 초기화하지 않으면 기본 이니셜 라이저를 무시하기 때문입니다.