문제

저는 최근 Blackberry용 애플리케이션 개발을 시작했습니다.결과적으로 저는 Java-ME로 전환하여 Java-ME와 관련 도구를 배워야 했습니다.구문은 쉽지만 다양한 문제와 환경에 문제가 계속 발생합니다.

예를 들어, 나를 놀라게 하고 많은 시간을 낭비한 것은 클래스 객체에 실제 속성이 없다는 것입니다(나는 모든 OOP 언어에 있다고 가정했던 것입니다).문제가 많습니다.Java 구문과 C#을 비교하는 곳을 여러 군데 가봤지만 Java로 전환할 때 주의할 점을 알려주는 사이트는 없는 것 같습니다.

환경은 완전히 다른 문제입니다.Blackberry IDE는 정말 끔찍합니다.그 모습을 보니 Windows 3.1용 Borland C++가 생각나네요. 너무 구식이죠.다른 문제로는 불안정한 인텔리센스, 약한 디버깅 등이 있습니다.Blackberry에는 Eclipse 플러그인 베타 버전이 있지만 디버깅 지원이 없으면 멋진 리팩토링 도구를 갖춘 편집기일 뿐입니다.

그렇다면 Java-ME와 조화를 이루는 방법에 대한 조언이 있습니까?

도움이 되었습니까?

해결책

이것 여기 있는 사람 역전환을 해야 했다.그래서 그는 Java와 C#의 상위 10가지 차이점을 나열했습니다.나는 그의 주제를 다루며 그것이 Java로 어떻게 만들어지는지 보여줄 것입니다:

잡았다 #10 - 표준 출력을 주세요!

Java에서 표준 출력으로 인쇄하려면 다음을 수행하십시오.

System.out.println("Hello");

문제 #9 - 네임스페이스 == 자유

Java에서는 네임스페이스의 자유가 없습니다.클래스의 폴더 구조는 패키지 이름과 일치해야 합니다.예를 들어 패키지의 클래스 org.test 폴더에 있어야 함 조직/테스트

잡았다 #8 - 슈퍼는 어떻게 됐나요?

Java에서는 슈퍼클래스를 참조하기 위해 예약어를 사용합니다. super 대신에 base

문제 #7 - 생성자를 기본 생성자에 연결

Java에는 이것이 없습니다.직접 생성자를 호출해야 합니다.

문제 #6 - Dagnabit, 기존 클래스를 어떻게 하위 클래스로 분류합니까?

Java에서 클래스를 서브클래싱하려면 다음을 수행하십시오.

public class A extends B {
}

수업을 뜻하는데요 A 클래스의 하위 클래스입니다 B.C#에서는 다음과 같습니다. class A : B

문제 #5 - 상수가 상수로 유지되지 않는 이유는 무엇입니까?

Java에서 상수를 정의하려면 키워드를 사용하십시오. final 대신에 const

알았어 #4 - 어디야? ArrayList, Vector 또는 Hashtable?

Java에서 가장 많이 사용되는 데이터 구조는 다음과 같습니다. HashSet, ArrayList 그리고 HashMap.그들은 구현 Set, List 그리고 Map.물론, 더 많은 것이 있습니다.컬렉션에 대해 자세히 알아보기 여기

문제 #3 - 접근자와 변경자(Getter 및 Setter)

Java에는 속성 기능이 없습니다.가져오기 및 설정 메서드를 직접 선언해야 합니다.물론 대부분의 IDE는 이를 자동으로 수행할 수 있습니다.

문제 #2 - 무시할 수 없나요!?

메소드를 선언할 필요는 없습니다. virtual 자바에서.모든 메소드 - 선언된 메소드 제외 final - Java에서는 재정의될 수 있습니다.

그리고 #1 문제는…

Java에서는 기본 유형 int, float, double, char 그리고 long 아니다 ObjectC#과 같습니다.그들 모두는 다음과 같은 각각의 객체 표현을 가지고 있습니다. Integer, Float, Double, 등.

그게 다야.꼭 보는 것을 잊지 마세요 원본 링크, 더 자세한 논의가 있습니다.

다른 팁

