2013-06-14 2 views
2

저는 Java에 익숙하지 않아 왜 어떤 코드가 다른 코드로 쓰여지는지 이해하고 싶습니다. 자바의 객체를 생성 할 때, 구문은Java 객체 생성

class variable = new class(parameters); 

또는

class variable; 
variable = new class(parameters); 

같은 내가 클래스 이름을 두 번 호출해야하는 이유를 궁금해합니다. Wikipedia에 설명 된대로, 파이썬 (나도 모르는하는) 나를에 따라 자바는 다른 가능성을 처리 할 수 ​​있기 때문에 예를 들어,?, 그것을 즉

variable = class(parameters) 

되어,보다 직관적 인 접근 방식이 무엇인지 다음

class1 variable = ... class2(parameters) 

미리 감사드립니다.

답변

3

그들은 서로 다른 것을 의미하기 때문에 동일 할 필요는 없습니다.

왼쪽의 클래스 설명자는 변수의 유형을 정의합니다. 이는 해당 변수에 할당 할 수있는 것을 제한하며 호출자에게 거기에있는 객체가 무엇인지에 대해 몇 가지 보증을 제공합니다.

오른쪽에 표시되는 클래스 이름은 실제로 생성자의 "메소드 이름"입니다. 새로운 객체를 만드는 메소드를 호출하고 있습니다. 변수 유형에 지정할 수있는 한 사용자가 만드는 객체는 무엇이든 될 수 있습니다.

그래서 예를 들어, 당신은이 작업을 수행 할 수 있습니다

Object foo = new String("bar"); 

나이 : 실제로 당신이 아마 마지막에 일반 매개 변수를 사용 싶어하지만

Collection x = new ArrayList(); 

(- 나 '를 수업의 질문을 혼동하지 않도록 여기에 두었습니다.)

+0

대단히 고맙습니다. 저는 OOP에 익숙하지 않고 프로그래밍에 익숙하지 않아서 약간 혼란 스럽 습니다만, 요점을 얻고 있습니다. – AndreasT

4

왼쪽은 참조 유형이고 오른쪽은 할당 가능한 객체 유형 일 수 있기 때문에.

class1 유형의 참조 변수 variableclass1의 개체에 할당합니다.

class1 variable = new class1(parameters); 

이 유형 class1subclass1class1는 서브 클래스 또는 인터페이스의 class1 구현 될 수 subclass1의 객체의 참조 변수 variable 할당한다.

class1 variable = new subclass1(parameters); 

파이썬 (Duck Typing)를 동적 타이핑을 사용하며, 따라서 당신은 variable.Dynamic는 언어 변수 유형 검사는 런타임에 수행되는 것들이다 입력 선언 할 필요가 없다.

정적 유형 지정 프로그래밍 언어는 변수를 사용하기 전에 정의 할 필요가없는 언어입니다. 이것은 정적 유형 지정이 사용되기 전에 변수의 명시 적 선언 (또는 초기화)과 관련이 있음을 의미합니다. Java는 정적 유형 언어의 예입니다. type inference (예 : C 및 Java)이없는 정적 유형 언어는 프로그래머가 사용할 메소드 또는 함수 유형을 선언해야합니다. 이것은 컴파일러가 프로그래머가 동기화를 벗어나는 것을 허용하지 않거나 허용하지 않는 프로그램을위한 추가 문서의 역할을 할 수 있습니다. 정적 유형 언어는 컴파일 타임에 변수 유형 검사가 수행되는 언어입니다.

variable = class(parameters); 

에서 (나도 몰라)

파이썬이가 같은 날에 따라보다 직관적 인 접근 방식

동적 타이핑과 우려가 무엇인지 다음 미래에 실수로 변수 이름 variable의 철자가 varaible으로 잘못 지정되면 컴파일시에 catch되지 않지만 런타임에 오류 출력 또는 예외가 발생할 수 있습니다. 정적 타이핑을 통해 Java는 컴파일 타임에 이러한 결함을 발견합니다.

+0

답장을 보내 주셔서 감사합니다. 정말 도움이됩니다. 나는 아직도 그것을 얻기 위해 서브 클래스에 익숙해 져야한다고 생각한다. – AndreasT

1

왼쪽 (참조 정의 유형)은 해당 참조 유형의 해당 클래스 또는 서브 클래스의 유형이 될 수있는 객체 또는 인스턴스에 대한 참조입니다.또한 다음과 일치합니다. reference Python은 모든 변수 이름 (null이 아닌 경우)이 하나의 객체에만 바인딩되는 동적 유형 프로그래밍 언어입니다. 반면 Java는 정적으로 유형이 지정된 프로그래밍 언어입니다.

2

Java는 정적 유형의 프로그래밍 언어입니다. 그러나 Python은 동적 유형 지정 프로그래밍 언어입니다.

위키 피 디아에는 매우 좋은 설명이 있습니다. here.

1

인스턴스의 유형을 지정해야하기 때문에 클래스 이름을 두 번 호출해야합니다. 새로운 인스턴스를 생성 할 때 당신은 또한이 같은 일을 할 수있다 :이 같은

public class Test extends Test1 {} 
... 
Test1 test = new Test(parameters); 

이렇게 일이있는 클래스의 변수와 같은 클래스 필드로 거즈를 유지하면서 당신이 실제로 액세스 할 수있는 방법을 결정합니다.

1
SomeClass variable; 
variable = new SomeClass(params); 

첫 번째 줄은 변수를 선언하고 형식이 SomeClass임을 나타냅니다. 이 시점에서 변수는 비어 있으며 아무것도 참조하지 않습니다.

두 번째 줄은 SomeClass 유형의 새 객체를 만들고 그것에 대한 참조를 variable에 저장합니다. 이 같은 한 줄에 모두 필기구

:

SomeClass variable = new SomeClass(params); 

는 일을 짧게하기 위해 수행 할 수 있습니다. 그러나 결국 가변 선언과 객체 생성이 항상 있습니다. 변수는 항상 어떤 유형이어야하며 유형없이 변수를 선언 할 수 없습니다 (Java는 강력하게 형식화됩니다).