자바 (프로그래밍 언어)
자바는 A는 높은 수준의 , 클래스 기반 , 객체 지향 프로그래밍 언어 몇 구현으로 갖도록 설계되어 종속성이 가능한. 그것은이다 범용 프로그래밍 언어 있도록 구성 응용 프로그램 개발자가 한 번 작성하여 어디서든 실행 , (WORA를) [16] 을 의미 컴파일 된 자바 코드는 모든 플랫폼에서 실행할 수있는 재 컴파일 할 필요없이 지원 자바있다. [17] Java 애플리케이션은 일반적으로 기본에 관계없이 모든 JVM ( Java Virtual Machine) 에서 실행할 수있는 바이트 코드로 컴파일됩니다.컴퓨터 아키텍처 . Java 의 구문 은 C 및 C ++ 와 유사 하지만 둘 중 하나보다 하위 수준 기능 이 적습니다 . Java 런타임은 일반적으로 기존의 컴파일 된 언어에서 사용할 수없는 동적 기능 (예 : 리플렉션 및 런타임 코드 수정)을 제공합니다. 2019 년 현재로 , 자바는 가장 중 하나 를 사용에서 인기있는 프로그래밍 언어 에 따라 GitHub의 , [18] [19] 특히위한 클라이언트 - 서버 웹 응용 프로그램 A는 900 만 개발자보고와. [20][최신 정보]
![]() | |
어형 변화표 | 다중 패러다임 : 일반 , 객체 지향 ( 클래스 기반 ), 명령형 , 반사 형 |
---|---|
에 의해 설계된 | 제임스 고슬링 |
개발자 | Oracle Corporation |
처음 등장 | 1995 년 5 월 23 일 | [1]
안정적인 릴리스 | Java SE 16.0.1 / 2021 년 4 월 20 일 |
타이핑 규율 | 정적, 강함, 안전 , 명목 , 매니페스트 |
파일 이름 확장자 | .java, .class , .jar |
웹 사이트 | oracle .com / java / |
영향을 받음 | |
CLU , [2] Simula67 , [2] LISP , [2] SmallTalk , [2] Ada 83 , C ++ , [3] C # , [4] Eiffel , [5] Mesa , [6] Modula-3 , [7] Oberon , [8] Objective-C , [9] UCSD Pascal , [10] [11] Object Pascal [12] | |
영향을 받음 | |
Ada 2005 , BeanShell , C # , Chapel , [13] Clojure , ECMAScript , Fantom , Gambas , [14] Groovy , Hack , [15] Haxe , J # , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript | |
|
자바는 원래 개발 한 제임스 고슬링 (James Gosling) 에서 썬 마이크로 시스템즈 ( 이후 오라클에 인수되었다 )와 썬 마이크로 시스템즈의 핵심 구성 요소로서 1995 년에 출시 된 자바 플랫폼 . 원래 및 참조 구현 Java 컴파일러 , 가상 머신 및 클래스 라이브러리 는 원래 독점 라이센스에 따라 Sun에 의해 릴리스되었습니다 . 2007 년 5 월으로,의 사양을 준수 자바 커뮤니티 프로세스 , 일이 있었다 relicensed 세 이하의 자바 기술의 대부분을 GNU 일반 공중 사용 허가서 . 오라클은 자체 제공하는 핫스팟 그러나 공식, 자바 가상 머신을 참조 구현 은 IS 오픈 JDK 무료 오픈 소스 소프트웨어와 대부분의 개발자에 의해 사용되는 거의 모든 리눅스 배포판의 기본 JVM입니다 JVM.
2021 년 3 월 현재 [최신 정보]최신 버전은 Java 16 이며, 현재 지원되는 장기 지원 (LTS) 버전 인 Java 11이 2018 년 9 월 25 일에 릴리스되었습니다. Oracle 은 레거시 버전 Java 8에 대한 마지막 무료 공개 업데이트를 출시했습니다. LTS는 2019 년 1 월 상업적 용도로 사용할 수 있지만, 그렇지 않으면 개인 용도로 공개 업데이트를 통해 Java 8을 무기한 지원할 예정입니다. 다른 공급 업체 는 여전히 보안 및 기타 업그레이드를 받고있는 OpenJDK 8 및 11의 제로 비용 빌드 를 제공하기 시작했습니다 .
Oracle (및 기타)은 해결되지 않은 보안 문제로 인한 심각한 위험 때문에 오래된 버전의 Java를 제거 할 것을 적극 권장합니다. [21] Java 9, 10, 12, 13, 14 및 15는 더 이상 지원되지 않으므로 Oracle은 사용자에게 최신 버전 (현재 Java 16) 또는 LTS 릴리스로 즉시 전환 할 것을 권장합니다.
역사



