2013-07-02 3 views
0

아래에 표시된 코드 샘플에서 "new"키워드를 사용하여 문자열 배열을 인스턴스화합니다. 그러나 인스턴스화는 객체에 대해서만 사용됩니다. c [] 배열이 정적이므로이 작업을 수행하는 것이 잘못 되었습니까? 이 작업을 수행하는 또 다른 방법이 있습니까? 아니면 객체 인 것처럼 인스턴스화하기 위해 "new"를 사용해야합니까?Android/Java에서 정적 배열의 인스턴스화

public class SmallTank { 

static String tableString = " "; 

static String c[]; 
static String d[]; 
static String p; 

public SmallTank(){ 

    c = new String[66]; 
    d = new String[29]; 

    // initialize string array 
    for(int v = 0; v<66; v++){ 
     c[v] = null; 
    } 
+0

http://stackoverflow.com/questions/4449935/integer-array-static-initialization – Freak

+0

여기에 정적을 사용하는 쪽지에서는 나쁜 습관이 가능합니다. 가능하다면 피해야합니다. – JREN

+0

크기가 고정 된 채로 유지되면 괜찮아지면 예외가 발생합니다. – Richa

답변

0

배열은 개체입니다. 따라서 c은 객체이고 정적이어서 변경되지 않습니다. 그것이 비록 말은 무엇을

마다 SmallTankcd을 덮어 을 끝날 객체이다.

내가 원하는 것은 static initialization입니다.

static { 
    c = new String[66]; 
    d = new String[29]; 

    // initialize string array 
    for(int v = 0; v<66; v++){ 
     c[v] = null; 
    } 
} 

을 추가하고 생성자에서 이러한 호출을 제거합니다.

이렇게하면 cd이 한 번만 초기화됩니다.

0

당신은 기본적으로 참조의 배열 null 인의 모든 요소를이 코드 c[v] = null; 필요하지 않습니다. 배열은 객체이므로 new을 사용하여 인스턴스를 생성합니다. 생성자 내부에서 수행하지 마십시오. 선언 한 위치에서 직접 인스턴스를 생성 할 수 있습니다.

static String c[] = new String[66]; 

이 정적 배열 객체를 생성, 따라서이 object.You 너무 다른 방법으로 배열을 만들 수있는 클래스의 모든 인스턴스 :

static String[] c = {"a","b","c"}; 
static String[] c = new String[]{"a","b","c"}; 
0

귀하의 배열 개체입니다. 따라서 그들은 new으로 생성됩니다.

키워드를 사용하여이 개체에 대한 참조 만 class에 바인딩됩니다.

0

모든 Java arrayobject입니다. 중요 배열은 정적 참조입니다. 초기화 목적을 위해 정적 초기화 블록을

static { 

     c = new String[66]; 
     d = new String[29]; 

     } 

을 사용할 수 있습니다 처음 한 번만로드 할 때 메모리에 클래스로드.

0

정적 수정의 의미는 다음과 같습니다

가 클래스 정의 외부에 선언 된 것처럼 당신은 '정적'메소드 또는 필드 생각할 수 있습니다. 다른 말로하면

정적 필드/메소드가 하나뿐입니다. 정적 필드/메서드는 비 정적 필드/메서드에 액세스 할 수 없습니다.

은 그래서 당신이 원하는거야 것은 : 당신의 접근 방식과

static String c[] = new String[66]; 
static String d[] = new String[29]; 
0

문제는 배열 당신은 SmallTank의 인스턴스를 만들 때마다 초기화된다는 점이다. 아마도 이것은 당신이 원하는하지만 일반적으로 정적 initialiser 올바른 접근 방식이 한 번 배열을 초기화합니다

public class SmallTank { 

    static String tableString = " "; 

    static String c[] = new String[66]; 
    static String d[] = new String[29]; 
    static String p; 

    static { 
     // initialize string array 
     for(int v = 0; v<66; v++){ 
      c[v] = null; 
     } 

는 클래스가 처음로드 될 때, - 보통 처음 당신이 그것의 인스턴스를 생성합니다.

다른 사람들이 지적했듯이 null로 초기화하는 것은 의미가 없습니다.

0

생성자가 아닌 선언 할 때 배열을 초기화하십시오.

public class SmallTank { 
    static String c[] = new String[66]; 
    static String d[] = new String[99]; 
... 
} 

생성자에서이를 수행하는 것이 타당하지만 정적 필드를 사용하는 것은 인스턴스간에 공유하는 것입니다. 귀하의 경우 SmallTank의 새 인스턴스를 만들 때마다 배열이 재설정됩니다.

0

배열은 Java의 개체입니다. 따라서 그들은 new 키워드로 생성됩니다.

정적 필드/메소드의 '복사'는 하나뿐입니다. 하나의 정적 변수 만 클래스에 있으며, 모든 클래스 메소드간에 항상 공유됩니다. 정적 필드/메소드는 비 정적 필드/메소드에 액세스 할 수 없습니다.

static String c[] = new String[66]; 
static String d[] = new String[29]; 

당신은이 문서를 참조 할 수 있습니다 :로

그래서 당신은 당신의 코드를 수정할 수 http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

관련 문제