자바 와 c\#의 차이 점 은 무엇 입 니까?

7639 단어 자바c#
자바 의 설계 자 는 C++의 복잡 함 을 싫어 하기 때문에 자바 가 매우 간결 하고 GC 도 메모리 관 리 를 매우 편리 하 게 한다.C\#는 자바 의 GC 와 가상 컴퓨터 기술 을 마음 에 들 어 마이크로소프트 의 몇 가지 언어 를.NET 에 통합 시 키 려 고 한다.그래서 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 를 이해 하 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기