James Gosling , Mike Sheridan 및 Patrick Naughton 은 1991 년 6 월 Java 언어 프로젝트를 시작했습니다. [22] Java는 원래 대화 형 TV 용으로 설계되었지만 당시에는 디지털 케이블 TV 산업에 비해 너무 발전했습니다. [23] 언어는 처음에 호출 된 오크 애프터 오크 고슬링의 사무실 밖에 서 나무. 나중에 프로젝트는 이름으로 갔다 녹색 마지막으로 바뀌 었습니다 자바 에서 자바 커피 에서 커피의 종류 인도네시아 . [24] Gosling 은 시스템 및 응용 프로그램 프로그래머가 익숙한 C / C ++ 스타일 구문으로 Java를 설계했습니다 . [25]
Sun Microsystems는 1996 년에 Java 1.0으로 최초의 공개 구현을 출시했습니다. [26] WORA ( Write Once, Run Anywhere ) 기능을 약속 하여 인기있는 플랫폼 에서 무료 런타임을 제공 합니다 . 상당히 안전하고 구성 가능한 보안 기능을 갖추고있어 네트워크 및 파일 액세스 제한을 허용했습니다. 주요 웹 브라우저는 곧 웹 페이지 내에서 Java 애플릿 을 실행하는 기능을 통합했으며 Java는 빠르게 대중화되었습니다. 자바 1.0 컴파일러를 다시 작성되었습니다 자바에 의해 아서 반 호프 자바 1.0 언어 사양을 엄격하게 준수 할 수 있습니다. [27] Java 2 (1998 년 12 월부터 1999 년까지 J2SE 1.2로 처음 출시됨)의 출현으로 새 버전은 다양한 유형의 플랫폼에 대해 여러 구성을 구축했습니다. J2EE에는 일반적으로 서버 환경에서 실행되는 엔터프라이즈 애플리케이션을위한 기술과 API가 포함되었으며 J2ME는 모바일 애플리케이션에 최적화 된 API를 제공했습니다. 데스크탑 버전은 J2SE로 이름이 변경되었습니다. 2006 년 마케팅 목적으로 Sun은 새 J2 버전을 각각 Java EE , Java ME 및 Java SE 로 이름을 변경 했습니다.
1997 년에 Sun Microsystems는 Java를 공식화하기 위해 ISO / IEC JTC 1 표준기구와 나중에 Ecma International에 접근했지만 곧 프로세스에서 탈퇴했습니다. [28] [29] [30] Java는 Java Community Process를 통해 제어되는 사실상의 표준으로 남아 있습니다 . [31] 한 번에 썬은 자신에도 불구하고, 무료로 사용 가능한 자바 구현의 대부분을 만든 독점 소프트웨어 상태를 표시합니다. Sun은 Java Enterprise System과 같은 특수 제품에 대한 라이센스 판매를 통해 Java에서 수익을 창출했습니다.
2006 년 11 월 13 일, Sun 은 GNU General Public License (GPL) 조건에 따라 대부분의 Java 가상 머신 (JVM)을 무료 및 오픈 소스 소프트웨어 (FOSS)로 출시했습니다 . 2007 년 5 월 8 일 썬은이 프로세스를 완료하여 썬이 저작권을 보유하지 않은 코드의 일부를 제외하고 자유 소프트웨어 / 오픈 소스 배포 조건 에 따라 JVM의 모든 핵심 코드를 사용할 수 있도록했습니다 . [32]
썬의 부사장 인 리치 그린은 자바에 대한 썬의 이상적인 역할은 전도자 로서의 역할이라고 말했다 . [33] 2009-10 년에 Oracle Corporation 이 Sun Microsystems를 인수 한 후 Oracle 은 참여와 투명성의 커뮤니티를 육성하기 위해 끊임없는 노력을 기울인 Java 기술의 청지기로 자리 매김했습니다. [34] 이것은 오라클이 Android SDK 내부에서 Java를 사용하기 위해 Google에 소송을 제기하는 것을 막지는 못했습니다 ( Android 섹션 참조).
2010 년 4 월 2 일 James Gosling은 Oracle 에서 사임했습니다 . [35]
2016 년 1 월 Oracle은 JDK 9 기반 Java 런타임 환경이 브라우저 플러그인을 중단 할 것이라고 발표했습니다. [36]
Java 소프트웨어는 랩톱에서 데이터 센터 , 게임 콘솔 , 과학 용 슈퍼 컴퓨터 에 이르기까지 모든 곳에서 실행됩니다 . [37]
원칙
자바 언어의 생성에는 5 가지 주요 목표가있었습니다. [17]
- 단순하고 객체 지향적 이며 친숙 해야합니다 .
- 강력하고 안전해야합니다.
- 아키텍처 중립적이고 이식 가능해야합니다.
- 고성능으로 실행해야합니다.
- 해석 , 스레드 및 동적 이어야합니다 .
버전
2020 년 9 월 현재[최신 정보], Java 8 및 11은 LTS (장기 지원) 버전으로 지원되며 이후 하나의 비 LTS 버전이 지원됩니다. [38] Java의 주요 릴리스 버전과 릴리스 날짜 :
버전 | 데이트 |
---|---|
JDK 베타 | 1995 년 |
JDK1.0 | 1996 년 1 월 23 일 [39] |
JDK 1.1 | 1997 년 2 월 19 일 |
J2SE 1.2 | 1998 년 12 월 8 일 |
J2SE 1.3 | 2000 년 5 월 8 일 |
J2SE 1.4 | 2002 년 2 월 6 일 |
J2SE 5.0 | 2004 년 9 월 30 일 |
자바 SE 6 | 2006 년 12 월 11 일 |
자바 SE 7 | 2011 년 7 월 28 일 |
자바 SE 8 | 2014 년 3 월 18 일 |
자바 SE 9 | 2017 년 9 월 21 일 |
자바 SE 10 | 2018 년 3 월 20 일 |
자바 SE 11 | 2018 년 9 월 25 일 [40] |
자바 SE 12 | 2019 년 3 월 19 일 |
자바 SE 13 | 2019 년 9 월 17 일 |
자바 SE 14 | 2020 년 3 월 17 일 |
자바 SE 15 | 2020 년 9 월 15 일 [41] |
자바 SE 16 | 2021 년 3 월 16 일 |
에디션
Sun은 서로 다른 애플리케이션 환경을 대상으로하는 4 개의 Java 에디션을 정의하고 지원 하며 플랫폼 중 하나에 속하도록 많은 API를 세분화했습니다 . 플랫폼은 다음과 같습니다.
- 스마트 카드 용 Java 카드. [42]
- Java ME ( Java Platform, Micro Edition ) – 제한된 리소스가있는 환경을 대상으로합니다. [43]
- Java SE ( Java Platform, Standard Edition ) – 워크 스테이션 환경을 대상으로합니다. [44]
- Java EE ( Java Platform, Enterprise Edition ) – 대규모 분산 엔터프라이즈 또는 인터넷 환경을 대상으로합니다. [45]
Java API 의 클래스 는 packages 라는 별도의 그룹으로 구성됩니다 . 각 패키지에는 관련 인터페이스 , 클래스, 하위 패키지 및 예외 집합이 포함되어 있습니다 .
Sun은 또한 나중에 표준 기반의 Java ME 구성-프로필 쌍으로 대체 된 Personal Java 라는 에디션을 제공했습니다 .
실행 시스템
자바 JVM 및 바이트 코드
Java의 설계 목표 중 하나는 이식성 입니다. 즉, Java 플랫폼 용으로 작성된 프로그램은 적절한 런타임 지원을 통해 하드웨어와 운영 체제의 모든 조합에서 유사하게 실행되어야합니다. 이는 자바 언어 코드 를 아키텍처 특정 기계 코드 에 직접 연결하는 대신 자바 바이트 코드 라는 중간 표현으로 컴파일함으로써 달성됩니다 . Java 바이트 코드 명령어는 기계 코드와 유사하지만 호스트 하드웨어 용으로 특별히 작성된 가상 기계 (VM)에 의해 실행됩니다 . 최종 사용자는 일반적으로 독립형 Java 응용 프로그램의 경우 컴퓨터에 설치된 JRE ( Java Runtime Environment)를 사용하고 Java 애플릿의 경우 웹 브라우저를 사용 합니다.
표준 라이브러리는 그래픽, 스레딩 및 네트워킹 과 같은 호스트 별 기능에 액세스하는 일반적인 방법을 제공합니다 .
범용 바이트 코드를 사용하면 이식이 간단 해집니다. 그러나, 오버 헤드 해석 기계 명령어로 바이트 코드를 해석 만든 프로그램은 거의 항상 더 느리게 기본 이상 실행 실행 . 런타임 중에 바이트 코드를 기계 코드로 컴파일하는 JIT (Just -in-time ) 컴파일러가 초기 단계부터 도입되었습니다. Java 자체는 플랫폼에 독립적이며 Java 바이트 코드 를 플랫폼의 기계 언어로 변환 하는 Java 가상 머신 (JVM) 에서 실행되는 특정 플랫폼에 맞게 조정 됩니다. [46]
공연
Java로 작성된 프로그램은 C ++로 작성된 프로그램보다 느리고 더 많은 메모리를 필요로하는 것으로 유명합니다 . [47] [48] 그러나, Java 프로그램 '실행 속도의 도입으로 크게 향상 JIT 컴파일 대한 1997/1998에서 자바 1.1 , [49] 언어의 첨가는 내부 클래스로서 나은 코드 분석 (지지 기능 , StringBuilder 클래스, 선택적 어설 션 등) 및 Java 가상 머신의 최적화 (예 : HotSpot 가 2000 년 Sun의 기본 JVM이 됨). Java 1.5에서는 java.util.concurrent 패키지를 추가하여 성능이 향상되었습니다. ConcurrentMaps 및 기타 멀티 코어 컬렉션 의 잠금없는 구현을 포함 하며 Java 1.6에서 더욱 향상되었습니다.
비 JVM
일부 플랫폼은 Java에 대한 직접적인 하드웨어 지원을 제공합니다. 소프트웨어 Java 가상 머신 대신 하드웨어에서 Java 바이트 코드를 실행할 수있는 마이크로 컨트롤러가 있으며 [50] 일부 ARM 기반 프로세서는 Jazelle 옵션을 통해 Java 바이트 코드를 실행하기위한 하드웨어 지원을 가질 수 있지만 현재 구현에서는 대부분 지원이 중단되었습니다. ARM의.
자동 메모리 관리
Java는 자동 가비지 수집기 를 사용하여 개체 수명주기 에서 메모리를 관리합니다 . 프로그래머는 객체가 생성되는시기를 결정하고 Java 런타임은 객체가 더 이상 사용되지 않으면 메모리를 복구합니다. 개체에 대한 참조가 남아 있지 않으면 도달 할 수없는 메모리 가 가비지 수집기에 의해 자동으로 해제 될 수 있습니다. 일반적으로 더 이상 필요하지 않은 객체가 아직 사용중인 컨테이너에 저장 될 때 프로그래머의 코드가 더 이상 필요하지 않은 객체에 대한 참조를 보유하는 경우 메모리 누수 와 유사한 현상이 계속 발생할 수 있습니다. 존재하지 않는 개체에 대한 메서드가 호출되면 null 포인터 예외가 발생합니다. [51] [52]
Java의 자동 메모리 관리 모델 뒤에있는 아이디어 중 하나는 프로그래머가 수동 메모리 관리를 수행해야하는 부담을 덜어 줄 수 있다는 것입니다. 일부 언어에서는 객체 생성을위한 메모리가 암시 적으로 스택에 할당되거나 명시 적으로 할당되고 힙 에서 할당 해제됩니다 . 후자의 경우 메모리 관리 책임은 프로그래머에게 있습니다. 프로그램이 개체를 할당 해제하지 않으면 메모리 누수 가 발생합니다. 프로그램이 이미 할당 해제 된 메모리에 액세스하거나 할당을 해제하려고하면 결과가 정의되지 않고 예측하기 어렵고 프로그램이 불안정 해 지거나 충돌 할 가능성이 있습니다. 이 문제는 스마트 포인터를 사용하여 부분적으로 해결할 수 있지만 오버 헤드와 복잡성이 추가됩니다. 가비지 수집은 논리적 메모리 누수, 즉 메모리가 여전히 참조되지만 사용 되지 않는 경우를 방지하지 않습니다 .
가비지 수집은 언제든지 발생할 수 있습니다. 이상적으로는 프로그램이 유휴 상태 일 때 발생합니다. 힙에 새 개체를 할당 할 여유 메모리가 충분하지 않은 경우 트리거됩니다. 이로 인해 프로그램이 일시적으로 중단 될 수 있습니다. Java에서는 명시 적 메모리 관리가 불가능합니다.
Java는 C / C ++ 스타일 포인터 산술을 지원하지 않습니다 . 여기서 객체 주소를 산술적으로 조작 할 수 있습니다 (예 : 오프셋 추가 또는 빼기). 이렇게하면 가비지 수집기가 참조 된 개체를 재배치하고 형식 안전성과 보안을 보장 할 수 있습니다.
C ++ 및 일부 다른 객체 지향 언어에서와 같이 Java의 기본 데이터 유형 의 변수 는 일반적으로 원시 데이터가 아닌 경우처럼 힙이 아닌 필드 (객체의 경우) 또는 스택 (메소드의 경우) 에 직접 저장됩니다. 유형 (그러나 이스케이프 분석 참조 ). 이것은 성능상의 이유로 Java 디자이너의 의식적인 결정이었습니다.
Java에는 여러 유형의 가비지 수집기가 포함되어 있습니다. Java 9부터 HotSpot은 G1GC ( Garbage First Garbage Collector )를 기본값으로 사용합니다. [53] 단, 또한 힙을 관리하는데 사용될 수있는 여러 다른 가비지 컬렉터있다. Java로 된 대부분의 애플리케이션의 경우 G1GC로 충분합니다. 이전에는 병렬 가비지 수집기 가 Java 8에서 사용되었습니다.
메모리 관리 문제를 해결했다고해서 프로그래머는 특히 예외가있는 경우 네트워크 또는 데이터베이스 연결, 파일 핸들 등과 같은 다른 종류의 리소스를 적절하게 처리해야하는 부담을 덜어주지 못합니다.
통사론

