聊聊軟件開(kāi)發(fā),Java介紹和運(yùn)行機(jī)制(軟件開(kāi)發(fā) java)
Java是一門(mén)用來(lái)開(kāi)發(fā)軟件的計(jì)算機(jī)語(yǔ)言,如同漢語(yǔ)是在中國(guó)進(jìn)行交流你的語(yǔ)言,西班牙語(yǔ)是在西班牙交流的語(yǔ)言,編程自然適合計(jì)算機(jī)溝通,就需要使用計(jì)算機(jī)認(rèn)識(shí)的語(yǔ)言,那么Java就是其中一個(gè),接下來(lái)會(huì)依次介紹:
- 軟件開(kāi)發(fā)介紹
- 常見(jiàn)的編程語(yǔ)言
- Java語(yǔ)言的特點(diǎn)
- Java運(yùn)行機(jī)制
軟件開(kāi)發(fā)
軟硬件介紹
- 硬件:一般是計(jì)算機(jī)硬件的簡(jiǎn)稱,是指計(jì)算機(jī)系統(tǒng)中由電子,機(jī)械和光電元件等組成的各種物理裝置的總稱。這些物理裝置按系統(tǒng)結(jié)構(gòu)的要求構(gòu)成一個(gè)有機(jī)整體為計(jì)算機(jī)軟件運(yùn)行提供物質(zhì)基礎(chǔ),比如主板,硬盤(pán),內(nèi)存條,電源,顯卡等能摸得著的東西都是硬件
- 軟件:是一系列按照特定順序組織的計(jì)算機(jī)數(shù)據(jù)和指令的集合。一般來(lái)講軟件被劃分為系統(tǒng)軟件、應(yīng)用軟件,軟件并不只是包括可以在計(jì)算機(jī)(這里的計(jì)算機(jī)是指廣義的計(jì)算機(jī))上運(yùn)行的電腦程序,與這些電腦程序相關(guān)的文檔一般也被認(rèn)為是軟件的一部分
- windows操作系統(tǒng),ios操作系統(tǒng)等都屬于系統(tǒng)級(jí)別軟件,提供了直接通過(guò)圖形頁(yè)面操作計(jì)算機(jī)的功能
- 微信、QQ、釘釘這些屬于應(yīng)用軟件,可以幫助我們完成一些日常,工作需求
軟件開(kāi)發(fā)
軟件開(kāi)發(fā)是根據(jù)用戶要求建造出軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過(guò)程。軟件開(kāi)發(fā)是一項(xiàng)包括需求捕捉、需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試的系統(tǒng)工程。軟件一般是用某種程序設(shè)計(jì)語(yǔ)言來(lái)實(shí)現(xiàn)的。通常采用軟件開(kāi)發(fā)工具可以進(jìn)行開(kāi)發(fā)。
1. 程序員主要完成的是實(shí)現(xiàn)這個(gè)步驟,當(dāng)然自己寫(xiě)的代碼也要自己測(cè)試一下才可以提交哦!
2. 需求捕捉:就是獲取需求,我們要做什么,這是軟件開(kāi)發(fā)的第一步,一般由老板、客戶或者產(chǎn)品經(jīng)理負(fù)責(zé)
3. 需求分析:經(jīng)過(guò)深入細(xì)致的調(diào)研和分析,準(zhǔn)確理解用戶和項(xiàng)目的功能、性能、可靠性等具體要求,將用戶非形式的需求表述轉(zhuǎn)化為完整的需求定義,從而確定系統(tǒng)必須做什么
4. 設(shè)計(jì):根據(jù)需求分析階段確定的功能設(shè)計(jì)軟件系統(tǒng)的整體結(jié)構(gòu)、劃分功能模塊、確定每個(gè)模塊的實(shí)現(xiàn)方法,形成軟件的具體設(shè)計(jì)方案,這步驟一般UI設(shè)計(jì)師會(huì)參與進(jìn)來(lái),協(xié)助完成軟件原型或者操作界面的設(shè)計(jì)
5. 測(cè)試:在規(guī)定的條件下對(duì)程序進(jìn)行操作,以發(fā)現(xiàn)程序錯(cuò)誤,衡量軟件質(zhì)量,并對(duì)其是否能滿足設(shè)計(jì)要求進(jìn)行評(píng)估,現(xiàn)在軟件的規(guī)模越來(lái)越大,功能越來(lái)越復(fù)雜,企業(yè)在陸陸續(xù)續(xù)配備專(zhuān)業(yè)的測(cè)試人員
人機(jī)交互方式
正常人類(lèi)與計(jì)算機(jī)交互,也就是操作者對(duì)電腦發(fā)出一個(gè)命令之后計(jì)算機(jī)給操作者的反饋,操作者再根據(jù)反饋發(fā)出命令的這么一個(gè)循環(huán)過(guò)程。
按照目前科技普及程度,人機(jī)交互的方式有兩類(lèi),【圖形化界面】和【命令行方式】,下方將會(huì)介紹兩者概念區(qū)別,并且同時(shí)以打開(kāi)windows文件系統(tǒng)為例實(shí)際演示。
圖形化界面(Graphical User Interface GUI)
這種方式簡(jiǎn)單直觀,操作者易于接受,容易上手操作。我們現(xiàn)在使用的大部分軟件都是圖形化界面的,我們通過(guò)點(diǎn)擊對(duì)應(yīng)的圖標(biāo)、文字,通過(guò)滑動(dòng)頁(yè)面、長(zhǎng)按等操作實(shí)現(xiàn)對(duì)軟件的操作。
命令行方式(Command Line Interface CLI)
需要有一個(gè)控制臺(tái),輸入特定的指令,讓計(jì)算機(jī)完成一些操作。較為麻煩,上手也比較困難,需要記錄住一些命令。比如windows系統(tǒng)可以輸入cmd來(lái)開(kāi)啟控制臺(tái)。
總結(jié)
- 無(wú)論是哪種方式目的都是和計(jì)算機(jī)進(jìn)行對(duì)話,命令方式更加直接,圖形頁(yè)面方式更加方便
- 圖形頁(yè)面其實(shí)是對(duì)命令的封裝,配上美觀的圖標(biāo)和合理的頁(yè)面設(shè)計(jì),方便用戶使用
- 對(duì)于軟件的使用者來(lái)說(shuō)我們當(dāng)然要提供圖形頁(yè)面,以降低使用難度,對(duì)于程序員來(lái)說(shuō)工作過(guò)程中還要使用很多軟件命令行操作方式需要我們了解和掌握,當(dāng)然不是所有的,只是一些必須的會(huì)用就行了,忘記了也可以百度一下
常用DOS命令
下方列出一些windows系統(tǒng)中常用的命令,也稱為【DOS命令】
dir : 列出當(dāng)前目錄下的文件以及文件夾md : 創(chuàng)建目錄rd : 刪除目錄cd : 進(jìn)入指定目錄cd.. : 退回到上一級(jí)目錄cd: 退回到根目錄del : 刪除文件exit : 退出 dos 命令行
常用快捷鍵
← →:移動(dòng)光標(biāo) ↑ ↓:調(diào)閱歷史操作命令 Delete和Backspace:刪除字符
常見(jiàn)的編程語(yǔ)言
C: 許多計(jì)算機(jī)科學(xué)家表示,學(xué)習(xí)C可以教初學(xué)者了解計(jì)算機(jī)程序的真正原理,還有一些人認(rèn)為,它應(yīng)該是計(jì)算機(jī)開(kāi)始學(xué)習(xí)編程的人學(xué)會(huì)的頭一種語(yǔ)言。主要用于嵌入式系統(tǒng)的應(yīng)用程序。
C :是C語(yǔ)言的增強(qiáng),主要用于開(kāi)發(fā)系統(tǒng)軟件,應(yīng)用軟件,設(shè)備驅(qū)動(dòng)程序,嵌入式軟件,高性能服務(wù)器和客戶端應(yīng)用及娛樂(lè)軟件。
Java:說(shuō)它是至今最流行的編程語(yǔ)言也不足為過(guò),其可以用于各種各樣的領(lǐng)域,包括企業(yè)應(yīng)用及基礎(chǔ)設(shè)施,以及Web應(yīng)用和移動(dòng)開(kāi)發(fā)。
JavaScript:在Web應(yīng)用上有著非常大的需求,主要目的是為了解決服務(wù)器端語(yǔ)言,比如Perl,遺留的速度問(wèn)題,為客戶提供更流暢的瀏覽效果。JavaScript主要用于實(shí)現(xiàn)為Web瀏覽器,以提供增強(qiáng)的用戶界面和動(dòng)態(tài)網(wǎng)站。
C#:是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。借鑒了Java,C,C 和Delphi的一些特點(diǎn),如今C#已經(jīng)成為微軟應(yīng)用商店和開(kāi)發(fā)成員非常歡迎的開(kāi)發(fā)語(yǔ)言。
PHP:是一種通用開(kāi)源腳本語(yǔ)言,特別適合于Web開(kāi)發(fā),可嵌入到HTML中,它最初是用來(lái)設(shè)計(jì)動(dòng)態(tài)網(wǎng)頁(yè)產(chǎn)生的。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn),入門(mén)門(mén)檻較低,易于學(xué)習(xí),使用廣泛。
Python:是應(yīng)用于設(shè)計(jì)各種各樣的應(yīng)用程序的動(dòng)態(tài)語(yǔ)言, 往往比Tcl,Perl,Ruby,Scheme和Java更容易編寫(xiě)。Python語(yǔ)法簡(jiǎn)潔而清晰,具有豐富和強(qiáng)大的類(lèi)庫(kù)。它常被昵稱為膠水語(yǔ)言,它能夠很輕松的把用其他語(yǔ)言制作的各種模塊(尤其是C/C )輕松地聯(lián)結(jié)在一起。
Ruby:是一種動(dòng)態(tài)的,側(cè)重于簡(jiǎn)單個(gè)高效的開(kāi)源語(yǔ)言,他是一個(gè)優(yōu)雅的語(yǔ)法,能夠很自然的閱讀和編寫(xiě),適合于快速開(kāi)發(fā),一般開(kāi)發(fā)效率是JAVA的5倍。
Objective-C:對(duì)于鐘情于Apple設(shè)備的網(wǎng)友來(lái)說(shuō),Objective-C的流行就得益于蘋(píng)果的成功,其是增加了Smalltalk風(fēng)格的消息在C編程語(yǔ)言中的反射,面向?qū)ο蟮恼Z(yǔ)言。主要使用于蘋(píng)果系統(tǒng)和GNUstep這兩個(gè)使用OpenStep的標(biāo)準(zhǔn)的系統(tǒng)。隨著蘋(píng)果平臺(tái)的巨大人氣,如今Objective-C語(yǔ)言被人們逐漸知道。
HTML5:是用于構(gòu)建因特網(wǎng)的核心技術(shù)的標(biāo)準(zhǔn)語(yǔ)言,用于Web呈現(xiàn)內(nèi)容,它是HTML標(biāo)準(zhǔn)的第五次修訂,如今,HTML5繼續(xù)在移動(dòng)開(kāi)發(fā)領(lǐng)域發(fā)揮著重要的作用,為互聯(lián)網(wǎng)的發(fā)展提供了多樣化的發(fā)展道路,37%的開(kāi)發(fā)者依賴HTML5開(kāi)發(fā)移動(dòng)網(wǎng)站和Web應(yīng)用程序 。
CSS:是一種用來(lái)表現(xiàn)HTML或XML等文件樣式的計(jì)算機(jī)語(yǔ)言。最常用于Web樣式和HTML和Xhtml接口,該語(yǔ)言可以應(yīng)用與任何類(lèi)型的XML文檔, CSS的設(shè)計(jì)主要是為了使文檔內(nèi)容從文檔表示的分離,包括元素,如布局、顏色和字體。
Java語(yǔ)言介紹
Java語(yǔ)言是SUN(Stanford University Network,斯坦福大學(xué)網(wǎng)絡(luò)公司 ) 在1995年推出的一 門(mén)高級(jí)編程語(yǔ)言。是一種面向Internet的編程語(yǔ)言。Java一開(kāi)始富有吸引力是因?yàn)镴ava程序可以 在Web瀏覽器中運(yùn)行。這些Java程序被稱為Java小程序(applet)。applet使用現(xiàn)代的圖形用戶界面與Web用戶進(jìn)行交互。 applet內(nèi)嵌在HTML代碼中。 隨著Java技術(shù)在web方面的不斷成熟,已經(jīng)成為Web應(yīng)用程序的首選開(kāi)發(fā)語(yǔ)言。
Java語(yǔ)言技術(shù)結(jié)構(gòu)
技術(shù)結(jié)構(gòu) | 主要用途 |
Java SE(Java Standard Edition)標(biāo)準(zhǔn)版 | 支持面向桌面級(jí)應(yīng)用(如Windows下的應(yīng)用程序)的Java平臺(tái),提供了完整的Java核 心API,此版本以前稱為J2SE |
Java EE(Java Enterprise Edition)企業(yè)版 | 是為開(kāi)發(fā)企業(yè)環(huán)境下的應(yīng)用程序提供的一套解決方案。該技術(shù)體系中包含的技術(shù)如:Servlet 、Jsp等,主要針對(duì)于Web應(yīng)用程序開(kāi)發(fā)。版本以前稱為J2EE |
Java ME(Java Micro Edition)小型版 | 支持Java程序運(yùn)行在移動(dòng)終端(手機(jī)、PDA)上的平臺(tái),對(duì)Java API有所精簡(jiǎn),并加 入了針對(duì)移動(dòng)終端的支持,此版本以前稱為J2ME |
Java Card | 支持一些Java小程序(Applets)運(yùn)行在小內(nèi)存設(shè)備(如智能卡)上的平臺(tái) |
Java語(yǔ)言主要應(yīng)用
從Java的應(yīng)用領(lǐng)域來(lái)分,Java語(yǔ)言的應(yīng)用方向主要表現(xiàn)在以下幾個(gè)方面
- 企業(yè)級(jí)應(yīng)用:主要指復(fù)雜的大企業(yè)的軟件系統(tǒng)、各種類(lèi)型的網(wǎng)站。Java的安全機(jī)制以及 它的跨平臺(tái)的優(yōu)勢(shì),使它在分布式系統(tǒng)領(lǐng)域開(kāi)發(fā)中有廣泛應(yīng)用。應(yīng)用領(lǐng)域包括金融、電 信、交通、電子商務(wù)等
- Android平臺(tái)應(yīng)用:Android應(yīng)用程序使用Java語(yǔ)言編寫(xiě)。Android開(kāi)發(fā)水平的高低 很大程度上取決于Java語(yǔ)言核心能力是否扎實(shí)
- 大數(shù)據(jù)平臺(tái)開(kāi)發(fā):各類(lèi)框架有Hadoop,spark,storm,flink等,就這類(lèi)技術(shù)生態(tài) 圈來(lái)講,還有各種中間件如flume,kafka,sqoop等等 ,這些框架以及工具大多數(shù) 是用Java編寫(xiě)而成,但提供諸如Java,scala,Python,R等各種語(yǔ)言API供編程
- 移動(dòng)領(lǐng)域應(yīng)用:主要表現(xiàn)在消費(fèi)和嵌入式領(lǐng)域,是指在各種小型設(shè)備上的應(yīng)用,包括手 機(jī)、PDA、機(jī)頂盒、汽車(chē)通信設(shè)備等
目前基本從事兩個(gè)階段,首先是企業(yè)級(jí)應(yīng)用方向,成為一名后端開(kāi)發(fā)工程師,然后向大數(shù)據(jù)方向靠攏,安卓和移動(dòng)領(lǐng)域不適合大部分人,特殊機(jī)遇除外
Java主要特性
- Java語(yǔ)言簡(jiǎn)單易學(xué):Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C 語(yǔ)言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java
- Java語(yǔ)言面向?qū)ο螅?/span>Java語(yǔ)言提供類(lèi)、接口和繼承等原語(yǔ),為了簡(jiǎn)單起見(jiàn), 只支持類(lèi)之間的單繼承,但支持接口之間的多繼承,并支持類(lèi)與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)
- Java跨平臺(tái)性:通過(guò)Java的虛擬機(jī),JVM可以實(shí)現(xiàn)一次編寫(xiě)到處運(yùn)行的效果
- Java語(yǔ)言分布式:Java語(yǔ)言支持Internet應(yīng)用的開(kāi)發(fā),在基本的Java應(yīng)用編 程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類(lèi) 庫(kù),包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程 方法激活)機(jī)制也是開(kāi)發(fā)分布式應(yīng)用的重要手段
- Java語(yǔ)言的健壯性。Java的強(qiáng)類(lèi)型機(jī)制、異常處理、垃圾的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇
- Java語(yǔ)言的安全性。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊如:安全防范機(jī)制(類(lèi)ClassLoader),如分配不同的 名字空間以防替代本地的同名類(lèi)、字節(jié)代碼檢查
- Java語(yǔ)言對(duì)系統(tǒng)無(wú)侵入性:Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),然后可以在實(shí)現(xiàn)這個(gè) Java平臺(tái)的任何系統(tǒng)中運(yùn)行
- Java語(yǔ)言是解釋型語(yǔ)言:如前所述,Java程序在Java平臺(tái)上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)的解釋器中運(yùn)行
- Java是的高性能:與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的性能還是較優(yōu)的,配合一些其他中間件可以發(fā)揮更強(qiáng)的性能
- Java語(yǔ)言原生支持多線程。在Java語(yǔ)言中,線程是一種特殊的對(duì)象,它必須由Thread類(lèi)或其子(孫)類(lèi)來(lái)創(chuàng)建。多線程可以有效提升系統(tǒng)的響應(yīng)速度
Java的跨平臺(tái)性
不同的平臺(tái)對(duì)程序的解讀是不一致的,在需要運(yùn)行 Java 應(yīng)用程序的操作系統(tǒng)平臺(tái)上,先安裝一個(gè)Java虛擬機(jī) (JVM Java Virtual Machine) 。由JVM來(lái)負(fù)責(zé)Java程序在該系統(tǒng)中的運(yùn)行。如果安裝了JDK則自帶安裝好JVM。所以在不同的平臺(tái)上安裝對(duì)應(yīng)的JVM,Java程序和平臺(tái)之間有一個(gè)JVM當(dāng)做翻譯員,實(shí)現(xiàn)跨平臺(tái)性。
比如,你對(duì)一個(gè)中國(guó)人說(shuō)“你好”,他明白是在問(wèn)候,會(huì)給出正確的反饋,如果對(duì)一個(gè)美國(guó)人說(shuō)“你好”,他就是一個(gè)問(wèn)號(hào)了。JVM可以理解成翻譯員就行啦,和美國(guó)人交流需要懂英語(yǔ)的翻譯員,和韓國(guó)人交流需要懂韓語(yǔ)的翻譯員。
Linux上的JVM就比較懂Linux,Windows的JVM就比較懂Windows,那么,你懂了嗎?
Java運(yùn)行機(jī)制
Java的運(yùn)行機(jī)制主要分為兩個(gè)核心:
- Java虛擬機(jī) (Java Virtal Machine),簡(jiǎn)稱JVM
- 垃圾收集機(jī)制 (Garbage Collection),簡(jiǎn)稱GC
程序啟動(dòng)之后會(huì)運(yùn)行在JVM中,在運(yùn)行的過(guò)程中會(huì)產(chǎn)生垃圾,這個(gè)垃圾可以暫時(shí)理解為對(duì)電腦內(nèi)存的不必要的占用,GC是回收清理這些垃圾的工具,他也是在JVM中運(yùn)行的。
就比如我們生活在一個(gè)房間中,每天都會(huì)產(chǎn)生一些生活垃圾,這些垃圾會(huì)占用房間中的一些位置空間,這時(shí)你有一個(gè)保姆就是GC,它會(huì)定時(shí)去識(shí)別哪些是垃圾,然后將這些垃圾扔掉,存放垃圾的地方就騰出來(lái)可以放其他東西啦?。?!
JVM
JVM是一個(gè)虛擬的計(jì)算機(jī),具有指令集并使用不同的存儲(chǔ)區(qū)域。負(fù)責(zé)執(zhí)行指令,管理數(shù)據(jù)、內(nèi)存、寄存器。
- 對(duì)于不同的平臺(tái),有不同的虛擬機(jī)。
- 只有某平臺(tái)提供了對(duì)應(yīng)的java虛擬機(jī),Java程序才可在此平臺(tái)運(yùn)行
- Java引入虛擬機(jī)的機(jī)制屏蔽了底層運(yùn)行平臺(tái)的差別,實(shí)現(xiàn)了“一次編譯,到處運(yùn)行”
垃圾回收
對(duì)于有編程經(jīng)驗(yàn)的同學(xué)應(yīng)該知道,在C語(yǔ)言中資源的占用是需要我們手動(dòng)去釋放的,稍不注意就會(huì)產(chǎn)生內(nèi)存溢出,內(nèi)存泄漏的問(wèn)題,Java相當(dāng)于一輛自動(dòng)擋汽車(chē),引入垃圾回收機(jī)制,自動(dòng)把不需要的內(nèi)存資源回收掉。不再使用的內(nèi)存空間應(yīng)回收—— 垃圾回收。
- 在C/C 等語(yǔ)言中,由程序員負(fù)責(zé)回收無(wú)用內(nèi)存。
- Java 語(yǔ)言消除了程序員回收無(wú)用內(nèi)存空間的責(zé)任:它提供一種系統(tǒng)級(jí)線程跟蹤存儲(chǔ)空 間的分配情況。并在JVM空閑時(shí),檢查并釋放那些可被釋放的存儲(chǔ)空間。
- 垃圾回收在Java程序運(yùn)行過(guò)程中自動(dòng)進(jìn)行,程序員無(wú)法精確控制和干預(yù)。
當(dāng)然Java中的GC機(jī)制也不是萬(wàn)金油,在某些極端情況下仍然會(huì)出現(xiàn)內(nèi)存溢出,我們可以通過(guò)實(shí)際情況修改參數(shù)和代碼,暫時(shí)就不用擔(dān)心啦
總結(jié):
- JVM是安裝在計(jì)算機(jī)上提供Java程序的運(yùn)行環(huán)境
- 不同的操作系統(tǒng)有不同的JVM,可以實(shí)現(xiàn)同一個(gè)Java程序不需要做任何修改,就可以運(yùn)行在不同的操作系統(tǒng)上
- Java還引入了GC也就是垃圾回收機(jī)制,會(huì)幫助我們自動(dòng)回收不需要再占用的內(nèi)存空間