자바 와 c\#의 차이 점 은 무엇 입 니까?
두 언어의 디자인 사고방식 도 다르다.자 바 는 컴 파일 해석 언어 이 고 C\#는 컴 파일 한 다음 에 실행 언어 를 컴 파일 한다.자바 가 의뢰 하지 않 았 습 니 다.C\#의뢰 가 있 습 니 다.자바 는 인터페이스 로 의뢰 기능 을 수행 하 는 경향 이 있 으 며,C\#에 서 는 Abstract Class 가 인터페이스 보다 더 큰 기능 을 발휘 한다.
자바 는 camel 이름 규칙 을 따 르 고 C\#Pascal 이름 규칙 을 따른다.그러나 지금 은 점점 더 많은 자바 사람들 이 C\#를 사용 하기 시 작 했 고 camel 의 명명 규칙 도 C\#로 가 져 왔 습 니 다.이것 은 C\#코드 를 점점 읽 기 어렵 게 할 수 있 습 니 다.왜 애초에 C\#왜 camel 을 따 르 지 않 았 을 까?나 는 camel 의 명명 규칙 이 무엇이 나 쁜 지 분간 할 수 없다.
클래스
자바 에 서 는 유사 한 이름 을 자주 볼 수 있 습 니 다.this 는 현재 대상 인 스 턴 스 입 니 다.왜 앞 에 유사 한 이름 이 나 옵 니까?이에 대해 C\#프로그래머 는 궁금 해 할 것 이다.
자바 에서 많은 부분 에서 내부 클래스 를 사 용 했 고 심지어 내부 클래스 에서 외부 클래스 의 구성원 을 방문 할 수 있 습 니 다.이때 내부 클래스 에서 this 를 사용 할 때 this 가 도대체 누구의 문제 인지,내부 클래스 의 현재 대상 인 스 턴 스 를 나타 내 는 지,외부 클래스 의 현재 대상 인 스 턴 스 문 제 를 나타 내 는 지 알 수 있 습 니 다.
자바 에 서 는 this 앞 에 외부 클래스 의 클래스 이름 을 추가 하여 내부 클래스 에서 외부 클래스 의 현재 대상 인 스 턴 스 를 사용 하 는 것 을 표시 합 니 다.
우 리 는 아래 의 예 를 보 자.
package core.sisheng;
//
public class OuterClass {
//
private class InnerClass
{
// id ,
public int getId(){ return OuterClass.this.id; }
public void setId(int id) { OuterClass.this.id = id;}
// name , , this
private String name;
public String getName() { return this.name;}
// this
public void setName(String name) { InnerClass.this.name = name;}
// ,
public String getOuterName() { return OuterClass.this.name;}
public void setOuterName(String name) { OuterClass.this.name = name;}
@Override
public String toString()
{
return "Id: " + this.getId() + ", Inner Name: " + this.getName() + ", Outer Name: " + this.getOuterName();
}
}
// id name
private int id;
private String name;
private InnerClass innerInstance;
public OuterClass()
{
this.innerInstance = new InnerClass();
this.innerInstance.setId(20);
this.innerInstance.setName("Tom");
this.innerInstance.setOuterName("Alice");
}
public String toString()
{
return this.innerInstance.toString();
}
}
C\#에서 클래스 는 끼 워 넣 기 클래스 와 비 끼 워 넣 기 클래스 로 구분 되 며 전 자 는 다른 데이터 형식 내부 에 있 는 클래스 입 니 다.후 자 는 특정한 네 임 스페이스 에 직접 정 의 된 유형 이다.C\#에 포 함 된 종 류 를 정의 하 는 경 우 는 거의 없습니다.비 내장 클래스 는 Public 와 internal 의 접근 제어 만 사용 할 수 있 으 며,내장 클래스 는 모든 다섯 가지 접근 제어 문자,private,proctected,internal proctected,Public 와 internal 을 사용 할 수 있 습 니 다.내부 클래스 도 인 스 턴 스 방법 과 private 방법 을 포함 하여 외부 클래스 에 접근 할 수 있 지만 외부 클래스 의 인 스 턴 스 를 명시 적 으로 전달 해 야 합 니 다.
C\#의 내부 클래스 는 외부 클래스 가 정의 하 는 유형 과 정적 방법 을 사용 할 수 있 지만 외부 클래스 의 인 스 턴 스 방법 을 직접 사용 할 수 없 기 때문에 위의 문제 가 존재 하지 않 습 니 다.
C\#에서 외부 클래스 가 내부 클래스 에 대한 역할 은 네 임 스페이스 와 같 습 니 다.액세스 제어 가 허용 되면 아래 의 방법 으로 내부 클래스 대상 인 스 턴 스 를 만 들 수 있 습 니 다.
OuterClass.InnerClass obj = new OuterClass.InnerClass();이 인 스 턴 스 는 외부 클래스 의 인 스 턴 스 와 직접적인 관계 가 없습니다.자바 의 정적 내부 클래스 와 유사 합 니 다.
2.유형 명.class 와 유형
자바 에 서 는 클래스 이름'class'의 용법 도 자주 볼 수 있 는데,이 용법 은 C\#의 type of(클래스 이름)는 형식의 대상 인 스 턴 스 를 가 져 오 는 데 사 용 됩 니 다.
자바 에 서 는 클 라 스 마다 해당 하 는 클 라 스 대상 이 있 습 니 다.클래스 를 작성 하고 컴 파일 이 완료 되면 생 성 된 클 라 스 파일 에 클 라 스 대상 이 생 성 되 어 이러한 유형의 정 보 를 표시 합 니 다.Class 인 스 턴 스 를 가 져 오 는 세 가지 방법:
대상 인 스 턴 스 를 호출 하 는 getClass()방법 으로 대상 의 Class 인 스 턴 스 를 가 져 옵 니 다.
Class 의 정적 방법 forName()을 사용 하여 클래스 이름 으로 Class 인 스 턴 스 를 가 져 옵 니 다.Class.forName(xxx.xx.xx)은 JVM 이 지정 한 클래스 를 찾 고 불 러 오 라 고 요구 하 는 클래스 를 되 돌려 줍 니 다.즉,JVM 은 이러한 정적 코드 세그먼트 를 실행 합 니 다.
클래스 이름.calss 방식 으로 Class 인 스 턴 스 를 가 져 오고 기본 데이터 형식 에 대한 패 키 징 클래스 는'TYPE'를 사용 하여 기본 데이터 형식의 Class 인 스 턴 스 를 가 져 올 수 있 습 니 다.
C\#에서 유형 대상 의 인 스 턴 스 를 가 져 오 는 방식 이 더욱 간단 하고 명확 합 니 다.
데이터 인 스 턴 스 를 호출 하 는 GetType()방법 을 통 해 얻 을 수 있 습 니 다.이 방법 은 Object 에서 계승 되 기 때문에 C\#의 모든 대상 은 GetType()방법,x.GetType()을 가지 고 있 습 니 다.그 중에서 x 는 변수 이름 입 니 다.
type:of(x)의 x 는 구체 적 인 클래스 이름,유형 이름 등 이 어야 하 며 변수 이름 이 아 닙 니 다.
System.Type 의 정적 방법 을 통 해 System.Type.GetType().
3.익명 류
자바 에 서 는 익명 류 의 사용 도 비교적 많다.예 를 들 어 안 드 로 이 드 에 서 는 실현 버튼 의 감청 을 통 해 이와 같은 코드 를 자주 볼 수 있다.
this.listener0 = new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent( MainActivity.this, ActivityFrameLayout.class);
setTitle("FrameLayout");
startActivity( intent );
}
};
여기 서 OnClickListener 는 실제 인터페이스 입 니 다.인 터 페 이 스 는 대상 인 스 턴 스 를 만 드 는 데 사용 할 수 있 습 니까?안 되 지.그래서 자바 는 여기 서 인 터 페 이 스 를 실현 하 는 익명 류 를 자동 으로 만 듭 니 다.우리 가 만 든 것 은 사실상 이 익명 류 의 대상 인 스 턴 스 입 니 다.
이렇게 하 는 장점 은 우리 가 한 번 만 사용 하 는 종 류 를 다시 정의 해 야 한 다 는 것 이다.그리고 이 종 류 를 통 해 대상 인 스 턴 스 를 만 들 고 프로그램의 개발 을 간소화 해 야 한 다 는 것 이다.
예 를 들 어 우 리 는 아래 의 인터페이스 가 있다
public interface myInterface {
void onClick();
}
인 터 페 이 스 를 통 해 인 터 페 이 스 를 실현 하 는 익명 류 의 대상 인 스 턴 스 를 만 든 다음 에 이 대상 인 스 턴 스 를 사용 할 수 있 습 니 다.
myInterface instance = new myInterface(){
@Override
public void onClick()
{
System.out.println("Clicked!");
}
};
instance.onClick();C\#에서 우 리 는 이런 형식 을 전혀 사용 하지 않 고 의뢰 를 통 해 같은 기능 을 매우 간단하게 실현 할 수 있다.자바 에는 의뢰 가 없습니다.
만약 우리 가 이 실례 의 유형 을 출력 한다 면,너 는 이 익명 류 의 실제 유형 을 볼 수 있 을 것 이다.
4.567913.속성의 개념 은 여러분 에 게 익숙 할 것 입 니 다.클래스 구성원 함 수 는 본 유형의 모든 속성 구성원 을 자 유 롭 게 방문 할 수 있 습 니 다.그러나 한 클래스 에서 다른 클래스 의 속성 을 방문 하려 면 비교적 번 거 롭 습 니 다.그래서 우 리 는 Getxxx 와 Setxxx 방법 을 사용 하 는 경우 가 많 습 니 다.이렇게 하면 매우 부자 연 스 러 워 보 입 니 다.예 를 들 어 자바 나 C+를 사용 하면 코드 는 다음 과 같 습 니 다.
그러나 C\#에서 이러한 방법 은'속성 화'되 었 다.같은 코드 가 C\#에서: foo.size++; label.font.bold = true; C\#가 더 읽 고 이해 하기 쉬 운 것 을 알 수 있다.우 리 는 이'속성 방법'의 서브루틴 코드 에서 도 유사 한 상황 을 볼 수 있다.
Java/C++:
System.out.println( instance.getClass());
// class core.sisheng.Study1$1 、 (Property)
C#:
foo.setSize (getSize () + 1);
label.getFont().setBold (true);
이러한 속성 화 방법 과 클래스 의 속성 구성원 을 구분 하기 위해 C\#에서 속성 구성원 을'필드(field)'라 고 부 르 고'속성'은 이러한'속성 화 방법'전용 명사 가 된다.참고 로 이런 속성 화 방법 은 VB 와 DELPHI 에서 자주 만 나 는데 VB 에서 도 속성 이 라 고 합 니 다.또한 C\#에서 Get 과 Set 는 쌍 을 이 루어 야 합 니 다.하나의 속성 은 Get 만 있 고 Set 이 없 으 면 안 됩 니 다.(자바 와 C+에서 Get 만 있 거나 Set 만 있 을 수 있 습 니 다)C\#에서 이렇게 하 는 장점 은 유지 하기 편리 하 다 는 것 입 니 다.만약 에 특정한 속성 을 수정 하려 면 Get 과 Set 방법 을 동시에 주의 하고 수정 하 며 이것 을 고치 지 않 고 저것 을 잊 지 않 습 니 다.5.대상 색인 메커니즘(Indexer)
C\#에 대상 색인 체 제 를 도입 하 였 습 니 다.분명하게 말 하면 대상 색인 은 사실 대상 배열 이다.여 기 는 이전 절 에 있 는 속성 과 연결 되 어 있 습 니 다.속성 은 Get 과 Set 방법 을 숨 겨 야 합 니 다.색인 체제 에서 각 대상 의 Get 또는 Set 방법 이 드 러 났 습 니 다.예 를 들 어 아래 의 예 는 이 점 을 비교적 명확 하 게 설명 했다.이상 은 C\#와 자바 의 차이 점 을 소개 합 니 다
public int getSize()
{
return size;
}
public void setSize (int value)
{
size = value;
}
이상 은 C\#와 JAVA 의 차이 점 을 소개 합 니 다.C\#와 JAVA 를 이해 하 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.