Java의 구문은 C ++ 및 C의 영향을 크게받습니다 . 구조화, 일반 및 객체 지향 프로그래밍을위한 구문을 결합한 C ++와 달리 Java는 거의 독점적으로 객체 지향 언어로 빌드되었습니다. [17] 모든 코드는 클래스 내부에 작성되며 모든 데이터 항목은 성능상의 이유로 객체가 아닌 원시 데이터 유형 (예 : 정수, 부동 소수점 숫자, 부울 값 및 문자)을 제외하고는 객체입니다. . Java는 C ++의 몇 가지 인기있는 측면 (예 : printf
메소드)을 재사용합니다 .
C ++와 달리 Java는 인터페이스에 대해 다중 상속이 지원되지만 클래스에 대한 연산자 오버로딩 [54] 또는 다중 상속 을 지원하지 않습니다 . [55]
Java는 C ++와 유사한 주석을 사용합니다 . 두 개의 슬래시 (표시된 하나의 선 스타일 : 주석의 세 가지 스타일이있다 //
), 다중 선 스타일이 연 /*
하고 폐쇄 */
하고, 자바 독 주석 스타일로 열 /**
및 폐쇄는 */
. Javadoc 스타일의 주석은 사용자가 Javadoc 실행 파일을 실행하여 프로그램에 대한 문서를 작성할 수 있도록 하며 Eclipse 와 같은 일부 통합 개발 환경 (IDE)에서 읽을 수 있으므로 개발자가 IDE 내 문서에 액세스 할 수 있습니다.
Hello World 예
전통적인 Hello world 프로그램 은 Java로 다음과 같이 작성할 수 있습니다. [56]
public class HelloWorldApp { public static void main ( String [] args ) { 시스템 . 아웃 . println ( "Hello World!" ); // 콘솔에 문자열을 인쇄합니다. }}
모든 소스 파일은 포함 된 공용 클래스의 이름을 따라야하며 접미사를 추가해야 .java
합니다 (예 : HelloWorldApp.java
. 먼저 Java 컴파일러를 사용하여 바이트 코드로 컴파일 하여 .class
접미사 ( HelloWorldApp.class
,이 경우)가 있는 파일을 생성해야합니다 . 그래야만 실행하거나 시작할 수 있습니다. Java 소스 파일은 하나의 공용 클래스 만 포함 할 수 있지만, 비 공용 액세스 수정 자와 임의의 수의 공용 내부 클래스 가있는 여러 클래스를 포함 할 수 있습니다 . 소스 파일에 여러 클래스가 포함 된 경우 하나의 클래스 ( class
키워드로 시작됨)를 public ( public
키워드로 시작됨)으로 만들고 해당 공용 클래스 이름으로 소스 파일의 이름을 지정해야합니다.
public으로 선언되지 않은 클래스는 모든 .java
파일에 저장 될 수 있습니다 . 컴파일러는 소스 파일에 정의 된 각 클래스에 대해 클래스 파일을 생성합니다. 클래스 파일의 이름은 .class가 추가 된 클래스의 이름입니다 . 클래스 파일 생성의 경우 익명 클래스 는 해당 이름이 둘러싸는 클래스의 이름, $ 및 정수 의 연결 인 것처럼 처리됩니다 .
키워드 public
방법은 다른 클래스 코드를 호출 할 수 있도록, 또는 클래스가 클래스 계층 외부 클래스가 사용될 수 있음을 나타낸다. 클래스 계층 구조는 .java 파일이있는 디렉토리의 이름과 관련됩니다. 이를 액세스 수준 수정 자라고합니다. 다른 액세스 수준 수정자는 키워드 private
(동일한 클래스에서만 액세스 할 수있는 메서드) 및 protected
(동일한 패키지의 코드에 액세스 할 수 있도록 허용)를 포함합니다. 코드 조각이 개인 메서드 또는 보호 된 메서드에 액세스하려고하면 JVM이SecurityException
메서드 앞에 있는 키워드 static
[18] 은 해당 클래스의 특정 인스턴스가 아닌 클래스에만 연결되는 정적 메서드를 나타냅니다 . 개체에 대한 참조없이 정적 메서드 만 호출 할 수 있습니다. 정적 메서드는 정적이 아닌 클래스 멤버에 액세스 할 수 없습니다. 정적으로 지정되지 않은 메서드는 인스턴스 메서드이며 작동하려면 클래스의 특정 인스턴스가 필요합니다.
키워드 void
는 main 메소드가 호출자에게 값을 리턴하지 않음을 나타냅니다. Java 프로그램이 오류 코드와 함께 종료되는 경우 System.exit ()를 명시 적으로 호출해야합니다.
메소드 이름 main
은 Java 언어의 키워드가 아닙니다. 프로그램에 제어를 전달하기 위해 Java 실행 프로그램이 호출하는 메소드의 이름입니다. 애플릿 및 Enterprise JavaBeans 와 같은 관리 환경에서 실행되는 Java 클래스 는 main()
메소드를 사용하거나 필요로하지 않습니다 . Java 프로그램은 main
메소드 가있는 여러 클래스를 포함 할 수 있습니다. 즉, VM은 시작할 클래스를 명시 적으로 알려야합니다.
주 메서드는 개체 배열 을 허용해야 String
합니다. 관례 상 args
다른 법적 식별자 이름을 사용할 수있는 것처럼 참조 됩니다. Java 5부터 기본 메소드는 형식의 변수 인수를 사용할 수도 public static void main(String... args)
있으므로 임의의 수의 String
인수 를 사용하여 기본 메소드를 호출 할 수 있습니다 . 이 대체 선언의 효과 args
는 (여전히 String
객체 의 배열 인 매개 변수와 ) 의미 상 동일 하지만 배열을 만들고 전달하기위한 대체 구문을 허용합니다.
Java 런처는 주어진 클래스 (명령 줄 또는 JAR 의 속성으로 지정됨)를로드하고 해당 public static void main(String[])
메서드를 시작하여 Java를 시작합니다 . 독립 실행 형 프로그램은이 메서드를 명시 적으로 선언해야합니다. String[] args
파라미터의 배열 String
클래스에 전달 된 인자를 포함하는 개체. 매개 변수 main
는 종종 명령 줄 을 통해 전달됩니다 .
인쇄는 Java 표준 라이브러리의 일부입니다.이 System
클래스는라는 공개 정적 필드를 정의합니다 out
. out
객체의 인스턴스 PrintStream
클래스와 데이터를 인쇄하기위한 많은 방법 제공 표준 출력 을 포함하여, println(String)
또한 전달에 새로운 라인을 추가하는 문자열 .
문자열 "Hello World!"
은 컴파일러에 의해 자동으로 String 개체로 변환됩니다.
방법을 사용한 예
// 두 개의 슬래시를 사용하는 한 줄 주석의 예입니다./ * * 슬래시와 별표를 사용한 여러 줄 주석의 예입니다. * 이러한 유형의 주석은 많은 정보를 저장하거나 코드를 비활성화하는 데 사용할 수 있지만 * 주석을 닫는 것을 기억하는 것이 매우 중요합니다. * /패키지 fibsandlies ;import java.util.Map ; import java.util.HashMap ;/ ** * 이것은 Javadoc 주석의 예입니다. Javadoc 은이 텍스트에서 * 문서를 컴파일 할 수 있습니다 . Javadoc 주석은 문서화되는 클래스, 메소드, * 또는 필드 바로 앞에 와야합니다 . * @author Wikipedia Volunteers * / 공개 클래스 FibCalculator 확장 Fibonacci 구현 계산기 { private static Map < Integer , Integer > memoized = new HashMap <> (); / * * 다음과 같이 작성된 주요 방법은 JVM 에서 프로그램의 시작점 * 으로 사용됩니다 . * / public static void main ( String [] args ) { memoized . 넣어 ( 1 , 1 ); 메모 . 넣어 ( 2 , 1 ); 시스템 . 아웃 . println ( 피보나치 ( 12 )); // 12 번째 피보나치 수를 얻고 콘솔에 출력 } / ** * 클래스로 래핑 된 Java로 작성된 메소드의 예. * 음수가 아닌 숫자 FIBINDEX가 주어지면 N은 FIBINDEX와 같은 N 번째 피보나치 수를 * 반환합니다 . * * @param는 피보나치 수의 인덱스 fibIndex * 피보나치 수 @return * / 공용 정적 INT 피보나치 ( INT fibIndex를 ) { 경우 ( memoized . containsKey ( fibIndex가 )) 를 돌려주는 memoized를 . get ( fibIndex ); else { int answer = 피보나치 ( fibIndex - 1 ) + 피보나치 ( fibIndex - 2 ); 메모 . 넣어 ( fibIndex , 답변 ); 응답을 반환 ; } } }
특별 수업
애플릿
Java 애플릿은 일반적으로 웹 브라우저에 표시되는 웹 페이지에있는 다른 응용 프로그램에 포함 된 프로그램입니다 . Java 애플릿 API는 이제 2017 년 Java 9 이후 사용되지 않습니다. [57] [58]
서블릿
Java 서블릿 기술은 웹 개발자에게 웹 서버의 기능을 확장하고 기존 비즈니스 시스템에 액세스하기위한 간단하고 일관된 메커니즘을 제공합니다. 서블릿은 클라이언트의 요청에 대한 응답을 생성하는 서버 측 Java EE 구성 요소입니다 . 대부분의 경우 이는 HTTP 요청 에 대한 응답으로 HTML 페이지를 생성하는 것을 의미 합니다. 예를 들어 WebSocket 통신에 사용할 수있는 다른 표준 서블릿 클래스가 많이 있습니다 .
Java 서블릿 API는 웹 서비스를위한 두 가지 표준 Java 기술로 어느 정도 대체되었습니다 (하지만 여전히 내부적으로 사용됨).
- RESTful 웹 서비스를위한 자바 API (JAX-RS 2.0) AJAX, JSON과 REST 서비스에 대한 유용하고,
- XML 웹 서비스를위한 자바 API 에 유용합니다 (JAX-WS) SOAP 웹 서비스 .
애플리케이션 서버 또는 서블릿 컨테이너에서 이러한 API의 일반적인 구현은 실제 비즈니스 로직에 대한 웹 서비스 메서드에 위임하는 HTTP 요청 및 응답과의 모든 상호 작용을 처리하기 위해 표준 서블릿을 사용합니다.
JavaServer 페이지
JSP (JavaServer Pages)는 클라이언트의 HTTP 요청에 대한 응답 (일반적으로 HTML 페이지)을 생성하는 서버 측 Java EE 구성 요소입니다 . JSP는 특별한 사용하여 HTML 페이지에 자바 코드를 포함 구분 기호를 하고 . JSP는 처음 액세스 할 때 자체적으로 Java 애플리케이션 인 Java 서블릿으로 컴파일됩니다 . 그 후 생성 된 서블릿이 응답을 생성합니다. [59] <%
%>
스윙 애플리케이션
Swing 은 Java SE 플랫폼 용 그래픽 사용자 인터페이스 라이브러리 입니다. Swing 의 플러그 형 룩앤필 시스템을 통해 다른 룩앤필을 지정할 수 있습니다 . Windows , GTK + 및 Motif의 클론은 Sun에서 제공합니다. Apple 은 또한 macOS를 위한 Aqua 모양과 느낌을 제공합니다 . 이러한 룩앤필의 이전 구현이 부족하다고 간주되었을 수있는 경우 Java SE 6의 Swing 은 기본 플랫폼의 기본 GUI 위젯 그리기 루틴을 사용하여이 문제를 해결 합니다. [60]
JavaFX 애플리케이션
JavaFX 는 데스크톱 애플리케이션 은 물론 다양한 장치에서 실행할 수있는 풍부한 웹 애플리케이션 을 만들고 제공하기위한 소프트웨어 플랫폼 입니다 . JavaFX는 Java SE 의 표준 GUI 라이브러리 인 Swing 을 대체하기위한 것이지만 JDK 11 이후 JavaFX는 코어 JDK에 있지 않고 별도의 모듈에 있습니다. [61] JavaFX는 Microsoft Windows , Linux 및 macOS 에서 데스크톱 컴퓨터 와 웹 브라우저 를 지원합니다 . JavaFX는 기본 OS 모양과 느낌을 지원하지 않습니다. [62]
제네릭
2004 년 에는 J2SE 5.0의 일부로 제네릭 이 Java 언어에 추가되었습니다. 제네릭이 도입되기 전에 각 변수 선언은 특정 유형이어야했습니다. 예를 들어 컨테이너 클래스의 경우 특정 유형의 개체 만 허용하는 컨테이너를 쉽게 만들 수있는 방법이 없기 때문에 문제가됩니다. 컨테이너가 클래스 또는 인터페이스의 모든 하위 유형 (일반적으로) Object
에서 작동하거나 포함 된 각 클래스에 대해 다른 컨테이너 클래스를 만들어야합니다. 제네릭은 거의 동일한 코드를 포함하는 컨테이너 클래스를 많이 만들지 않고도 컴파일 타임 유형 검사를 허용합니다. 보다 효율적인 코드를 활성화하는 것 외에도 컴파일 타임 오류를 발행하여 특정 런타임 예외가 발생하지 않도록합니다. 자바는 모든 런타임 유형 오류 (방지 경우 ClassCastException
발생들)이 될 것 형 안전 .
2016 년에 Java의 유형 시스템은 건전하지 않은 것으로 입증되었습니다 . [63]
비판
Java에 대한 비판에는 제네릭 구현, [64] 속도, [65] 부호없는 숫자 처리, [66] 부동 소수점 연산 구현, [67] , 기본 Java VM 구현의 보안 취약성 기록이 포함됩니다. 핫스팟 . [68]
클래스 라이브러리
자바 클래스 라이브러리 는 IS 표준 라이브러리 자바 애플리케이션 개발을 지원하기 위해 개발. Oracle 은 Java Community Process 프로그램을 통해 다른 사용자와 협력하여 제어 합니다. [69] 이 과정에 참여하는 회사 또는 개인은 API를 설계 및 개발에 영향을 미칠 수있다. 이 과정은 2010 년대에 논란의 대상이었습니다. [70] 클래스 라이브러리가 포함 같은 기능 :
- 다음을 포함하는 핵심 라이브러리 :
- IO / NIO
- 네트워킹 (참고 : Java 11 이후 새로운 HTTP 클라이언트 )
- 반사
- 동시성
- 제네릭
- 스크립팅 / 컴파일러
- 함수형 프로그래밍 (Lambda, 스트리밍)
- 목록 , 사전 , 트리 , 세트 , 큐 및 양단 큐 또는 스택 과 같은 데이터 구조 를 구현하는 컬렉션 라이브러리 [71]
- XML 처리 (파싱, 변환, 유효성 검사) 라이브러리
- 보안 [72]
- 국제화 및 지역화 라이브러리 [73]
- 애플리케이션 작성자가 외부 시스템과 통신 할 수 있도록하는 통합 라이브러리. 이러한 라이브러리에는 다음이 포함됩니다.
- Java 데이터베이스 연결 (JDBC) API 데이터베이스 액세스를위한
- 조회 및 검색을위한 JNDI ( Java Naming and Directory Interface )
- 분산 애플리케이션 개발을위한 RMI 및 CORBA
- 애플리케이션 관리 및 모니터링을위한 JMX
- 다음을 포함하는 사용자 인터페이스 라이브러리 :
- GUI 구성 요소 를 제공 하는 (heavyweight 또는 native ) AWT ( Abstract Window Toolkit ), 해당 구성 요소를 레이아웃하는 수단 및 해당 구성 요소의 이벤트를 처리하는 수단
- AWT를 기반으로 구축되었지만 AWT 위젯의 (기본이 아닌) 구현을 제공하는 (경량) Swing 라이브러리
- 오디오 캡처, 처리 및 재생을위한 API
- JavaFX
- Java 라이브러리 및 타사 애플리케이션의 바이트 코드가 실행되는 수단 인 Java 가상 머신의 플랫폼 종속 구현
- 웹 브라우저에서 애플릿 을 실행할 수 있도록하는 플러그인
- Java 애플리케이션을 인터넷을 통해 최종 사용자에게 효율적으로 배포 할 수있는 Java Web Start
- 라이선스 및 문서
선적 서류 비치
Javadoc은 Sun Microsystems 에서 만든 포괄적 인 문서 시스템 입니다. 개발자에게 코드 문서화를위한 체계적인 시스템을 제공합니다. Javadoc 주석은 시작 부분에 별표가 추가로 표시됩니다. 즉, 구분 기호는 /**
and입니다 */
. 반면 Java의 일반적인 여러 줄 주석은 구분 기호 /*
및 */
로 설정되고 한 줄 주석은로 시작합니다 //
. [74]
구현
Oracle Corporation 은 2010 년 1 월 27 일 에 Sun Microsystems 를 인수 한 이후 Java SE 플랫폼의 공식 구현의 현재 소유자입니다 .이 구현은 Sun 이 원래 구현 한 Java를 기반으로합니다. Oracle 구현은 Microsoft Windows (XP에서 계속 작동하지만 현재 공식적으로 이후 버전 만 지원됨), macOS , Linux 및 Solaris에서 사용할 수 있습니다. Java에는 Ecma International , ISO / IEC, ANSI 또는 기타 타사 표준 조직에서 인정하는 공식적인 표준화가 없기 때문에 Oracle 구현은 사실상의 표준 입니다.
Oracle 구현은 Java 프로그램을 실행하는 데 필요한 Java SE 플랫폼의 일부를 포함하고 최종 사용자를 대상으로하는 JRE (Java Runtime Environment)와 JDK ( Java Development Kit )로 구성되어 있습니다. 소프트웨어 개발자 용이며 Java 컴파일러 , Javadoc , Jar 및 디버거 와 같은 개발 도구를 포함 합니다. Oracle은 고성능 Java 동적 컴파일러 및 인터프리터 인 GraalVM 도 출시 했습니다 .
OpenJDK 는 GNU GPL에 따라 라이센스가 부여 된 또 다른 주목할만한 Java SE 구현입니다. 구현은 Sun이 GPL에 따라 Java 소스 코드를 공개하기 시작했을 때 시작되었습니다. Java SE 7부터 OpenJDK는 공식 Java 참조 구현입니다.
Java의 목표는 Java의 모든 구현을 호환 가능하게 만드는 것입니다. 역사적으로 Java 브랜드 사용에 대한 Sun의 상표 라이센스는 모든 구현이 호환 가능 하다고 주장합니다 . 이로 인해 Sun이 Microsoft 구현이 RMI 또는 JNI를 지원하지 않고 자체 플랫폼 별 기능을 추가 했다고 주장한 후 Microsoft 와 법적 분쟁이 발생했습니다 . Sun은 1997 년에 소송을 제기했으며 2001 년에는 2 천만 달러의 합의와 Sun의 라이센스 조건을 집행하는 법원 명령을 받았습니다. [75] 그 결과, 마이크로 소프트는 더 이상 선박 자바 윈도우 .
플랫폼에 독립적 인 Java는 Java EE에 필수적 이며 구현을 인증하려면 훨씬 더 엄격한 유효성 검사가 필요합니다. 이 환경은 휴대용 서버 측 애플리케이션을 가능하게합니다.
Java 플랫폼 외부에서 사용
Java 프로그래밍 언어는 컴파일 된 프로그램을 실행하기 위해 소프트웨어 플랫폼이 있어야합니다.
Oracle은 Java 와 함께 사용할 수 있는 Java 플랫폼 을 제공합니다 . 안드로이드 SDK는 주로 개발에 사용되는 다른 소프트웨어 플랫폼 인 안드로이드 응용 프로그램을 자신의 GUI 시스템.
기계적 인조 인간

자바 언어의 핵심 기둥이다 안드로이드 , 오픈 소스 모바일 운영 체제 . Linux 커널 에 구축 된 Android 는 대부분 C로 작성 되지만 Android SDK 는 Android 애플리케이션의 기반으로 Java 언어를 사용하지만 표준 GUI, SE, ME 또는 기타 확립 된 Java 표준을 사용하지 않습니다. [76] 안드로이드 SDK 지원 바이트 코드 언어 같은 낮은 메모리 디바이스에 최적화 된 자신의 가상 머신에서 자바 바이트 코드와 실행과 호환되지 폰 및 태블릿 컴퓨터 . Android 버전에 따라 바이트 코드는 Dalvik 가상 머신에 의해 해석 되거나 Android 런타임에 의해 네이티브 코드로 컴파일됩니다 .
Android SDK에는 대규모 하위 집합의 독립적 인 구현이 포함되어 있지만 Android는 전체 Java SE 표준 라이브러리를 제공하지 않습니다. Java 6 및 일부 Java 7 기능을 지원하여 표준 라이브러리 ( Apache Harmony ) 와 호환되는 구현을 제공합니다 .
논쟁
Android에서 Java 관련 기술을 사용하면 Oracle과 Google간에 법적 분쟁이 발생했습니다. 2012 년 5 월 7 일 샌프란시스코 배심원은 API에 저작권이있는 경우 Google이 Android 기기에서 Java를 사용하여 Oracle의 저작권을 침해했다는 사실을 발견했습니다. [77] William Alsup 지방 판사 는 2012 년 5 월 31 일에 API에 저작권이있을 수 없다고 판결했습니다. [78] 그러나 이것은 2014 년 5 월 미국 연방 순회 항소 법원에 의해 취소되었습니다. [79] 2016 년 5 월 26 일 , 지방 법원은 Android에서 Java API의 저작권 침해가 공정 사용에 해당한다고 판결하여 Google에 찬성 결정을 내 렸습니다. [80] 2018 년 3 월,이 판결은 샌프란시스코 연방 법원에 손해 배상을 판결 한 항소 법원에 의해 뒤집 혔습니다. [81] 구글에 대한 청원을 제기 한 상고의 영장 과 미국의 대법원 오라클의 찬성 항소 법원에 의해 만들어진 두 개의 판결 도전 1 월 2019 년에. [82] 2021 년 4 월 5 일 법원은 Java API 사용을 공정 사용 으로 간주해야한다고 Google에 유리하게 6-2 판결을 내 렸습니다 . 그러나 법원은 API의 저작권 가능성에 대한 판결을 거부하고 대신 Java의 API가 "순전히 논쟁을위한"저작권이있는 것으로 간주하여 판결을 결정했습니다. [83]
또한보십시오
- 씨#
- C ++
- 이전 Android 버전에서 사용 된 Dalvik , 비 JIT Android 런타임으로 대체 됨
- 결정적 병렬 자바
- Java 가상 머신 목록
- Java API 목록
- JVM 언어 목록
Java와 다른 언어의 비교
- C #과 자바의 비교
- 자바와 C ++의 비교
참고 문헌
- ↑ Binstock, Andrew (2015 년 5 월 20 일). "Java의 20 년 혁신" . 포브스 . 2016 년 3 월 14 일에 원본 문서 에서 보존 된 문서 . 만회 년 3 월 (18), (2016) .
- ^ a b c d Barbara Liskov 와 John Guttag (2000). 자바 프로그램 개발-추상화, 사양 및 객체 지향 설계 . 미국, Addison Wesley. ISBN 9780201657685.
- ^ Chaudhary, Harry H. (2014 년 7 월 28 일). "자바 프로그래밍 인터뷰 크래킹 :: 2000+ Java Interview Que / Ans" . 만회하는 5 월 (29), (2016) .
- ^ Java 5.0은 유사한 (그리고 경쟁하는) C # 언어로 도입 된 후몇 가지 새로운 언어 기능 ( 향상된 for loop , autoboxing , varargs 및 annotations )을 추가했습니다. [1] 보관 년 3 월 19 2011 뒤로 기계 [2] 보관 년 1 월 (7) 2006 년 뒤로 기계
- ^ 고슬링, 제임스; McGilton, Henry (1996 년 5 월). "자바 언어 환경" . 2014 년 5 월 6 일에 원본 문서 에서 보존 된 문서 . 검색된 5 월 (6), 2014 년 .
- ^ 고슬링, 제임스; Joy, Bill; Steele, Guy; Bracha, Gilad. "Java 언어 사양, 2nd Edition" . 2011 년 8 월 5 일에 원본 문서 에서 보존 된 문서 . 검색된 년 2 월 (8), 2008 년 .
- ^ "프로그래밍 언어의 AZ : Modula-3" . Computerworld.com.au. 에서 보관 원래 2009 년 1 월 5 일 . 검색된 년 6 월 (9), 2010 년 .
- ^ Niklaus Wirth 는 2005 년 9 월 모스크바 폴리 테크닉 박물관에서 열린 강연에서 여러 공개 행사에서 언급했습니다 (러시아어로 된 여러 개의 독립적 인 직접 설명이 존재합니다. Filippova, Elena (2005 년 9 월 22 일). "Niklaus Wirth의 모스크바 폴리 테크닉 박물관 강의" .), Sun Java 디자인 팀은 Java 릴리스 수년 전에 Oberon 컴파일러에 라이센스를 부여했으며이를 조사했습니다. (상대적) 압축성, 유형 안전성, 가비지 수집, 클래스에 대한 다중 상속 없음-이 모든 주요 전체 디자인 기능은 Java 및 Oberon에서 공유합니다.
- ^ Patrick Naughton 은 Objective-C 를 Java 프로그래밍 언어의 설계에 대한 강력한 영향으로 언급하며 주목할만한 직접 파생물에는 Java 인터페이스 (Objective-C의 프로토콜 에서 파생 됨) 및 기본 래퍼 클래스가포함되어 있다고 말했습니다. [3] 보관 7 월 (13) 2011 뒤로 기계
- ^ TechMetrix Research (1999). "Java의 역사" (PDF) . 자바 애플리케이션 서버 보고서 . 2010 년 12 월 29 일 원본 (PDF) 에서 보관되었습니다 .
프로젝트는 green 이라는 이름으로 진행되었으며 언어는 해석 코드를 생성 할 수있는 UCSD Pascal 의 이전 모델을 기반으로했습니다 .
- ^ "James Gosling과의 대화 – ACM 대기열" . Queue.acm.org. 2004 년 8 월 31 일. 2015 년 7 월 16 일에 원본 문서 에서 보존 된 문서 . 검색된 년 6 월 (9), 2010 년 .
- ^ 1996 년 여름, Sun은 현재 AWT 및 JavaBeans 구성 요소 아키텍처의 이벤트 모델에 대한 선구자를 설계했습니다. 볼랜드는이 과정에 크게 기여했습니다. 우리는 Delphi Object Pascal을 매우주의 깊게 살펴보고 Java 프로그래밍 언어 및 API와의 상호 작용을 이해하기 위해 바인딩 된 메서드 참조의 작동 프로토 타입을 구축했습니다. Microsoft 대리인에 대한 백서
- ^ "채플 사양 (사사)" (PDF) . Cray Inc. 2015 년 10 월 1 일. 2016 년 2 월 5 일에 원본 문서 에서 보관 (PDF) 되었습니다 . 만회 년 1 월 (14), (2016) .
- ^ "Gambas 문서 소개" . Gambas 웹 사이트. 2017 년 10 월 9 일에 원본 문서 에서 보존 된 문서 . 검색된 년 10 월 (9), 2017 년 .
- ^ "Facebook Q & A : Hack은 PHP 세계에 정적 타이핑을 제공합니다" . InfoWorld . 2014 년 3 월 26 일. 2015 년 2 월 13 일에 원본 문서 에서 보존 된 문서 . 만회 년 1 월 (11), 2015 .
- ^ "한 번 쓰고 어디에서나 실행 하시겠습니까?" . 컴퓨터 주간 . 2002 년 5 월 2 일 . 만회 년 7 월 (27), 2009 년 .
- ^ a b c "1.2 Java ™ 프로그래밍 언어의 설계 목표" . 신탁. 1999 년 1 월 1 일. 2013 년 1 월 23 일에 원본 문서 에서 보존 된 문서 . 만회 년 1 월 (14), 2013 .
- ^ a b McMillan, Robert (2013 년 8 월 1 일). "자바가 모조를 잃고 있습니까?" . wired.com . 2017 년 2 월 15 일에 원본 문서 에서 보존 된 문서 . 검색된 년 3 월 (8), 2017 년 .
적어도 끊임없이 변화하는 컴퓨터 프로그래밍 언어의 세계를 주시하는 한 가지 복장에 따르면 Java는 약해지고 있습니다. 10 년 넘게 TIOBE 프로그래밍 커뮤니티 인덱스를 장악했으며 , 다른 언어가 얼마나 많은 버즈를 가지고 있는지 측정하기 위해 인터넷 검색 결과와 같은 것을 살펴 보는 소프트웨어 개발자 열정의 스냅 샷으로 다시 돌아 왔습니다. 그러나 최근 자바는 미끄러지고있다.
- ^ Chan, Rosalie (2019 년 1 월 22 일). "10 개 가장 인기있는 프로그래밍 언어는 '프로그래머를위한 페이스 북에 따르면 ' " . 비즈니스 내부자 . 아카이브 2019년 6월 29일에 원래부터 . 만회 년 6 월 (29), 2019 년 .
- ^ "JavaOne 2013 Review : Java Takes on the Internet of Things" . www.oracle.com . 2016 년 4 월 19 일에 원본 문서 에서 보존 된 문서 . 만회 년 6 월 (19), (2016) . 대체 URL
- ^ "시스템에서 이전 버전의 Java를 제거해야하는 이유는 무엇입니까?" . Oracle . 검색된 년 9 월 (9), (2016) .
- ^ Byous, Jon (c. 1998). "자바 기술 : 초기" . 썬 개발자 네트워크 . Sun Microsystems . 에서 보관 원래 2005년 4월 20일에 . 만회 년 4 월 (22), 2005 .
- ^ 객체 지향 프로그래밍 "자바 기술의 역사" . 썬 개발자 네트워크 . 씨. 1995. 2010 년 2 월 10 일에 원본 문서 에서 보존 된 문서 . 만회 년 4 월 (30), 2010 .
- ^ Murphy, Kieron (1996 년 10 월 4 일). "그렇다면 자바라고 부르기로 결정한 이유는 무엇입니까?" . JavaWorld . 2020 년 7 월 13 일에 확인 함 .
- ↑ Kabutz, Heinz; Once Upon an Oak Archived 2007 년 4 월 13 일 at the Wayback Machine . 아르 티마. 2007 년 4 월 29 일에 확인 함.
- ^ "JAVASOFT SHIPS JAVA 1.0" . 에서 보관 원래 2007년 3월 10일에 . 만회하는 5 월 (13), 2018 .
- ^ Java를 사용한 객체 지향 프로그래밍 : Essentials 및 Applications . Tata McGraw-Hill 교육. 피. 34.
- ^ "JSG – 자바 연구 그룹" . open-std.org . 2006 년 8 월 25 일에 원본 문서 에서 보존 된 문서 . 검색된 년 8 월 2, 2006 년 .
- ^ "왜 자바 (Java ™)이 되었습니까 -하지 - 두 번 표준화" (PDF) . 2014 년 1 월 13 일에 원본 문서 에서 보관 (PDF) 되었습니다 . 검색된 년 6 월 3, 2018 년 .
- ^ "ECMA 란 무엇이며 Microsoft가 관심을 갖는 이유" . 2014 년 5 월 6 일에 원본 문서 에서 보존 된 문서 . 검색된 5 월 (6), 2014 년 .
- ^ "Java 커뮤니티 프로세스 웹 사이트" . Jcp.org. 2010 년 5 월 24 일. 2006 년 8 월 8 일에 원본 문서 에서 보존 된 문서 . 검색된 년 6 월 (9), 2010 년 .
- ^ "JAVAONE : Sun – Java의 대부분은 오픈 소스 입니다. " GrnLight.net. 2014 년 5 월 27 일에 원본 문서 에서 보존 된 문서 . 만회하는 5 월 (26), 2014 년 .
- ^ "자바 전도사로서의 썬의 진화하는 역할" . O'Reilly Media . 2010 년 9 월 15 일에 원본 문서 에서 보존 된 문서 . 검색된 년 8 월 2, 2009 년 .
- ^ "Oracle 및 Java" . oracle.com . Oracle Corporation. 에서 보관 원래 2010년 1월 31일에 . 만회 년 8 월 (23), 2010 .
Oracle은 1995 년에 등장한 이래 Java의 선도적이고 실질적인 지지자였으며 참여와 투명성의 커뮤니티를 육성하기위한 끊임없는 노력으로 Java 기술의 관리자로서 새로운 역할을 맡았습니다.
- ^ Gosling, James (2010 년 4 월 9 일). "이동할 시간 ..." On a New Road . 에서 보관 원래 2010년 11월 5일에 . 만회 년 11 월 (16), 2011 .
- ^ 주제, Dalibor. "플러그인없는 웹으로 이동" . 2016 년 3 월 16 일에 원본 문서 에서 보존 된 문서 . 만회 년 3 월 (15), (2016) .
- ^ "Java 기술에 대해 알아보기" . 신탁. 2011 년 11 월 24 일에 원본 문서 에서 보존 된 문서 . 만회 년 11 월 (21), 2011 .
- ^ "Oracle Java SE 지원 로드맵" . 신탁. 2020 년 5 월 13 일 . 만회 년 12 월 (11), 2020 .
- ^ "JAVASOFT SHIPS JAVA 1.0" . sun.com . 에서 보관 원래 2007년 3월 10일에 . 검색된 년 2 월 (5), 2008 년 .
- ^ Chander, Sharat. "Java SE 11 소개" . oracle.com . 아카이브 2018년 9월 26일에 원래부터 . 만회 년 9 월 (26), 2018 .
- ^ "자바 15의 도착!" . Oracle . 2020 년 9 월 15 일 . 만회 년 9 월 (15), 2020 .
- ^ "자바 카드 개요" . Oracle Technology Network . 신탁. 2015 년 1 월 7 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "Java Platform, Micro Edition (Java ME)" . Oracle Technology Network . 신탁. 2015 년 1 월 4 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "Java SE" . Oracle Technology Network . 신탁. 2014 년 12 월 24 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "Java 플랫폼, 엔터프라이즈 에디션 (Java EE)" . Oracle Technology Network . 신탁. 2014 년 12 월 17 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "JVM (Java Virtual Machine) 플랫폼은 플랫폼에 종속적입니까? 아니면 플랫폼 독립적입니까? JVM을 사용하고 Java를 번역 언어로 사용하는 이점은 무엇입니까?" . 프로그래머 인터뷰. 2015 년 1 월 19 일에 원본 문서 에서 보존 된 문서 . 만회 년 1 월 (19), 2015 .
- ^ Jelovic, Dejan. "Java가 항상 C ++보다 느린 이유" . 에서 보관 원래 2008년 2월 11일에 . 만회 년 2 월 (15), 2008 년 .
- ^ 구글. "C ++ / Java / Go / Scala의 루프 인식" (PDF) . 만회 년 7 월 (12), 2012 .
- ^ "Sun JDK 1.1에 통합 될 시만텍의 Just-In-Time Java 컴파일러" . 2010 년 6 월 28 일에 원본 문서 에서 보존 된 문서 . 검색된 년 8 월 (1), 2009 년 .
- ^ Salcic, Zoran; 박희종; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (2017 년 7 월 22 일). "Noc-HMP : SystemJ로 설계된 임베디드 시스템 용 이기종 멀티 코어 프로세서". 전자 시스템의 설계 자동화에 대한 ACM 거래 . 22 (4) : 73. doi : 10.1145 / 3073416 . ISSN 1084-4309 . S2CID 11,150,290 .
- ^ "NullPointerException" . 신탁. 2014 년 5 월 6 일에 원본 문서 에서 보존 된 문서 . 검색된 5 월 (6), 2014 년 .
- ^ "Java의 예외" . Artima.com. 2009 년 1 월 21 일에 원본 문서 에서 보존 된 문서 . 만회 년 8 월 (10), 2010 .
- ^ "Java HotSpot ™ 가상 머신 성능 향상" . Oracle.com. 2017 년 5 월 29 일에 원본 문서 에서 보존 된 문서 . 만회 년 4 월 (26), 2017 .
- ^ "Operator Overloading (C # vs Java)" . Java 개발자를위한 C # . 마이크로 소프트. 2015 년 1 월 7 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (10), 2014 년 .
- ^ "상태, 구현 및 유형의 다중 상속" . Java ™ 자습서 . 신탁. 2014 년 11 월 9 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (10), 2014 년 .
- ^ "강의 : Hello World 애플리케이션 자세히 살펴보기" . Java ™ 자습서> 시작하기 . Oracle Corporation . 2011 년 3 월 17 일에 원본 문서 에서 보존 된 문서 . 만회 년 4 월 (14), 2011 .
- ^ "사용되지 않는 API, 기능 및 옵션" . www.oracle.com . 만회하는 5 월 (31), 2019 .
- ^ "Applet (Java Platform SE 7)" . docs.oracle.com . 검색된 5 월 (1), (2020) .
- ^ "JSP 페이지 란?-Java EE 5 자습서" . docs.oracle.com . 검색된 5 월 (1), (2020) .
- ^ "Trail : JFC / Swing으로 GUI 만들기 (Java ™ 자습서)" . docs.oracle.com . 검색된 5 월 (1), (2020) .
- ^ "JDK 11에서 제거 된 JavaFX 11은 독립형 모듈로 제공 됩니다. " . 만회 년 10 월 (13), (2020) .
- ^ "JavaFX 시작하기 : Hello World, JavaFX 스타일 | JavaFX 2 자습서 및 설명서" . docs.oracle.com . 검색된 5 월 (1), (2020) .
- ^ "Java 및 Scala의 유형 시스템은 건전하지 않습니다" (PDF) . 2016 년 11 월 28 일에 원본 문서 에서 보관 (PDF) 되었습니다 . 만회 년 2 월 (20), 2017 .
- ^ 아놀드, 켄. "유해한 것으로 간주되는 제네릭" . java.net. 보관 된 원본 년 10 월 (10) 2007 . 만회 년 9 월 (10), 2015 . 이전 아카이브 스냅 샷에서 사용할 수있는 원본 기사에 대한 추가 의견.
- ^ Jelovic, Dejan. "Java가 항상 C ++보다 느린 이유" . www.jelovic.com. 에서 보관 원래 2008년 2월 11일에 . 만회 년 10 월 (17), 2012 년 .
- ^ Owens, Sean R. "Java 및 unsigned int, unsigned short, unsigned byte, unsigned long 등 (또는 오히려 부족함)" . 보관 된 원본 년 2 월 20, 2009 . 검색된 년 7 월 4, 2011 .
- ^ Kahan, William. "Java의 부동 소수점이 모든 사람에게 상처를주는 방법" (PDF) . 캘리포니아 대학교 버클리 전기 공학 및 컴퓨터 과학. 2012 년 9 월 5 일에 원본 문서 에서 보관 (PDF) 되었습니다 . 검색된 년 6 월 4, 2011 .
- ^ "자바를 확인 했습니까?" . 에서 보관 원래 2012년 9월 21일에 . 만회 년 12 월 (23), 2011 .
- ^ Cadenhead, Rogers (2017 년 11 월 20 일), Understanding How Java Programs Work , 2019 년 3 월 26 일 검색
- ^ Woolf, Nicky (2016 년 5 월 26 일). "구글은 안드로이드 코드 저작권을두고 오라클과 6 년 간의 법적 싸움에서 승리했습니다 . " 가디언 . ISSN 0261-3077 . 만회 년 3 월 (26), 2019 .
- ^ "컬렉션 프레임 워크 개요" . 자바 문서 . 신탁. 2014 년 12 월 31 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "Java ™ 보안 개요" . 자바 문서 . 신탁. 2015 년 1 월 3 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "트레일 : 국제화" . Java ™ 자습서 . 신탁. 2014 년 12 월 31 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ "Javadoc 도구에 대한 문서 주석을 작성하는 방법" . Oracle Technology Network . 신탁. 2014 년 12 월 18 일에 원본 문서 에서 보존 된 문서 . 만회 년 12 월 (18), 2014 년 .
- ^ Niccolai, James (2001 년 1 월 24 일). "Sun, Microsoft는 Java 소송을 해결" . JavaWorld . IDG 뉴스 서비스 . 2020 년 7 월 13 일에 확인 함 .
- ^ van Gurp, Jilles (2007 년 11 월 13 일). "Google Android : 초기 노출 및 비평" . Javalobby . 검색된 년 3 월 (7), 2009 년 .
솔직히 나는 구글이 기존의 방대한 구현을 무시하려는 이유를 이해하지 못한다. 그것은 나에게 "여기에서 발명되지 않은"나쁜 경우처럼 보인다. 궁극적으로 이것은 채택을 늦출 것입니다. 모바일 세계에는 이미 너무 많은 Java 플랫폼이 있으며 이것은 또 다른 플랫폼입니다.
- ^ 멀린, 조. "Google은 Oracle 재판에서 침해에 대해 유죄이며 향후 법적 골칫거리가 될 것 입니다. " 법률 및 장애 . Ars Technica. 2012 년 5 월 8 일에 원본 문서 에서 보존 된 문서 . 검색된 5 월 (8), 2012 년 .
- ^ Mullin, Joe (2012 년 5 월 31 일). "구글이 중요한 API 판결에서 이기고 오라클의 사건은 멸망되었습니다" . Ars Technica . 2017 년 3 월 12 일에 원본 문서 에서 보존 된 문서 . 검색된 년 6 월 (1), 2012 년 .
- ^ Rosenblatt, Seth (2014 년 5 월 9 일). "자바 특허 항소에서 Android 대신 Oracle과 법원 측" . CNET . 2014 년 5 월 10 일에 원본 문서 에서 보존 된 문서 . 만회하는 5 월 (10), 2014 년 .
- ^ Mullin, Joe (2016 년 5 월 26 일). "Google이 Oracle을 능가합니다. Android는 Java API를"공정하게 사용 " 합니다. " Ars Technica . 2017 년 1 월 20 일에 원본 문서 에서 보존 된 문서 . 만회하는 5 월 (26), (2016) .
- ^ Farivar, Cyrus (2018 년 3 월 27 일). " " Google의 Java API 패키지 사용은 공정하지 않았습니다 . "법원 규칙에 항소 합니다. Ars Technica . 검색된 년 8 월 (6), 2019 년 .
- ^ Lee, Timothy (2019 년 4 월 23 일). "Google은 대법원에 API 저작권에 대한 재앙적인 판결을 무효화하도록 요청 합니다. " Ars Technica . 만회 년 4 월 (23), 2019 .
- ↑ Google LLC v. Oracle America, Inc 593 미국 ____ (2021)
작품 인용
- 고슬링, 제임스; Joy, Bill; Steele, Guy; Bracha, Gilad; 버클리, 알렉스 (2014). Java® 언어 사양 (PDF) (Java SE 8 ed.).
- 고슬링, 제임스; Joy, Bill ; Steele, Guy L., Jr .; Bracha, Gilad (2005). 자바 언어 사양 (3 판). 애디슨-웨슬리. ISBN 0-321-24678-0.
- Lindholm, Tim; Yellin, Frank (1999). Java Virtual Machine 사양 (2nd ed.). 애디슨-웨슬리. ISBN 0-201-43294-3.
외부 링크
위키 낱말 사전에서 자바 의 사전 정의
Wikimedia Commons의 Java 관련 미디어
Wikibooks의 자바 프로그래밍
Wikiversity의 Java 관련 학습 자료