Кіріспе
Java - жоғары деңгейдегі, сыныпқа негізделген, объектіге бағытталған бағдарламалау тілі, мүмкіндігінше аз іске асыру тәуелділіктерімен жасалған. Бұл жалпы мақсаттағы бағдарламалау тілі, бағдарламашыларға бір рет жазып, кез келген жерде іске қосуға мүмкіндік береді (WORA), яғни компиляцияланған Java коды Java қолдауы бар барлық платформаларда қайта компиляциялау қажеттілігінсіз жұмыс істей алады. Java қолданбалары әдетте кез келген Java виртуалды машинасының (JVM) жұмыс істейтін байт-кодқа компиляцияланады, компьютер архитектурасының негізгі ерекшеліктеріне қарамастан. Java синтаксисі C және C++ тілдеріне ұқсас, бірақ олардан төменгі деңгейдегі мүмкіндіктері кем. Java ортасы динамикалық мүмкіндіктерді (мысалы, рефлексия және орындалу кезінде кодты өзгерту) қамтамасыз етеді, бұл мүмкіндіктер дәстүрлі компиляцияланған тілдерде әдетте қолжетімді емес. Java шығарылымынан кейін көп ұзамай танымал болды және содан бері өте танымал бағдарламалау тілі болып табылады. GitHub мәліметтері бойынша 2022 жылы Java ең танымал бағдарламалау тілдерінің ішінде үшінші орынды иеленді. Әлі де кеңінен қолданылып жүргенімен, соңғы жылдары Java қолданылуы біртіндеп төмендеп, JVM-ді пайдаланатын басқа тілдер танымалдыққа ие болып келеді. Java-ны бастапқыда Sun Microsystems компаниясының Джеймс Гослинг әзірлеген. Ол 1995 жылдың мамыр айында Sun Java платформасының негізгі құрамы ретінде жарық көрді. Бастапқы және анықтамалық Java компиляторлары, виртуалды машиналары және сынып кітапханалары бастапқыда Sun компаниясының меншік лицензиясы бойынша шығарылды. 2007 жылдың мамыр айынан бастап, Java Community Process талаптарына сәйкес, Sun өзінің Java технологияларының көп бөлігін GPL 2.0 лицензиясы бойынша қайта лицензиялады. Oracle өзінің HotSpot Java Virtual Machine-ін ұсынады, бірақ ресми анықтамалық нұсқасы – OpenJDK JVM, ол ақысыз ашық кодты бағдарламалық қамтамасыз ету болып табылады және көптеген әзірлеушілер оны пайдаланады, сондай-ақ ол барлық Linux дистрибутивтері үшін стандартты JVM болып табылады. 2024 жылғы мәліметтер бойынша, Java 22 – соңғы нұсқа. Java 8, 11, 17 және 21 – бұрынғы LTS нұсқалары, олар әлі де ресми түрде қолдау көрсетіледі.
Java is a high level, class based, object oriented programming language that is designed to have as few implementation dependencies as possible. It is a general purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture. The syntax of Java is similar to C and C++, but has fewer low level facilities than either of them. The Java runtime provides dynamic capabilities (such as reflection and runtime code modification) that are typically not available in traditional compiled languages. Java gained popularity shortly after its release, and has been a very popular programming language since then. Java was the third most popular programming language in as of 2022 according to GitHub. Although still widely popular, there has been a gradual decline in use of Java in recent years with other languages using JVM gaining popularity. Java was originally developed by James Gosling at Sun Microsystems. It was released in May 1995 as a core component of Sun's Java platform. The original and reference implementation Java compilers, virtual machines, and class libraries were originally released by Sun under proprietary licenses. As of May 2007, in compliance with the specifications of the Java Community Process, Sun had relicensed most of its Java technologies under the GPL 2.0 only license. Oracle offers its own HotSpot Java Virtual Machine, however the official reference implementation is the OpenJDK JVM which is free open source software and used by most developers and is the default JVM for almost all Linux distributions. as of 2024, Java 22 is the latest version. Java 8, 11, 17, and 21 are previous LTS versions still officially supported.
Тарих
Джеймс Гослинг, Майк Шеридан және Патрик Ноттон 1991 жылдың маусым айында Java тілінің жобасын бастады. Java бастапқыда интерактивті теледидар үшін жасалған, бірақ ол сол кездегі цифрлық кабельдік теледидар индустриясы үшін тым жетілген еді. Алғашында бұл тіл Гослингтің кеңсесі алдында тұрған емен ағашының атымен аталған. Кейіннен жоба Green деп аталып, ақырында Java деп аталды, яғни Индонезиядан шығарылатын кофе түрі. Гослинг Java-ны C/C++ стилімен жүйелік және қолданбалық бағдарламалаушыларға таныс болатын синтаксиспен жасады. Sun Microsystems компаниясы Java 1.0 ретінде алғашқы Java бағдарламасын 1996 жылы шығарды. Ол бір рет жазу, кез-келген жерде (WORA) мүмкіндігін қамтамасыз етуге уәде берді, танымал платформаларда ешбір шығынсыз жұмыс істеу уақытын қамтамасыз етті. Жетерлік деңгейде қауіпсіз және конфигурацияланатын қауіпсіздікке ие, желіге және файлдарға қол жеткізуді шектеуге рұқсат берді. Көптеген веб-браузерлер жақында веб-беттерде Java апплеттерін орындау мүмкіндігін енгізді, ал Java тез танымал болды. Java 1.0 компиляторы Java 1.0 тілінің ерекшеліктеріне қатаң сәйкес келетіндей Артур ван Хофф Java-да қайта жазды. Java 2 (алғашқыда J2SE 1.2 ретінде 1998 жылдың желтоқсан айында 1999 жылы шығарылды) пайда болғаннан кейін жаңа нұсқаларда әртүрлі платформалар үшін бірнеше конфигурация жасалды. J2EE-ге серверлік ортада жұмыс істейтін корпоративтік қосымшалар үшін технологиялар мен API-лер кірді, ал J2ME мобильдік қосымшаларға оңтайландырылған API-лерді ұсынды. Үстелге арналған нұсқа J2SE деп қайта аталды. 2006 жылы маркетингтік мақсаттар үшін Sun жаңа J2 нұсқаларын Java EE, Java ME және Java SE деп атады. 1997 жылы Sun Microsystems Java-ны ресмилендіру үшін ISO/IEC JTC 1 стандарттау органына, кейіннен Ecma International-ға жүгінді, бірақ ол көп ұзамай процестен шығып кетті. Java Java Community Process арқылы бақыланатын де-факто стандарт болып қала береді. Бір кезде Sun өзінің Java-ның көп бөлігін, олардың меншік бағдарламалық жасақтама мәртебесіне қарамастан, тегін пайдалануға ұсынды. Sun Java Enterprise System сияқты мамандандырылған өнімдерге лицензия сату арқылы Java-дан табыс тапты. 2006 жылдың 13 қарашасында Sun өзінің Java виртуалды машинасының (JVM) көп бөлігін GPL 2.0 лицензиясының шарттары бойынша еркін және ашық бастапқы кодты бағдарламалық қамтамасыз ету (FOSS) ретінде шығарды. 2007 жылдың 8 мамырында Sun процесті аяқтады, оның барлық JVM негізгі кодын еркін бағдарламалық қамтамасыз ету / ашық бастапқы кодтық тарату шарттары бойынша қолжетімді етті, Sun авторлық құқығына ие емес кодтың кішкентай бөлігін қоспағанда. Sun компаниясының вице-президенті Рич Грин Sun компаниясының Java-ға қатысты идеалдық рөлі – жақтаушы ретінде екенін айтты. 2009-10 жылдары Sun Microsystems компаниясын Oracle корпорациясы сатып алғаннан кейін Oracle өзін Java технологиясының басқарушысы ретінде сипаттады, қатысу мен ашықтық қауымдастығын дамытуға бейілді екенін мәлімдеді. Бұл Oracle-тың Google-ге қарсы сотқа жүгінуіне кедергі болмады, өйткені ол Android SDK-да Java-ны қолданған (Android бөлімін қараңыз). 2010 жылдың 2 сәуірінде Джеймс Гослинг Oracle-тен кетті. 2016 жылдың қаңтар айында Oracle JDK 9-ға негізделген Java орындалу уақыты орталары браузер плагинін тоқтату туралы хабарлады. Java бағдарламалық жасақтамасы ноутбуктерден бастап, деректер орталықтарына дейін, ойын консольдарынан ғылыми суперкомпьютерлерге дейін барлық жерде жұмыс істейді. Oracle (және басқалары) Java-ның ескірген және қолдаусыз нұсқаларын ескі нұсқалардағы шешілмеген қауіпсіздік мәселелеріне байланысты өшіруді қатты ұсынады.
Басылымдар
Sun Java-ның әртүрлі қолданба орталарын бағыттайтын төрт нұсқасын анықтады және қолдайды, сондай-ақ көптеген API-ларын олардың біріне тиесілі етіп бөліп жіктеді. Платформалар:
Смарт карталар үшін Java Card. Java Platform, Micro Edition (Java ME) – шектеулі ресурстарға ие орталарды бағыттайды. Java Platform, Standard Edition (Java SE) – жұмыс станциялары үшін орталарды бағыттайды. Java Platform, Enterprise Edition (Java EE) – ірі таратылған кәсіпорындар немесе Интернет орталарын бағыттайды. Java API-дегі сыныптар пакеттер деп аталатын жеке топтарға ұйымдастырылған. Әрбір пакетке байланысты интерфейстер, сыныптар, кіші пакеттер және ерекше жағдайлар жиынтығы кіреді. Sun сонымен қатар Personal Java деп аталатын нұсқаны ұсынды, ол кейіннен стандарттарға негізделген Java ME конфигурациялық профильдерінің жұптасуымен алмастырылды.
Java JVM және байт коды
Java-ның бір жобалау мақсаты – портативтілік, яғни Java платформасы үшін жазылған бағдарламалар аппараттық және операциялық жүйелердің кез келген комбинациясында жеткілікті орындалу уақыты болған жағдайда, бірдей түрде жұмыс істеуі керек. Бұл Java тілінің кодын тікелей аппараттық архитектураға тән машиналық кодқа емес, Java байт-коды деп аталатын аралық форматқа компиляциялау арқылы қол жеткізіледі. Java байт-код нұсқаулары машиналық кодқа ұқсас, бірақ олар хост-апараттық құрылғысы үшін арнайы жазылған виртуалды машинада (VM) орындалуға арналған. Қолданушылар әдетте жеке Java қолданбаларын іске қосу үшін құрылғысына орнатылған Java Runtime Environment (JRE) немесе Java апплеттерін іске қосу үшін веб-браузерді пайдаланады. Стандартты кітапханалар хостқа тән графика, жіптер және желілік сияқты мүмкіндіктерге қол жеткізудің біртұтас тәсілін ұсынады. Универсалды байт-кодты пайдалану бағдарламаны тасымалдауды жеңілдетеді. Дегенмен, байт-кодты машиналық нұсқауларға аударудың қосымша шығыны интерпретацияланған бағдарламалардың орындалуын әдетте түпнұсқалық орындалатын файлдардан баяу етеді. Орындалу кезінде байт-кодты машиналық кодқа компиляциялайтын уақытында (JIT) компиляторлар ерте кезеңнен бастап енгізілді. Java-ның Hotspot компиляторы – бір компилятордың ішіндегі екі компилятор, ал GraalVM (мысалы, Java 11-ге қосылған, бірақ Java 16-дан бастап алынып тасталған) қабатты компиляцияға мүмкіндік береді. Java өзі платформаға тәуелсіз және Java виртуалды машинасы (JVM) арқылы орындалатын платформаға бейімделеді, ол Java байт-кодын платформаның машиналық тіліне аударады.
Өнер көрсету
Java-да жазылған бағдарламалар C++-та жазылғандарға қарағанда баяу жұмыс ілеп, көбірек жадты қажет етеді деген репутацияға ие. Дегенмен, Java бағдарламаларының орындалу жылдамдығы 1997/1998 жылдары Java 1.1 үшін дереу компиляцияны (just-in-time compilation) енгізу арқылы, жақсы кодты талдауға мүмкіндік беретін тілдік мүмкіндіктерді қосу арқылы (ішкі кластар, StringBuilder класы, міндетті емес тексерулер және т.б.), сондай-ақ Java виртуалды машинасының оңтайландырулары, мысалы HotSpot-тың 2000 жылы Sun компаниясының стандартты JVM-і болуы арқылы айтарлықтай жақсарды. Java 1.5-те пакетті қосу арқылы, оның ішінде ConcurrentMaps және басқа көп ядролы жинақтардың құлыпсыз (lock-free) нұсқалары енгізілуімен өнімділік жақсартылды, ал Java 1.6-да одан да жақсартылды.
ЖММ емес
Кейбір платформалар Java-ға тікелей аппараттық қолдау ұсынады; бағдарламалық Java виртуалды машинасының орнына аппараттық түрде Java байт-кодын іске қоса алатын микроконтроллерлер бар, сондай-ақ кейбір ARM негізіндегі процессорлар өздерінің Jazelle опциясы арқылы Java байт-кодын орындау үшін аппараттық қолдауға ие болуы мүмкін, бірақ қазіргі ARM жүзеге асыруларында бұл қолдау көбінесе тоқтатылған.
Жадты автоматты түрде басқару
Java жадыны басқару үшін автоматты қоқыс жинағыш пайдаланады. Бағдарламашы объектіні қашан жасау керектігін анықтайды, ал Java орындалу уақыты объектіні пайдаланудан шыққаннан кейін жадыны қалпына келтіру үшін жауапты. Объектке сілтемелер қалмағанда, қол жеткізе алмайтын жадты қоқыс жинағыш автоматты түрде босатуға жарамды болады. Егер бағдарламашының кодында енді қажет емес объектіге сілтеме болса, жад ақаулығына ұқсас нәрсе болуы мүмкін, әдетте, енді қажет емес объектілер әлі де қолданылып жүрген контейнерлерде сақталған кезде. Егер жоқ объект үшін әдістер шақырылса, нөлдік сілтеме ерекшелігі туындайды. Java-ның автоматты жад басқару моделінің мақсаты – бағдарламашыларды жадты қолмен басқару ауыртпалығынан құтқару. Кейбір тілдерде нысандарды құру үшін жад стекте жасырын түрде немесе үймеден ашық түрде бөлінеді және босатылады. Соңғы жағдайда жадты басқару жауапкершілігі бағдарламалаушыға жүктеледі. Егер бағдарлама объектіні босатпаса, жад ақаулығы пайда болады. Егер бағдарлама бұрыннан босатылған жадқа қол жеткізуге немесе оны қайтадан босатуға тырысса, нәтижесі белгісіз және болжау қиын, ал бағдарлама тұрақсыз немесе құлап кетуі мүмкін. Бұл мәселені ақылды көрсеткіштердің көмегімен ішінара шешуге болады, бірақ олар үстеме шығын мен күрделілікті арттырады. Қоқыс жинау логикалық жад ағуын болдырмайды, яғни жад әлі де сілтеме жасалса да, ешқашан пайдаланылмайды. Қоқыс жинау кез келген уақытта болуы мүмкін. Идеалды жағдайда, ол бағдарлама бос тұрған кезде орындалады. Жаңа объектіні бөлу үшін үймеде бос жады жеткіліксіз болса, қоқыс жинау іске қосылады; бұл бағдарламаның уақытша тоқтауына әкелуі мүмкін. Java-да жадты қолмен басқару мүмкін емес. Java C/C++ стиліндегі көрсеткіштердің арифметикалық амалдарын қолдамайды, онда объект адрестерін арифметикалық түрде өңдеуге болады (мысалы, офсетті қосу немесе алу арқылы). Бұл қоқыс жинағышқа сілтеме жасалған объектілерді басқа жерге жылжытуға мүмкіндік береді және типтік қауіпсіздікті қамтамасыз етеді. C++ және басқа да объектіге бағытталған тілдердегідей, Java-ның бастапқы деректер түрлерінің айнымалылары әдетте, бастапқы емес деректер түрлеріне қатысты, өрістерде (объектілер үшін) немесе стекте (әдістер үшін) тікелей сақталады, үймеде емес (бірақ құтылу талдауын қараңыз). Бұл Java-ның дизайнерлері орындалу тиімділігі үшін саналы түрде қабылдаған шешім. Java-да қоқыс жинағыштардың бірнеше түрі бар. Java 9 нұсқасынан бастап HotSpot әдепкі ретінде Garbage First Garbage Collector (G1GC) пайдаланады. Алайда, үймеді басқару үшін басқа да бірнеше қоқыс жинағыштарды қолдануға болады. Java-дағы көптеген қолданбалар үшін G1GC жеткілікті. Бұрын Java 8 нұсқасында Parallel Garbage Collector пайдаланылған. Жад басқару мәселесін шешкенімен, бағдарламашыны желілік немесе деректер базасы қосылыстары, файл дескрипторлары және т.б. сияқты басқа ресурстарды дұрыс басқарудан босата алмайсыз, әсіресе ерекшеліктер туындаған кезде.
Синтаксисі
Java синтаксисі көбінесе C++ және C тілдерінен әсер алған. C++ тілінен айырмашылығы, құрылымдық, жалпы және объектіге бағытталған бағдарламалау синтаксисін біріктіретін болса, Java тілі негізінен объектіге бағытталған тіл ретінде құрылған. Кластар үшін көп мұрагерлік болмаса да, интерфейстер үшін көп мұрагерлік қолдауға ие. Java, C++ тіліне ұқсас түсініктемелерді пайдаланады. Түсініктемелердің үш стилі бар: екі қисық сызықпен (//) белгіленген бір жолдық стиль, /* және */ белгілерімен ашылып, жабылатын көп жолдық стиль, сондай-ақ /** және */ белгілерімен ашылып, жабылатын Javadoc түсініктеме стилі. Javadoc стиліндегі түсініктемелер пайдаланушыға Javadoc орындалатын файлын іске қосып, бағдарламаның құжаттамасын жасауға мүмкіндік береді және Eclipse сияқты кейбір интеграцияланған даму орталарында (IDE) оқылды, бұл әзірлеушілерге IDE ішінде құжаттамаға қол жеткізуге мүмкіндік береді.
Апельсин
Java апплеттері – басқа қолданбалардың ішіне енгізілген, көбінесе веб-браузерде көрсетілетін веб-беттерде пайда болатын бағдарламалар. Java апплет API 2017 жылы Java 9 нұсқасынан бастап қолданыстан шығарылды.
JavaServer парақтар
JavaServer Pages (JSP) – клиенттерден келетін HTTP сұраныстарына жауап беретін, көбінесе HTML беттерін құрайтын серверлік Java EE компоненттері. JSP-лер HTML бетіне Java кодын арнайы белгілер <% және %> арқылы енгізеді. JSP алғаш рет қолжеткізілгенде Java сервлетіне, дербес Java қолданбасына компиляцияланады. Содан кейін жасалған сервлет жауапты құрады.
Ауыспалы қолдану
Swing – Java SE платформасы үшін графикалық пайдаланушы интерфейсі кітапханасы. Swing-тің кеңейтілген көрініс және сезім жүйесі арқылы әртүрлі көрініс пен сезімді орнатуға болады. Windows, GTK+ және Motif көшірмелерін Sun компаниясы ұсынады. Apple macOS үшін Aqua көрінісі мен сезімін де ұсынады. Бұрынғы осы көріністер мен сезімдердің толық еместігі байқалған еді, бірақ Java SE 6-дағы Swing бұл мәселені негізгі платформалардың GUI элементтерін салудың жақсартылған әдістерін пайдалану арқылы шешеді.
JavaFX қолданбасы
JavaFX – үстел бағдарламаларын және әртүрлі құрылғыларда жұмыс істейтін, бай веб-қосымшаларды жасау және таратуға арналған бағдарламалық платформа. JavaFX, Java SE үшін стандартты GUI кітапханасы ретінде Swing-ті алмастыру мақсадында жасалған, бірақ JDK 11 нұсқасынан бастап JavaFX негізгі JDK құрамына кірмей, жеке модуль ретінде таратылады. JavaFX Microsoft Windows, Linux және macOS жүйелеріндегі үстелдік компьютерлер мен веб-браузерлерді қолдайды. JavaFX операциялық жүйенің түпкілікті (native) интерфейсін қолдамайды.
Жалпыға бірдей дәрілер
2004 жылы J2SE 5.0 құрамында Java тіліне жалпыламалар (generics) қосылды. Жалпыламаларды енгізуге дейін әрбір айнымалы жариялануы нақты типке ие болуы керек еді. Мысалы, контейнерлік кластар үшін бұл қиындық тудыратын, себебі тек белгілі бір нысан түрлерін қабылдайтын контейнерді жасаудың оңай жолы болмады. Контейнер кластың немесе интерфейстің барлық түйіндемелерінде (subtypes), әдетте Object-те жұмыс істейтін немесе әрбір сақталатын кластың әрбір түрі үшін жеке контейнерлік кластар жасалуы керек еді. Жалпыламалар көптеген контейнерлік кластарды жасамай-ақ, компиляция уақытында типтік тексеруді жүзеге асыруға мүмкіндік береді, олардың әрқайсысы дерлік бірдей кодты қамтиды. Кодты тиімдірек етуге қоса, компиляция уақытында қателер шығару арқылы кейбір орындалу кезіндегі қателердің (exceptions) пайда болуына жол берілмейді. Егер Java барлық орындалу кезіндегі типтік қателерді (ClassCastExceptions) болдырмаса, онда ол типтік қауіпсіз болар еді. 2016 жылы Java-ның типтік жүйесінің дұрыс еместігі дәлелденді, себебі бір кластың мысалын басқа байланыссыз кластың айнымалысына тағайындауға мүмкіндік беретін кластар мен әдістерді құру үшін жалпыламаларды пайдалануға болады. Мұндай код компилятор қабылдайды, бірақ орындалу кезінде кластық қателікпен (class cast exception) сәтсіз аяқталады.
Сын
Java-ға қатысты сын-ескертпелерге жалпыламалардың (generics) іске асырылуы, жылдамдық, қозғалмалы нүктелік арифметиканың іске асырылуы және HotSpot негізгі Java VM іске асырылуындағы қауіпсіздікке қатысты осал тұстардың тарихы жатады.
Құжаттамалық
Javadoc – Sun Microsystems компаниясы жасаған толыққанды құжаттама жүйесі. Ол бағдарламашыларға өздерінің кодын құжаттау үшін ұйымдастырылған жүйе ұсынады. Javadoc түсініктемелерінің басында қосымша жұлдызша болады, яғни шектеу белгілері /** және */, ал Java-дағы әдеттегі көпжолды түсініктемелер /* және */ арқылы шектеледі, ал біржолды түсініктемелер // символымен басталады.
Қолданылу
Oracle корпорациясы 2010 жылдың 27 қаңтарында Sun Microsystems компаниясын сатып алғандықтан Java SE платформасының ресми іске асырылымына ие. Бұл іске асыру Sun компаниясының Java-ның бастапқы іске асырылымына негізделген. Oracle-тің іске асырылымы Windows, macOS, Linux және Solaris жүйелері үшін қолжетімді. Java-да Ecma International, ISO/IEC, ANSI немесе басқа да үшінші тарап стандарттау ұйымдары мойындаған ресми стандарттау болмағандықтан, Oracle-тің іске асырылымы де-факто стандарт болып табылады. Oracle іске асырылымы екі түрлі дистрибутивке жинақталған: Java Runtime Environment (JRE), Java бағдарламаларын іске қосу үшін қажетті Java SE платформасының бөліктерін қамтиды және соңғы пайдаланушыларға арналған, сондай-ақ Java Development Kit (JDK), бағдарламалық жасақтаманы әзірлеушілерге арналған және Java компиляторы, Javadoc, Jar және түзету құралы сияқты әзірлеу құралдарын қамтиды. Oracle сонымен қатар GraalVM жоғары өнімді Java динамикалық компиляторы мен интерпретаторын шығарды. OpenJDK – GNU GPL лицензиясы бойынша лицензияланған Java SE-нің тағы бір іске асырылымы. Бұл іске асыру Sun компаниясы Java бастапқы кодын GPL лицензиясы бойынша жариялай бастаған кезде басталды. Java SE 7 нұсқасынан бастап OpenJDK Java-ның ресми анықтамалық іске асырылымы болып табылады. Java-ның мақсаты – Java-ның барлық іске асырылымдарының үйлесімді болуын қамтамасыз ету. Тарихи тұрғыдан алғанда, Sun-нің Java таңбасын пайдалану лицензиясы барлық іске асырылымдардың үйлесімді болуын талап етеді. Бұл Microsoft компаниясымен сот дауына әкелді, себебі Sun Microsoft-тың іске асырылымы Java қашықтан әдіс шақыруды (RMI) немесе Java Native Interface (JNI) қолдамайды және платформаға тән өздерінің мүмкіндіктерін қосты деп мәлімдеді. Sun 1997 жылы сотқа жүгінді және 2001 жылы 20 миллион АҚШ доллары төлеуге келісім жасады, сондай-ақ Sun лицензиясының шарттарын орындауға міндеттейтін сот шешіміне қол жеткізді. Нәтижесінде Microsoft енді Java-ны Windows жүйесімен бірге жеткізбейді. Java EE үшін платформаға тәуелсіз Java маңызды, ал іске асыруды сертификаттау үшін одан да қатаң тексеру қажет. Бұл орта серверлік жағындағы портативті қосымшаларды іске қосуға мүмкіндік береді.
Java платформасынан тыс пайдалану
Java бағдарламалау тілі құрастырылған бағдарламаларды іске қосу үшін бағдарламалық платформаның болуын қажет етеді. Oracle Java-ны пайдалануға арналған Java платформасын ұсынады. Android SDK – бұл негізінен Android қолданбаларын жасауға, соның ішінде өзіндік GUI жүйесімен жұмыс істеуге арналған балама бағдарламалық платформа.
Android құрылғысы
Java тілі Android-тің маңызды тірегі болып табылады, ол – ашық кодты мобильді операциялық жүйе. Android Linux ядросына негізделген және көбінесе C тілінде жазылған, бірақ Android SDK Android қолданбаларының негізі ретінде Java тілін пайдаланады, алайда оның стандартты GUI, SE, ME және басқа да орнықты Java стандарттарын қолданбайды. Android SDK қолдайтын байт-код тілі Java байт-кодымен үйлесімсіз және смартфондар мен планшеттер сияқты жад көлемі шектеулі құрылғылар үшін оңтайландырылған жеке виртуалды машинасының үстінде жұмыс істейді. Android нұсқасына байланысты, байт-код Dalvik виртуалды машинасымен түсіндіріледі немесе Android Runtime арқылы түпкі кодқа аударылады. Android толық Java SE стандартты кітапханасын ұсынбайды, бірақ Android SDK оның үлкен бөлігінің тәуелсіз реализациясын қамтиды. Ол Java 6 және Java 7-нің кейбір мүмкіндіктерін қолдайды, стандартты кітапханамен (Apache Harmony) үйлесімді реализацияны ұсынады.
Дау
Android-те Java технологиясын қолдану Oracle мен Google арасында құқықтық дауға әкелді. 2012 жылдың 7 мамырында Сан-Францискодағы қазылар алқасы, егер API-лер авторлық құқықпен қорғалса, Google-дың Android құрылғыларында Java-ны пайдалану арқылы Oracle-тың авторлық құқықтарын бұзғанын анықтады. Аудандық судья Уильям Алсуп 2012 жылдың 31 мамырында API-лер авторлық құқықпен қорғалмайды деп шешті, бірақ бұл шешім 2014 жылдың мамырында АҚШ Федералдық апелляциялық сотымен күштен шығарылды. 2016 жылдың 26 мамырында аудандық сот Google пайдасына шешім шығарды, Android-тегі Java API-дің авторлық құқықты бұзуы – әділ пайдалану болып табылады деп үкім айтты. 2018 жылдың наурыз айында бұл шешім апелляциялық сот тарапынан жойылды, соның салдарынан залапты анықтау мәселесі Сан-Францискодағы федералды сотқа жіберілді. Google 2019 жылдың қаңтарында АҚШ Жоғарғы Сотына апелляциялық соттың Oracle пайдасына қабылдаған екі шешіміне наразылық білдіру үшін куәландыру туралы өтініш берді. 2021 жылдың 5 сәуірінде Сот 6:2 дауыспен Google пайдасына шешім шығарды, оның Java API-лерін пайдалануы әділ пайдалану болып есептелуі керек екенін мәлімдеді. Алайда, сот API-лердің авторлық құқықпен қорғалатыны туралы мәселені қараудан бас тартып, Java API-ін "тек пікірталас үшін" авторлық құқықпен қорғалған деп есептеу арқылы шешімін негіздеді.