저는 오랫동안 .NET 플랫폼에서 C# 언어를 사용하여 개발해 왔습니다. 최근에는 JAVA를 사용하여 프로젝트를 개발하기 시작했습니다. 이 글에서는 개발 과정에서 제가 느꼈던 몇 가지 차이점에 대해 이야기합니다. 경험과 지식으로 인해 여전히 제한적입니다. 이 기사에서는 제가 본 더 피상적이고 일반적으로 사용되는 기능의 차이점만 설명할 수 있습니다.
VS2008과 VS2010을 사용하여 .NET 프로그램을 개발하고 MyEclipse8.5를 사용하여 JAVA 프로그램을 개발합니다. IDE, 언어, 플러그인의 차이점을 간략하게 설명하겠습니다.
IDE의 차이점:
첫인상은 MyEclipse가 개발 과정에서 코드를 작성하고 보는 데 매우 편리하고, 심지어 VS에는 없는 기능도 많다는 것이었습니다. 다음과 같이 지금까지 겪은 몇 가지 차이점을 나열해 보세요.
1. 변수 필드를 선택하면 이 필드에 사용된 다른 필드의 배경색이 자동으로 강조 표시됩니다. 변수가 어디에 사용되는지 쉽게 확인할 수 있으므로 VS2010 이전에는 이 기능이 존재하지 않았습니다.
2. 중괄호 또는 괄호 안의 코드 세그먼트의 경우 기호 뒤를 두 번 클릭하면 괄호 안의 코드 세그먼트가 자동으로 선택됩니다. VS에는 이러한 기능이 없습니다. .
3. MyEclipse에는 VS의 #region 및 #endregion과 같은 코드 세그먼트 영역이 없습니다. MyEclipse가 아닌 경우 #region 함수 지점... #endregion을 사용할 수 있습니다. 다른 플러그인을 사용하면 효과를 얻을 수 있습니다.
4. Ctrl+alt+t 및 Ctrl+alt+r 단축키는 MyEclipse에서 각각 빠르게 유형이나 리소스를 검색할 수 있으며, 파일을 빠르게 찾을 수 있는 키입니다. 또는 퍼지 매칭에 의한 파일. 특정 유형의 파일이며 VS는 그러한 기능을 찾지 못했습니다.
5. MyEclipse 스마트 알림은 기본적으로 비교적 간단합니다. 창->기본 설정->Java-Editor-에 있는 자동 활성화 상자로 이동할 수 있습니다. >Contenet Assist 탭. Java에 대한 자동 활성화 트리거는 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ로 설정되어 있으며 MyEclipse에 문자를 입력할 때 메시지를 표시할 수 있지만 VS와 달리 소문자 a를 입력하면 대소문자를 구분합니다. , 대문자 A 등으로 시작하는 변수 유형을 지능적으로 프롬프트할 수도 있습니다.
6. MyEclipse는 종종 인코딩 문제에 직면하는데, 이는 초보자에게 매우 불편한 상황입니다. 파일 열기가 깨졌을 때와 요청을 제출할 때 중국어 내용이 깨졌을 때입니다. 작업 공간에 여러 프로젝트가 포함되어 있는 경우 한 프로젝트는 GBK로 인코딩되고 다른 프로젝트는 UTF-8로 인코딩되어 단일 파일이 깨질 수 있습니다. 창->기본 설정->일반에서 전체 프로젝트 인코딩을 설정하세요. -> Workspace의 텍스트 파일 인코딩에서 기타 설정을 선택하고, 별도의 프로젝트의 경우 프로젝트의 속성->리소스를 마우스 오른쪽 버튼으로 클릭한 후 텍스트 파일 인코딩에서 기타 설정을 선택합니다. JSP와 같이 제출된 요청 콘텐츠의 기본 인코딩은 ISO-8859-1이며, 이로 인해 문자가 왜곡되는 경우가 많습니다. Windows->기본 설정->일반->콘텐츠 유형의 텍스트에서 다양한 파일의 인코딩을 설정할 수 있습니다. 하지만 VS는 코드 깨짐 문제가 그리 많지 않고, 초보자가 코드 깨짐 문제를 겪는 것도 쉽지 않습니다.
7. MyEclipse는 종종 초보자에게 혼란스러운 메모리 오버플로 및 기타 관련 메모리 문제를 표시합니다. 이는 종종 myeclipse.ini의 -vmargs에서 구성 매개변수를 수정하여 발생합니다. -Xmx912m은 할당된 최대 힙 메모리가 912M임을 나타내고, -XX:MaxPermSize=556m은 할당된 최대 비힙 메모리가 556M임을 나타냅니다. 이를 통해 MyEclipse 메모리를 사용할 수 있습니다. 그러나 일부 메모리 오버플로가 발생할 수 있습니다. JVM 메모리 매개변수를 별도로 설정해야 합니다. 창->기본 설정->Java->설치된 JRE를 선택한 다음 편집을 선택합니다. , 기본값에서는 VM 인수에서 관련 매개변수를 구성하면 됩니다. 실행 중인 프로그램이 WEB 프로그램인 경우 Tomcat의 메모리 설정도 설정해야 할 수 있습니다. 창->preferences->MyEclipse->Servers->Tomcat에서 해당 버전의 Tomcat을 선택하고, 그런 다음 내부의 JDK 노드를 선택합니다. 선택적 Java VM 인수에서 메모리 매개변수를 설정합니다. 상대적으로 말하면 VS에는 이러한 번거로운 처리가 없으며 일반적으로 메모리 매개 변수를 설정할 필요가 없습니다.
8. 코드 디버깅 시 VS는 MyEclipse보다 강력합니다. 두 가지 모두 중단점에서 기존 변수의 값을 수정할 수 있지만 모니터링 임시 변수 상자에 변수를 입력할 때도 VS가 동일하게 수행할 수 있습니다. 작성한 코드를 지능적으로 표시하지만 MyEclipse는 자동으로 알림을 보낼 수 없으며 VS는 이미 실행 중인 코드에 중단점을 끌 수 있습니다. 이 기능은 문제를 디버깅할 때 매우 강력하고 유용하지만 MyEclipse는 중단점을 끌 수 없습니다.
9. 기본 Ctrl + 왼쪽 클릭은 필드나 유형의 정의를 빠르게 찾을 수 있습니다. F3과 동일하지만 개발 과정에서는 Ctrl + 왼쪽 클릭이 더 빠르고 빠른 것 같습니다. VS의 기본 F12 위치 지정이 더 편리해지며 Spring과 통합된 후 Ctrl+왼쪽 클릭을 통해 삽입된 인터페이스의 하위 구현 코드를 찾을 수 있으므로 구현 코드를 쉽게 볼 수 있습니다. VS는 Spring.net 통합을 사용할 때 이 기능을 제공하지 않습니다.
10. MyEclipse에서 소스를 마우스 오른쪽 버튼으로 클릭하면 getter, setter 생성 및 인터페이스 상위 클래스 메소드 상속과 같은 많은 편리한 기능을 가질 수 있습니다.
11. JAVA 프로젝트는 VS처럼 .sln 또는 .csproj 파일을 두 번 클릭하여 전체 프로젝트를 여는 방식이 아니라 가져오기 방식으로 열립니다. 하지만 한 번 열면 다음에 MyEclipse를 열 때 열려 있던 프로젝트가 자동으로 로드됩니다. VS는 한 번에 하나의 솔루션만 열 수 있으며 솔루션에는 다양한 프로젝트가 포함됩니다. 새로운 솔루션이 추가되면 다음번에는 별도로 오픈해야 합니다.
12. MyEclipse는 JRE 버전이 다른 경우 프로젝트->빌드 경로->빌드 경로 구성-을 사용하도록 선택해야 합니다. >라이브러리->Java 빌드 경로 JRE 버전을 수정하지만 때때로 컴파일 문제가 발생합니다. 이유는 컴파일할 JDK 버전이 선택되지 않았기 때문입니다. 프로젝트->빌드 경로->빌드 경로 구성-. >Java 컴파일러 - 컴파일러 준수 수준을 수정합니다. VS의 경우 상위 버전 코드보다 하위 버전 코드를 여는 것이 더 편리하며 자동으로 업그레이드되거나 컴파일할 .NET 버전을 수동으로 선택할 수 있습니다.
13. MyEclipse는 코드 편집 상자에서 파일의 탭 막대를 두 번 클릭하여 코드 편집 블록의 전체 화면 표시와 다중 상자 표시를 전환하는 것이 VS보다 편리합니다. 패키지 탐색기 상자 옆에 있는 Link Vith Editor를 사용하면 패키지 내 파일 위치를 빠르게 찾을 수 있어 더욱 편리합니다. 그러나 VS에서 파일을 마우스 오른쪽 버튼으로 클릭한 후 직접 열도록 선택할 수도 있습니다. 해당 실제 파일 디렉토리. 이 기능은 MyEclipse에 존재하지 않습니다.
언어 차이:
Java 언어와 C# 언어는 내부적으로 많은 차이가 있고 제공되는 API도 다르지만 매우 유사합니다. , 그러나 특정 기능 포인트를 개발하기 위해 일반적으로 사용되는 아이디어는 비슷합니다. 개발 과정에서 상대적으로 새로운 기술과 기능을 많이 접하지 못했기 때문에 제가 접한 차이점은 다음과 같습니다.
1. Java 패키지 이름은 실제 파일 위치와 일대일로 일치합니다. C#의 네임스페이스는 마음대로 작성할 수 있으며, 컴파일된 어셈블리도 마음대로 변경할 수 있습니다. 어셈블리와 JAVA가 별도로 입력되어 나오는 jar 패키지도 같은 의미입니다.
2. JAVA 파일은 하나의 공개 클래스만 가질 수 있지만 C#은 하나의 파일에 여러 개의 공개 클래스를 가질 수 있습니다.
3. JAR 패키지가 발견되면 Java는 새 jar 패키지의 메소드 필드 설명을 확인하여 인터페이스 호출 매개변수 설명을 확인해야 합니다. 직관적으로 보이지는 않지만, 소스코드에서 생성된 jar 패키지가 있으면 디버깅 중에 해당 패키지의 소스코드를 쉽게 확인할 수 있습니다. .NET에 dll 파일이 있으면 매개변수를 호출하는 메서드 메타데이터를 쉽게 볼 수 있지만, 매개변수에 대한 자세한 설명을 보려면 dll에 해당하는 xml 문서가 필요합니다.
4. WEB 개발에는 JAVA의 Filter, Servlet, Listener가 매우 일반적으로 사용됩니다. Java의 Filter는 .NET의 모듈을 사용하여 일부 기능을 구현할 수 있지만 Filter는 요청 범위를 설정할 수 있습니다. 모듈은 전역 제어입니다. 서블릿은 사용자 정의된 요청을 처리할 수 있는 특정 핸들러와 동일합니다. Listener는 .NET에서 Application_Start를 사용하여 일부 기능을 완료할 수 있지만 JAVA는 WEB 애플리케이션 시작 실행 시 시작되는 일부 기본 Listener를 통합합니다. 구체적인 실행 프로세스는 다음과 같습니다. WEB가 시작될 때 리스너의 ContextInitialized 메소드 -> 모든 필터의 Init(filter-mapping 값에 관계없이) -> load-on-startup 더 큰 값으로 구성된 모든 서블릿의 init 메소드 0 이상(servlet-mapping 값에 관계 없음), 특정 요청은 다음과 같습니다. 특정 Servlet의 init(한 번만 실행됨) ->Filter doFilter(구성된 filter-mapping 값 요청) -> 서블릿 서비스; 웹 사이트 릴리스의 최종 실행 순서는 다음과 같습니다. 필터 파괴->리스너 컨텍스트 파괴.
5. Java의 Final 키워드는 필드를 수정할 수 없으며 생성자에서도 수정할 수 없음을 의미합니다. 이는 C#의 const와 다소 비슷하지만 const는 정적입니다. 기본. C#의 읽기 전용과 유사하지만 생성자에서 읽기 전용을 수정할 수 있습니다. 메서드의 수정자로 사용되는 경우 C#의 봉인 클래스와 유사하며 재정의할 수 없습니다.
6. Java에는 정적 생성자가 없습니다. 일부 초기화 작업을 구현하려면 정적 코드 블록인 static{...}을 사용하고 내부 내용만 입력하면 됩니다. 정적 생성자가 있습니다.
7. JAVA에는 힙 및 스택과 다른 영역인 상수 풀이라는 개념이 있습니다. String에는 C#과 같은 문자열 보존 메커니즘이 있지만 .NET과는 다릅니다. 따라서 Java에서는 문자열 비교에 같음을 사용하는 것이 가장 좋습니다. 그렇지 않으면 문제가 발생할 수 있습니다. 예를 들어 "a" + "b" 문자열은 상수 풀에 있으며 "ab"와 비교하면 동일합니다. 그러나 "a" + b, b는 변수이므로 변수에 배치됩니다. 힙. 계속 사용하면 == "ab" 판단은 false를 반환하므로 JAVA에서 문자열을 판단하기 위해 같음을 사용해 보십시오. 그러나 이 문제는 .NET에서는 관련되지 않습니다. 계산된 문자열은 ==와 동일한 결과를 갖습니다.
8. Java에서는 모든 파일에 Main 메소드 항목이 있으면 실행할 수 있지만 .NET에서는 프로젝트 유형을 콘솔 애플리케이션으로 변경해야 합니다. 주행 캐리어 역할을 하는 주요 방법입니다.
9. Byte 유형의 숫자 범위는 다릅니다. Java에서는 -128부터 127까지이고, .NET에서는 0부터 255까지입니다. 일반적으로 교환하고 처리해야 하는 데이터는 16진수로 변환됩니다. 그런 다음 마지막 두 8비트를 가져와 값이 동일하게 하여 동기식 암호화, 복호화 또는 관련 처리를 용이하게 합니다.
10. Java에서는 get 및 set을 사용하는 것이 좋습니다. 내부 변수에 값을 할당하고 얻는 방법 .NET에서는 get 필드를 사용할 수 있으며, vs2008 이후에는 구문 설탕을 사용하여 자동으로 set을 생성할 수 있습니다. 동등한 내부 필드를 가져오고 설정합니다.
11. JAVA 파일은 기본적으로 저장 후 자동으로 컴파일되는데, 이는 .NET에서는 각 Java 파일을 클래스 파일로 컴파일하기 때문이기도 합니다. 매번 프로젝트 dll 파일이기 때문에 .cs 파일을 저장하고 컴파일하면 작업량이 너무 많아 개발 속도에 영향을 미칩니다.
12. List는 C#에서 List 컬렉션을 사용하는 데 익숙한 사용자를 위해 이미 오류를 보고하며 해당 제네릭도 CLR 레이어와 다릅니다. 예, JVM에서는 JAVA 제네릭을 지원하지 않으므로 성능이 상대적으로 향상되지 않습니다.
13. JAVA의 기본 수정자는 패키지 내에서 볼 수 있습니다(프로젝트의 큰 jar 패키지 아래가 아닌 동일한 폴더 디렉토리에 해당). .NET에서는 자체 및 하위 클래스만 표시됩니다. .NET에서 클래스의 기본 수정자는 내부이며 어셈블리 내에서 액세스할 수 있습니다. 메소드와 필드는 기본적으로 비공개이며 이는 기본 JAVA 패키지에 표시되는 것과 다릅니다.
http://lawson.cnblogs.com/
플러그인의 차이점:
1. MyEclipse 자체는 수많은 플러그인을 통합한 플러그인입니다. VS는 Microsoft의 통합 IDE인 반면, 다른 오픈소스 플러그인을 사용하려면 별도로 다운로드하여 구성해야 합니다.
2. Java에서 웹 서비스를 구현하는 방법은 javax.jws 패키지에만 있는 JAX-WS 외에도 자체 버전이 제공되며 공개된 방법도 있습니다. axis 및 xfire에 의한 웹 서비스의 소스 구현. Axis에는 axis1 및 axis2가 포함되어 있으며 xfire의 이름은 cxf로 변경되었지만 .NET에서 게시된 웹 서비스를 사용하여 서로 호출할 때 일반적으로 몇 가지 문제가 발생합니다. Java에는 wsdl에 대한 형식 요구 사항이 더 엄격합니다.
위 내용은 최근 개발 과정에서 겪은 문제점을 분석하고 정리한 결과이며, 관련 기술적인 부분은 계속해서 개선이 필요합니다. 추후에는 정리하고 이해해 주시기 바라며, 결과가 완전히 정확하지 않을 수 있으니 문제가 있으면 정정해 주시기 바랍니다.