Java는 C#과 크게 다르지 않습니다.순전히 구문 수준에서 하루를 보내는 데 도움이 될 수 있는 몇 가지 지침은 다음과 같습니다.

  1. Java에는 두 가지 예외 계열이 있습니다. java.lang.Exception 그리고 그로부터 파생되는 모든 것, 그리고 RuntimeException.이는 Java 예외가 다음과 같기 때문에 의미가 있습니다. 확인됨;이는 런타임이 아닌 예외를 발생시키려면 다음을 추가해야 함을 의미합니다. throws 메소드 선언에 주석을 추가합니다.결과적으로, 귀하의 메소드를 사용하는 모든 메소드는 해당 예외를 포착하거나 다음을 선언해야 합니다. 그것 또한 동일한 예외가 발생합니다.다음과 같이 당연하게 여기는 많은 예외가 있습니다. NullPointerException 또는 IllegalArgumentException, 실제로는 다음에서 파생됩니다. RuntimeException 따라서 이를 선언할 필요가 없습니다.확인된 예외는 두 분야 사이의 논쟁점이므로 직접 시도해 보고 도움이 되는지 아니면 짜증나는지 확인하는 것이 좋습니다.개인적 차원에서는 확인된 예외가 코드 인수분해와 견고성을 크게 향상시킨다고 생각합니다.

  2. Java는 꽤 오랫동안 오토박싱을 지원했지만 C#과 Java 구현 사이에는 여전히 알아야 할 몇 가지 차이점이 있습니다.C#에서는 서로 바꿔서 사용할 수 있습니다. int 값 유형과 참조 유형 모두 Java에서는 문자 그대로 동일한 유형이 아닙니다.당신은 기본 값 유형을 얻습니다 int 라이브러리 참조 유형 java.lang.Integer.이는 두 가지 일반적인 방식으로 나타납니다.값 유형을 일반 유형 매개변수로 사용할 수 없습니다. 따라서 ArrayList<Integer> 대신에 ArrayList<int>) 및 유틸리티 메소드(예: parse 또는 toString)은 참조 유형에서 정적으로 구현됩니다. int a; a.toString(); 하지만 오히려 int a; Integer.toString( a );).

  3. Java에는 두 가지 유형의 중첩 클래스가 있지만 C#에는 하나만 있습니다.Java에서는 다음과 같이 선언되지 않은 정적 클래스입니다. static 수정자는 내부 클래스, 이며, 바깥쪽 클래스의 인스턴스에 암시적으로 액세스할 수 있습니다.이는 C#과 달리 Java에는 대리자 개념이 없고 내부 클래스는 상대적으로 구문상 어려움이 거의 없이 동일한 결과를 얻기 위해 사용되는 경우가 많기 때문에 중요한 점입니다.

  4. Java의 제네릭은 C#과 근본적으로 다른 방식으로 구현됩니다.Java용 제네릭이 개발될 때 이전 VM과의 하위 호환성을 유지하기 위해 런타임 지원 없이 순전히 구문적으로만 변경하기로 결정했습니다.런타임에 직접적인 제네릭 지원이 없으면 Java는 다음과 같은 기술을 사용하여 제네릭을 구현합니다. 유형 삭제.제네릭의 C# 구현에 비해 유형 삭제에는 몇 가지 단점이 있지만 여기서 알아야 할 가장 중요한 점은 Java의 매개변수화된 일반 유형에는 다른 런타임 유형이 없습니다..즉, 컴파일 후 유형 ArrayList<Integer> 그리고 ArrayList<String> ~이다 동등한.제네릭을 많이 사용하면 생각보다 훨씬 빨리 이러한 차이점을 접하게 될 것입니다.

제 생각에는 C# 개발자가 파악하기 가장 어려운 세 가지 언어 측면이 있습니다.그 외에 개발 도구와 클래스 라이브러리가 있습니다.

  1. Java에서는 패키지(네임스페이스), 클래스 이름 및 파일 이름 사이에 직접적인 상관 관계가 있습니다.공통 루트 디렉터리 아래에 클래스가 있습니다. com.example.SomeClass 그리고 org.apache.SomeOtherClass 말 그대로 다음에서 찾을 수 있습니다. com/example/SomeClass.class 그리고 org/apache/SomeOtherClass.class 각기.단일 Java 파일에 여러 클래스를 정의하려고 시도하는 것을 주의하고(개인 클래스의 경우 가능하지만 권장되지 않음) 개발 환경에 더 익숙해질 때까지 이 디렉터리 구조를 고수하세요.

  2. Java에는 C#에 쉽게 매핑되지 않는 클래스 경로 및 클래스 로더 개념이 있습니다(대부분의 .NET 개발자가 일반적으로 사용하지 않는 대략적인 동등 항목이 있음).클래스 경로는 Java VM에 라이브러리와 클래스(사용자 라이브러리와 시스템의 공유 라이브러리 모두!)를 찾을 수 있는 위치를 알려주며 클래스 로더를 유형이 존재하는 컨텍스트로 생각할 수 있습니다.클래스 로더는 다양한 위치(로컬 디스크, 인터넷, 리소스 파일 등)에서 유형(클래스 파일)을 로드하는 데 사용되지만 해당 파일에 대한 액세스를 제한하기도 합니다.예를 들어 Tomcat과 같은 애플리케이션 서버에는 등록된 각 애플리케이션 또는 컨텍스트에 대한 클래스 로더가 있습니다.즉, 애플리케이션 A의 정적 클래스는 이름이 같고 동일한 코드베이스를 공유하더라도 애플리케이션 B의 정적 클래스와 동일하지 않습니다.AppDomain은 .NET에서 다소 유사한 기능을 제공합니다.

  3. Java 클래스 라이브러리는 BCL과 유사합니다.많은 차이점은 외관상 다르지만 문서(및/또는 Google)를 계속해서 실행하게 만드는 데 충분합니다.불행하게도 여기서는 할 일이 없다고 생각합니다. 그냥 가면서 도서관에 익숙해지는 것뿐입니다.

요점:Java를 grok하는 유일한 방법은 Java를 사용하는 것입니다.학습 곡선이 가파르지는 않지만 처음 2~3개월 동안 사용하면서 꽤 자주 놀라고 좌절할 준비를 하십시오.

짧은 대답은, 짜증나겠지만 어렵지는 않을 것이라는 것입니다.

Java와 C#은 기본 개념이 모두 동일하고 많은 라이브러리의 스타일이 매우 비슷하지만 다양한 차이점을 계속해서 헤아리게 될 것입니다.

클래스 속성에 대해 이야기하고 있다면 Java에는 이러한 속성이 있습니다.구문은 다음과 같습니다

public class MyClass {
    public static int MY_CLASS_PROPERTY = 12;
}

더 나은 IDE를 구입하는 것을 진지하게 제안하고 싶습니다.Netbeans, Eclipse, IDEA, JBuider 중 어떤 것이든 전환을 훨씬 더 즐겁게 만들어줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top