Java 와 c++ 사이의 유사점은 차이점보다 많지만, 이 두 언어 사이에는 몇 가지 주요 차이점이 있어 Java 를 더 쉽게 배우고 프로그래밍 환경을 쉽게 만들 수 있습니다.
여기서 차이점을 완전히 나열할 수는 없습니다. 더 중요한 차이만 나열하겠습니다.
1. 포인터
JAVA 언어를 사용하면 프로그래머가 포인터 없이 직접 메모리에 액세스하는 포인터를 찾을 수 없으며 자동 메모리 관리 기능이 추가되어 C/c++ 언어에서 포인터 조작 오류로 인한 시스템 충돌 (예: 필드 포인터) 을 효과적으로 방지할 수 있습니다. 그러나 JAVA 에 포인터가 없다는 의미는 아닙니다. 포인터는 여전히 가상 시스템 내부에서 사용되지만 외부인은 사용할 수 없습니다. 이것은 자바 프로그램의 보안에 유리하다.
2. 다중 유전
C++ 는 여러 상위 클래스에서 하나의 클래스를 파생할 수 있는 c++ 의 특성인 다중 상속을 지원합니다. 다중 상속 기능은 강하지만 사용하기가 복잡해서 많은 번거로움을 초래할 수 있고 컴파일러도 쉽게 구현되지 않습니다. Java 는 다중 상속을 지원하지 않습니다. 대신 하나의 클래스가 여러 인터페이스 (확장+구현) 를 상속할 수 있도록 하여 c++ 에서 다중 상속 기능을 구현하여 c++ 에서 다중 상속을 구현하는 데 따른 불편을 방지합니다.
3. 데이터 유형 및 클래스
Java 는 완전히 객체 지향 언어이며 모든 함수와 변수는 클래스의 일부여야 합니다. 기본 데이터 유형을 제외한 나머지는 배열을 포함한 클래스 객체로 취급됩니다. 객체는 데이터와 메서드를 결합하여 클래스에 캡슐화하여 각 객체가 고유한 특성과 동작을 구현할 수 있도록 합니다. C++ 를 사용하면 함수와 변수를 글로벌 변수로 정의할 수 있습니다. 또한 Java 는 C/C++ 의 구조와 합집합을 취소함으로써 불필요한 번거로움을 덜어줍니다.
4. 자동 메모리 관리
Java 프로그램의 모든 객체는 c++ 의 new 연산자와 유사한 new 연산자를 사용하여 메모리 스택에 구축됩니다. 다음 문은 클래스 Read 를 설정한 다음 해당 객체의 work 메서드를 호출하는 객체로 구성됩니다.
Read r = new read ();
R.work ();
문 read r = new read (); 스택 구조에 Read 의 인스턴스를 만듭니다. Java 는 불필요한 메모리를 자동으로 회수하므로 프로그래머가 삭제할 필요가 없습니다. C 10 에서는 프로그래머가 메모리 자원을 확보해야 하므로 프로그래머의 부담이 가중됩니다. Java 에서 객체는 더 이상 사용되지 않을 때 가비지 수집기에서 삭제를 나타내는 표시를 합니다. JAVA 의 불필요한 메모리 재활용 프로그램은 백그라운드에서 스레드로 실행되며 유휴 시간에 작동합니다.
5. 연산자 오버로드
Java 는 연산자 오버로드를 지원하지 않습니다. 연산자 오버로드는 C 10 의 두드러진 특징으로 간주됩니다. Java 에서 클래스는 일반적으로 이 기능을 구현할 수 있지만 연산자 오버로드의 편리함은 상실됩니다. Java 언어를 가능한 단순하게 만들기 위해 Java 언어는 연산자 오버로드를 지원하지 않습니다.
6. 전처리 기능
Java 는 사전 처리를 지원하지 않습니다. C/C 는 사전 프로세서라는 사전 편집 단계를 컴파일 중에 수행합니다. 사전 프로세서는 개발자에게 편리함을 제공하지만 컴파일의 복잡성을 증가시킨다. JAVA virtual machine 에는 사전 프로세서가 없지만 C 10 사전 프로세서 기능과 유사한 import 문을 제공합니다.
7.Java 는 기본 함수 인수를 지원하지 않지만 C 10 은 지원합니다.
C 언어에서 코드는 프로그램의 전역 변수에 액세스할 수 있는 함수로 구성됩니다. C 10 은 클래스를 추가하고 클래스 알고리즘을 제공하며 클래스에 연결된 함수입니다. C 10 클래스 메서드는 Java 클래스 메서드와 매우 유사합니다. 그러나 C 10 은 C 를 지원하기 때문에 C 10 개발자가 함수를 사용하는 것을 막을 수 없습니다. 그 결과, 함수와 방법의 혼합은 프로그램을 혼란스럽게 한다.
자바에는 기능이 없습니다. C 10 보다 더 순수한 객체 지향 언어인 Java 는 개발자가 클래스에 모든 루틴을 포함하도록 강요합니다. 실제로 메소드 구현 루틴을 통해 개발자가 코드를 더 잘 구성하도록 동기를 부여할 수 있습니다.
8 현
C 와 C 10 은 문자열 변수를 지원하지 않습니다. C 와 C 10 프로그램에서 빈 종료자는 문자열의 끝을 나타내는 데 사용됩니다. Java 에서 문자열은 Java 언어의 핵심이 되는 클래스 객체 (string 및 stringBuffer) 를 통해 구현됩니다. 클래스 객체를 사용하여 문자열을 구현하면 다음과 같은 이점이 있습니다.
(1) 시스템 전체에서 문자열을 구성하고 문자열 요소에 액세스하는 방법은 일관성이 있습니다.
(2)JBOY3 밴드 양성 문자열 클래스는 추가 확장이 아닌 Java 언어의 일부로 정의됩니다.
(3)Java 문자열은 런타임 오류를 제거하는 데 도움이 되는 런타임 검사를 수행합니다.
(4) 문자열은 "10" 스레드로 연결할 수 있습니다.
9 "goto 문
무서운' goto 문은 C 와 c++ 의' 유물' 으로 언어 기술의 합법적인 부분이다. Goto 문을 인용하면 프로그램 구조가 혼란스럽고 이해하기 어렵다. Goto 문은 무조건 하위 프로그램 및 다중 구조 분기 기술을 전송하는 데 사용해야 합니다. 여러 가지 이유로 Java 는 goto 문을 제공하지 않습니다. Goto 를 키워드로 지정하지만 그 사용은 지원되지 않으므로 프로그램을 간결하고 읽기 쉽게 만들 수 있습니다.
L0. 유형 변환
C 와 C 에서 데이터 유형의 암시적 변환이 발생하는 경우가 있는데, 이는 자동 강제 유형 변환 문제를 포함합니다. 예를 들어 C 10 에서는 정수 변수에 부동 소수점 값을 할당하여 꼬리 수를 제거할 수 있습니다. Java 는 C 10 에서 자동 강제 변환을 지원하지 않습니다. 필요한 경우 프로그램에 의해 명시적으로 강제 변환되어야 합니다.
1 1. 예외
JAVA 의 예외 메커니즘은 예외 이벤트를 캡처하여 시스템의 내결함성을 향상시키는 데 사용됩니다.
시도 {//예기치 않은 코드를 생성할 수 있습니다.
}catch(exceptionType name){
//처리 중
}
여기서 exceptionType 은 예외 유형을 나타냅니다. C++ 에는 그런 편리한 메커니즘이 없습니다.
첨부:
Java 커뮤니티는 세계 최대 ISV 중 일부와 회사 CIO, 정보 기술자, 시스템 분석가, C/S 개발자, 프로그래머, 멀티미디어 디자이너, 마케팅 담당자, 교육자, 관리자, 영화 제작자, 아마추어 등 다양한 사용자를 포함하여 매일 확대되고 있습니다. 전통적으로 이런 사람은 효과적으로 함께 일할 수 있는 사람이 거의 없다. 오픈 시스템에 대해 이야기할 때 게시된 API 및 사양, 소스 코드의 가용성, 하드웨어, 네트워크 및 운영 체제에 대해 자주 이야기합니다. 아무도 사람들이 열려 있다고 말했다. 자바는 오픈 시스템의 닫힌 체인을 완성했습니다. 그것은 인적 자원을 개발했고, 이것은 차례로 협력의 길을 열었다.
자바를 언급할 때, 사람들은 곧 C++ 와 같은 객체 지향 프로그래밍 언어를 떠올려 분산 환경에 적합하고, 이 언어의 특징 (예: 단순성, 안정성, 보안, 아키텍처 독립적, 이식성, 설명 가능, 고성능, 멀티스레드, 동적 등) 을 떠올릴 것입니다. 이들은 프로그래밍 언어로 자바의 주요 특징입니다.
자바 (Java) 는 Sun 의 한 기술팀이 개발했다. Sun 그룹의 기술자는 Java 언어를 구현하는 과정에서 C++ 가 완전히 객체 지향 네트워크 개발 언어가 될 수 없다는 것을 곧 깨달았습니다. C++ 는 원래 C 언어를 기반으로 객체 지향 기능을 추가하여 개발되었으므로 고유한 단점이 있습니다. 이는 주로 C++ 의 다양성과 중복성, 그리고 C++ 컴파일러가 모든 기능을 지원할 수 있는 것은 아닙니다. 이 때문에 Sun 의 기술자는 C++ 를 확장하지 않고 새로운 컴퓨터 언어 (Oak, Java 의 전임자) 를 개발하기로 했다. 하지만 C++ 는 이미 대부분의 프로그래머에게 익숙한 언어가 되었으며, Java 의 디자인은 분명히 이 현실을 무시할 수 없다. 자바 (Java) 와 C++ (C+++) 의 차이가 너무 크다면 프로그래머들은 이 언어를 배우는 데 많은 시간과 노력을 들이게 될 것이다. 그래서 자바는 가능한 한 C++ 스타일을 유지합니다.
태어날 때부터 Java 는 네트워크 사용자를 위해 수많은 소형 클라이언트 어플리케이션을 만들었습니다. 이러한 응용 프로그램은 효과가 좋고 수량이 많기 때문에 많은 사용자가 Java 프로그래밍 언어를 생각하면 불완전한 인상을 받게 됩니다. Java 는 작은 클라이언트 프로그램을 작성하는 데 사용됩니다. 사실, 기술이 발전함에 따라 Java 언어는 비효율적이고 기업의 핵심 컴퓨팅 업무를 감당할 수 없는 이미지를 점차 변화시켜 컴퓨팅 기술의 핵심으로 나아가고 있습니다. 오늘날의 자바 기술은 인터넷을 따라 다양한 응용 분야에 침투하고 있다.
엔터프라이즈 컴퓨팅: 엔터프라이즈 컴퓨팅은 Java 에서 가장 중요한 기술 주제입니다. Sun 은 엔터프라이즈 JavaBean(EJB) 사양을 발표했고, 이후 많은 기업들이 엔터프라이즈 애플리케이션 분야에서 Java 기술을 개발하기 시작했습니다. IBM 은 또한 Windows NT 를 위한 IBM HPCJ(Java 고성능 컴파일러) 버전 12.0 과 Windows NT 를 위한 IBM JDK (Java development kit) 도 개발했습니다. Novell 은 또한 Sun 이 JDK 시스템을 적극적으로 업그레이드하고 있는 새로운 서버측 엔터프라이즈 Java 플랫폼을 발표했습니다. 이 상황은 Java 가 하이엔드 엔터프라이즈 컴퓨팅으로 꾸준히 나아가고 있음을 보여준다. Java 의 경우 다른 프로그래밍 언어와 경쟁하는 엔터프라이즈 컴퓨팅의 주요 프로그래밍 도구의 장점은 첫째, Java 가 객체 지향 프로그래밍에서 C++ 와 같은 다른 프로그래밍 언어보다 간단하여 높은 프로그래밍 효율성을 보장하고 프로그래밍 투자를 줄일 수 있다는 것입니다. 둘째, 자바 가상 머신 기술이 제공하는' 한 번의 프로그래밍, 어디에서나 사용' 의 크로스 플랫폼 기능은 네트워크 환경에 적합하며, 웹 서버측에서 자바 개발을 용이하게 합니다. 셋째, Java 는 IBM, Oracle, Novell, Sybase, Netscape 등 강력한 공급업체와 지지자 팀을 보유하고 있습니다.
신속한 운영: 많은 엔터프라이즈 애플리케이션 개발자들은 Java 의 언어 기능을 매우 좋아하지만, 중요한 시스템을 개발할 때는 언어 특성과 실행 효율성 간의 선택이 골치 아픈 경우가 많습니다. 임계 계산에서는 사용자가 데이터를 압축하거나 실행에 대한 지연 관계를 설정하는 방법에 신경 쓰지 않을 수 있지만 프로그램 실행 속도를 중요하게 생각하기 때문에 공급업체가 Java 컴파일 전략 개발을 최우선으로 생각합니다. 현재 자바 언어의 실행 방식은 실행 방식을 해석하는 것만이 아니라, JITC (just-in-time compiler) 기술과 프로토타입 컴파일 기술은 이미 Sun, IBM, Oracle, Netscape 등 많은 업체에서 채택하고 있다 그 중에서도 IBM 은 이미 JVM (Java Virtual Machine), 운영 체제 및 하드웨어의 기능을 유기적으로 결합하여 Java 의 실행 효율성을 높였습니다.
임베디드 컴퓨팅: 임베디드 Java 는 Java 의 작고 유연한 기능을 최대한 활용하는 잠재적인 응용 기술입니다. HP 의 경우, 이 회사는 프린터, 의료 모니터 및 ATM 과 같은 다양한 장치에 Java 를 내장하도록 설계된 자체 컴파일러 도구와 Java 가상 시스템을 제작했습니다. 임베디드 장치는 실시간 운영 체제에 의존하여 실시간 유효 이벤트를 처리합니다. Java 가 이러한 장치를 내장한 후 실시간 확장을 통해 작동하기 시작하여 장치를 지능적으로 만들고, 임베디드 장치의 관리 용이성과 사용 편의성을 향상시키고, 장치의 생산성을 크게 향상시킵니다. 모든 제조업체들은 이 거대한 잠재 시장을 매우 중시한다. 현재 시장에서 부족한 것은 하나의 표준이다. 표준이 있다면 임베디드 Java 기술을 사용하는 많은 장비가 곧 출시될 것으로 예상됩니다.
Microsoft 가 방금 발표한 Windows XP 는 Java 에 대한 지원을 포기했지만, Java 는 Linux 를 포함한 많은 운영 플랫폼에서 독립적으로 실행될 수 있으며, 일부 기능에서는 Windows 보다 더 좋습니다. 우리는 Windows 를 버리고 Java 개발을 위해 Linux 를 선택할 이유가 있다. 이제 왼손에는 리눅스를 들고 오른손에는 자바를 들고 미소를 지으며 Windows XP 를 들고 있는 빌 게이츠에게 이렇게 말할 수 있습니다. "당신의 XP 가 귀신을 보게 하세요!" "
소프트웨어 개발자에게 완벽한 프로그래밍 언어는 없다. Java 언어를 더 잘 이해하려면 같은 유형의 다른 언어와 비교하는 것이 가장 좋습니다. 자바와 C++ 가 비슷하기 때문에 C++ 와 비교하는 것도 순리적이다. 모든 개발자는 어느 것이 좋고 어떤 것이 나쁘다고 생각하는 나름대로의 관점을 가지고 있다. 개인적으로 자바 개발이 C++ 보다 낫다고 생각합니다. 물론, 모든 사람은 서로 다른 견해와 취향을 가지고 있다. 다음 문장 에서는 Java 와 C++ 의 차이점을 소개하고 개선합니다. 누가 강하든 약하든, 모두들 당연히 이해할 것이다.
Java 는 원래 C++ 의 구문 형식을 사용했으며, 기본적으로 프로그래머가 Java 의 문법 형식을 빠르게 익히고 Java 학습 시간을 단축하기 위한 것임을 알고 있습니다. 결국, C 와 C++ 는 여전히 가장 인기 있는 프로그래밍 언어이다. 그러나 Java 프로그래밍 언어 디자인의 많은 세부 사항을 자세히 살펴보면 Java 가 C++ 의 많은 기능을 제거하고 몇 가지 새로운 기능을 추가한 것을 알 수 있습니다. 이러한 차이점은 다음과 같습니다.
1. #define 및 #include 와 같은 전처리 함수가 없습니다.
C++ 언어의 중요한 특징 중 하나는 사전 프로세서입니다. 다른 프로그래밍 언어에도 #include 기능이 추가되었지만 매크로를 처리할 수 있는 능력은 여전히 부족합니다. #define 의 기능은 Java 에서 상수를 정의하는 대신 사용할 수 있지만 Java 에서는 #include 가 필요하지 않습니다. Java 에서는 프로그램이 실행될 때 유형 데이터가 객체 엔티티에 기록되므로 헤더 파일에 의존하여 사용하는 객체 또는 값이 어떤 데이터 유형인지 알 필요가 없습니다.
C++ 언어를 사용할 때 사전 프로세서의 #include 및 #define 함수만 사용하면 Java 와 같은 디자인으로 인한 번거로움을 느끼지 못할 것입니다. 하지만 C++ 언어를 사용하는 사전 프로세서의 매크로 함수의 고수라면 불편함을 느낄 수 있습니다. 그리고 Java 의 디자인이 무슨 의미가 있는지 생각해 보십시오.
사전 처리 프로그램을 사용하면 많은 기능을 쉽게 수행할 수 있지만 소프트웨어 엔지니어링의 관점에서 볼 때 전체 소프트웨어의 유지 관리에 매우 불리하다. C++ 언어의 사전 프로세서 기능이 너무 강하기 때문에 강력한 프로그래머들은 그들만이 이해할 수 있는 매크로 언어를 개발하는 경우가 많습니다. 전체 소프트웨어가 다른 사람에게 유지 관리를 맡기면 후계자가 이전 사람이 작성한 매크로 기능을 단기간에 이해하기가 어려워 소프트웨어 개발 중 팀 작업 및 향후 유지 관리의 어려움이 가중됩니다.
한 가지 더, C++ 언어 컴파일러가 보는 프로그램 코드는 프로그래머가 보는 프로그램 코드와 다릅니다. 프로그래머는 사전 프로세서에 의해 처리되지 않은 프로그램 코드를 보고 컴파일러는 사전 프로세서에 의해 처리된 프로그램 코드를 봅니다. 사전 프로세서에 대한 매크로 내용이 잘못되면 컴파일러에서 생성된 오류 메시지는 프로그래머가 예상하지 못한 것입니다. 이것은 자연스럽게 프로그램 디버깅의 어려움을 증가시킵니다.
사전 프로세서의 존재도 프로그램 읽기에 불편을 끼친다. 다른 사람이 완성한 C++ 언어 프로그램을 사용하고 싶다면, 보통 그들이 쓴 문서뿐만 아니라 문서를 함께 봐야 그들의 프로그램의 전모를 이해할 수 있다. 자바 프로그램이라면 자바 프로그램 파일을 보면 됩니다.
더 이상 구조, 연합 및 typedef 가 없습니다.
실제로 C++ 에서는 C 언어의 구조, 합집합 등 복잡한 데이터의 사용자 정의 구조 유형을 없앨 수 있습니다. 클래스 정의가 이 기능을 완벽하게 구현할 수 있기 때문입니다. Typedef 도 필요 없습니다. 모든 것을 클래스로 쓰면 됩니다. C++ 는 C 언어와 호환되도록 설계되었지만 중복 언어 기능을 사용할 필요는 없으며 프로그램에 대한 이해를 혼동하기 쉽습니다.
3. 더 이상 기능이 없습니다
Java 프로그래밍 언어에서 함수 (프로그램 안내서 언어에서 가장 중요한 단위) 가 제거되었습니다. 객체 마법사의 개념을 사용하여 함수를 보면 객체 마법사의 개념에서 함수가 불필요하다는 것을 이해할 수 있습니다. 개체 마법사의 프로그램 개념에서 개체의 데이터는 실제 주체이며 개체 데이터를 처리하는 방법은 개체에 첨부되어야 의미가 있습니다. 따라서 함수를 제거한다고 해서 하위 프로그램과 같은 모듈식 개념이 더 이상 존재하지 않는 것은 아닙니다. 반대로 객체의 메서드는 함수를 대체하는 데 사용되며 마법사의 개발 전략이 다시 한 번 강화되었습니다.
더 이상 다중 유전이 없습니다.
C++ 에서 다중 상속은 강력한 기능이지만 일반인이 통제하기 어려운 부분이기도 합니다. 다중 상속을 제거하면 Java 언어의 기능이 줄어들지만 프로그램 작성의 어려움도 크게 단순화됩니다. 다중 상속 기능은 제거되지만 Java 는 다중 상속의 일부 기능을 구현하는 인터페이스 메서드를 제공합니다. 인터페이스란 기본적으로 클래스 대외 통신의 메서드 프로토타입과 클래스 내부의 상수를 정의하는 것입니다. 다중 상속과는 달리 인터페이스는 클래스 메서드의 내용과 클래스의 변수 데이터를 정의하지 않습니다.
5. 더 이상 고토가 없습니다
프로그래밍 언어의 발전사에서, 고토는 줄곧 명예를 훼손하는 반반반한 함수였다. 많은 경우 Goto 를 사용하면 불필요한 프로그램 코드를 크게 줄일 수 있지만, Goto 는 프로그램의 프로세스를 자유롭게 변경할 수 있기 때문에 섣불리 사용하면 프로그램 구조의 혼란을 초래할 수 있습니다. 일반적으로, Goto 를 올바르게 사용하는 예는 루프 내부에 자주 나타나는데, 너는 어느 주기를 일찍 끝내고 싶다. C 언어에서는 break 또는 contine 을 사용하여 한 계층의 루프 프로세스를 변경할 수 있지만, 두 개 이상의 루프 실행 프로세스를 변경하려면 Goto 를 사용하거나 일련의 if-then-else 판단이 있는 중복 부울 변수를 사용합니다.
Java 는 Goto 의 기능을 제거하고 break 과 continue 의 기능을 확장하여 여러 계층의 루프를 중단하거나 계속할 수 있습니다. 이렇게 하면 Goto 남용의 가능성을 피할 수 있을 뿐만 아니라, Goto 의 이점도 유지할 수 있다.
6. 더 이상 운영자가 과부하되지 않습니다.
C++ 에서 연산자 오버로드도 논의할 만한 설계입니다. 거의 모든 C++ 책은 operator 를 사용하여 다시 로드하면 프로그램이 더 자연스럽게 보일 수 있다는 몇 가지 예를 인용합니다. 예를 들어, 프로그래머가 정의한 복수 클래스는 다음과 같습니다.
//C++ 및 0pemtor 오버로드에서 사용자 정의 복합 클래스
클래스 복합체 {
공용:
복수 (이중 실수, 이중 이미지) {
Real _ number = 실수;
Image _ number = 이미지;
}
복수 연산자+(복수 & amprhs){
복수 (rhs.real_number+real_number) 를 반환합니다.
Rhs.image_number+image_, nulnbef);
}
개인:
Doublereal_number // 실수 부분
Doublejmage _ nunmber// 가상부
}
여기서 복수형 더하기 기호로+를 사용하면 의심의 여지가 없지만, * 나 같은 기호를 사용하면 다른 사람이 당신의 프로그램을 보고 인지오류가 나타나지 않도록 보장하기가 어렵다. 이것은 또한 사업자 과부하의 큰 문제이다. 모든 사람이 조작자에게 자신의 정의를 줄 때, 전체 프로그램의 가독성은 큰 영향을 받을 수 있다. 연산자 오버로드의 존재는 필요하지 않습니다. 클래스에 메서드를 정의하여 동일한 목표를 달성할 수 있습니다. Java 에서 이 기능을 제거하는 장단점은 독자가 스스로 판단해야 할 것 같다.
7. 자동 유형 변환을 취소합니다
Java 는 엄격한 유형 검사를 위한 프로그래밍 언어입니다. 다음 프로그램의 경우 C++ 컴파일러에서 컴파일할 때 경고 메시지만 나타나고 Java 에서는 통과하지 않습니다.
Intain integer; Double a double = 2.71828; AInteger = aDouble
이러한 변환은 C++ 에서 합법적이지만 데이터 정확도의 손실을 초래할 수도 있습니다. Java 는 프로그램을 작성하는 사람이 이 점을 완전히 이해할 수 있도록 Java 컴파일러에서 다음을 받아들여야 합니다.
Intain integer;
Doublea double = 2.71828;
Ainteger = (int) a double;
8. 포인터가 없습니다
포인터를 취소하는 데이터 유형은 C++ 언어에 익숙한 많은 프로그래머들을 놀라게 할 수 있습니다. C++ 언어에서 포인터의 유연한 사용은 많은 프로그래머들의 자랑이지만 디버깅 시간이 가장 긴 포인터 문제이기도 하다. 메모리 관리에 대한 C++ 의 태도로 프로그래머는 시스템에서 원하는 메모리를 추적하여 결국 시스템으로 반환해야 하며, 포인터를 사용할 때 합법적인 메모리 공간을 넘지 않도록 주의해야 합니다. 세그먼트 장애 또는 일반적인 보호 장애 등의 문제가 발생할 수 있습니다.
Java 에서 포인터 유형을 제거한다고 해서 프로그래머가 스택, 대기열 및 바이너리 트리와 같은 고급 데이터 구조를 개발할 때 기존 Basic 에서와 같이 광범위한 배열을 사용하여 시스템 메모리를 시뮬레이션하고 포인터와 유사한 표현을 구성해야 한다는 의미는 아닙니다.
대신 Java 는 Lisp 언어와 유사한 참조 유형을 제공합니다. 참조 읽기 할당된 메모리 내용을 참조하여 소유하지 않은 메모리 공간을 읽지 않도록 할 수 있습니다. 반면에, 프로그램의 실행 시스템은 동적으로 메모리 가비지 수집을 할 수 있으며, 시스템에서 참조하지 않는 메모리 공간을 회수할 수 있습니다.
9. C++ 로 연결
자바는 아무리 강해도 누군가는 그것을 C++ 와 연결해야 한다. 새로운 프로그래밍 언어나 소프트웨어 개발 도구가 등장하기만 하면 사람들은 "원래 라이브러리에 연결할 수 있는 능력이 있나요?" 라고 묻기 때문이다. C++ 언어가 컴퓨터계에서 매우 중요한 위치를 차지하고 있기 때문이다. 여러분의 질문은 실제로 "C++ 와 연결할 수 있을까요?" 라고 직접 묻는 것과 같습니다. 。 현재 Java 에는 C++ 언어와 연결하는 방법이 있습니다. 기본적으로 C++ 언어로 작성된 프로그램을 DLL (동적 링크 라이브러리) 로 만든 다음 Java 프로그램이 DLL 의 함수를 호출하는 것입니다.
이러한 연결을 통해 DLL 의 함수는 Java 의 관점에서 "방법" 으로 볼 수 있습니다. 그러나이 방법은 Java 언어가 아닌 다른 프로그래밍 언어로 직접 제공되기 때문에 "NativeMethod" 라고합니다.
Java 애플릿의 일부 보안 제한으로 인해 외부 프로그램에 연결하는 이 방법은 Java 응용 프로그램에서만 사용할 수 있습니다.
요약:
실제로 constant 및 typedef 문에는 #define 문의 기능이 포함되어 있습니다. 이제 구조와 연합이 Java 클래스로 대체되었습니다. C ++ 의 언어 사양에는 C 언어와의 역호환성을 유지하기 위해 많은 중복이 포함되어 있기 때문에 이러한 특성이 제거됩니다. 예를 들어, 클래스에는 실제로 구조와 결합의 역할이 포함되어 있으므로 두 데이터 구조를 완전히 취소할 수 있습니다. #define 문과 관련하여 Java 언어 사양의 개발자는 이 문의 출발점은 프로그램의 가독성을 높이기 위한 것이지만 실제 효과는 반대로 코드를 읽기 어렵게 만드는 경우가 많기 때문에 취소해야 한다고 생각합니다. Java 는 더 이상 독립 함수를 지원하지 않으므로 모든 함수를 클래스에 캡슐화해야 합니다. 일반적으로 C++ 에 사용되는 수퍼 클래스가 매우 불안정하다는 인식이 널리 퍼져 있기 때문에 Java 는 C++ 의 다중 상속을 포기하고 인터페이스로 대체했습니다. Java 의 인터페이스는 클래스가 다른 클래스의 눈에서 구현할 수 있는 메서드를 나타냅니다. 이 클래스의 전체 구조가 아닌 한 클래스의 메서드 또는 상수와 변수만 표시합니다.
마지막으로 Java 는 C++ 에서 GOTO 문, 연산자 오버로드, 자동 유형 변환 및 포인터 데이터 유형도 취소했습니다. GOTO 문은 여러 해 동안 논란을 벌였지만, 일부 프로그래머들이 줄곧 이 문장에 대해 독보적이었던 것과 관련이 있다. C++ 는 여전히 데이터 유형의 자동 변환을 지원하지만 Java 에서는 프로그래머가 데이터 유형을 명시적으로 변환해야 합니다. 자동 데이터 유형 변환을 통해 두 데이터 유형이 호환되지 않는 변수는 명시적 해석 없이 서로 값을 지정할 수 있습니다. 이로 인해 때때로 문제가 발생할 수 있는데, 그 중 가장 흔한 것은 정확도의 손실이다. 예를 들어 부호 없는 정수에 부호 있는 32 비트 정수를 지정하면 모든 결과가 양수가 됩니다. Java 의 디자이너는 프로그램 오류가 발생하기 쉽다고 생각하여 이 변환 방법을 지원하지 않기로 결정했습니다.