Java入坑指南

Java入坑指南
是滴,下面是一個最低的入坑php

還應該有23種設計模式應該掌握的。╮(╯▽╰)╭
注意,第一個j是大寫。

Java的特色跨平臺,風格接近C++
最重要的api文檔 https://docs.oracle.com/javas...html

語言特色

  1. 面向對象
  2. 跨平臺,運行在JRE上,JRE包括JVM
  3. 具備自動垃圾回收的機制

屬於強類型,簡單,面向對象,分佈式,健壯的,安全的,可移植的,解釋型語言(將會翻譯成字節碼,在JVM上運行),高性能,動態,多線程。java

開發工具

JDK,一個工具包,面向開發者的工具包,包含JVM。
JRE,一個Java的運行環境,分爲服務器端的運行環境和開發者的運行環境。服務器端部署Java的時候,須要使用JRE運行Java程序。程序員

體系

分爲三個體系,分別是J2SE,J2EE,J2ME
分別爲以上三個體系。sql

專業術語

JDK 編寫Java程序的程序員使用的軟件
JRE 運行Java程序的用戶使用的軟件
Server JRE 運行Java程序的服務器使用的軟件
SDK 軟件開發工具包
DAO 數據訪問的接口
MVC 一種模式
JSP 一種在HTML中寫入Java的方式,由服務器端進行渲染,而後返回給用戶(已經用的不多嘍,目前都是直接封裝成爲API的,其接口設計須要遵照RESTful API的設計規範,屬於一種架構方式,可使用https://swagger.io/對api進行設計,jsp相似於php都是直接寫在HTML內的~)
Servlet 一種封裝成http的接口,而後經過http請求來訪問,使用這個Java能更加註重後端的業務的邏輯,實現解耦。(這個往後須要在繼續學習)
JDBC 一種鏈接方式,用來鏈接數據庫例如Mysql
Tomcat 一種運行Servlet的容器,在服務器端運行
SSH框架 包括Hibernate5框架、Struts2框架、Spring4框架
SSM框架 Spring、SpringMVC和Mybatis框架。
RPC框架 客戶端在不知道調用細節的狀況下,調用存在於遠程計算機上的某個對象,就像調用本地應用程序中的對象同樣 用於分佈式。經典框架 https://thrift.apache.org/ 來自於FaceBookshell

OOP

一種編程範式,數據庫

類與對象

類(Class):定義了一件事物的抽象特色。類的定義包含了數據的形式以及對數據的操做。
對象:是類的實例。apache

動態配置與消息傳遞

定義上動態配置是指方法會隨着實例動態的改變。而消息傳遞機制(Message Passing)是指一個對象經過接受消息、處理消息、傳出消息或使用其餘類的方法來實現必定功能。編程

封裝

具有封裝性(Encapsulation)的面向對象編程隱藏了某一方法的具體運行步驟,取而代之的是經過消息傳遞機制發送消息給它。windows

繼承

繼承性(Inheritance)是指,在某種狀況下,一個類會有「子類」。

多態

多態(Polymorphism)是指由繼承而產生的相關的不一樣的類,其對象對同一消息會作出不一樣的響應。

抽象

抽象(Abstraction)是簡化複雜的現實問題的途徑,它能夠爲具體問題找到最恰當的類定義,而且能夠在最恰當的繼承級別解釋問題。

語言

C→C++,C→Objective-C,BASIC→Visual Basic→Visual Basic .NET,Pascal→Object Pascal,Ada→Ada95

腳本化中的面向對象

Python和Ruby
Perl和PHP

Java和js有很是大的區別,一個是腳本,一個不是腳本。Java不是腳本,是編譯成字節碼而後在jvm上運行的。

Java語言編譯的過程

Java代碼編譯是由Java源碼編譯器來完成,也就是Java代碼到JVM字節碼(.class文件)的過程
Java字節碼的執行是由JVM執行引擎來完成

將jvm比喻成操做系統,Java只是又新建了一個相似於操做系統,術語叫虛擬機,用來運行Java的字節碼

Java代碼編譯和執行的機制

源碼編譯

①分析和輸入到符號表

②註解處理

③語義分析和生成class文件

最後生成的class文件包含如下內容
①結構信息:包括class文件格式版本號及各部分的數量與大小的信息

②元數據:對應於Java源碼中聲明與常量的信息。包含類/繼承的超類/實現的接口的聲明信息、域與方法聲明信息和常量池

③方法信息:對應Java源碼中語句和表達式對應的信息。包含字節碼、異常處理器表、求值棧與局部變量區大小、求值棧的類型記錄、調試符號信息

類的加載機制


一張圖說明,先自底向上檢查類是否加載,進行記錄,而後所有將類檢查完成之後,再自頂向下不斷的嘗試加載類。

底層使用C++完成對類的加載

類的執行機制

JVM是基於堆棧的虛擬機,JVM爲每一個新建立的線程分配一個堆棧,對於Java程序來講,運行時經過對堆棧的操做來完成的。
堆棧以幀爲單位保存線程的狀態,JVM對堆棧的操做爲壓棧和出棧
JVM執行class字節碼之後,將會產生程序計數器和棧,程序計數器存放將要執行下一條指令的偏移量。
棧中存放一個個的棧幀,每一個棧幀對應每一個方法的每次調用,棧幀由局部變量和操做數棧兩部分組成,局部變量存放局部變量和參數,操做數棧中用於存放方法執行過程當中產生的中間結果

JVM內存管理和垃圾回收

JVM內存分爲方法區(method),棧內存(stack),堆內存(heap),本地方法棧(java中的jni調用)

堆內存

操做系統有一個記錄空閒內存地址的鏈表,當系統收到程序的申請時,會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,而後將該結點從空閒結點鏈表中刪除,並將該結點的空間分配給程序,

棧內存

棧是向低地址擴展的數據結構。爲一塊連續的內存區域。

會有棧溢出這種狀況

其中對象保存在堆中,變量和其中的中間結果保存在棧中

垃圾回收機制

若是一個對象沒有其餘對象進行引用,將會進行不定時的進行刪除,即對無用的內存空間進行回收。

類加載的流程圖

開發環境

官方教程 https://docs.oracle.com/javas...
windows上安裝JDK。
進入oracle官網,https://www.oracle.com/index....
選擇,https://www.oracle.com/techne...
目前最新的J2EE爲10.0.2
選擇jdk 即面向開發者的https://www.oracle.com/techne...
因爲目前是在windows版本,選擇windows版本的。
單擊下一步便可,全部的都會幫你設置完成。
打開PowerShell 輸入

PS C:\Users\mingm\Desktop> java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
PS C:\Users\mingm\Desktop>

若是能出現以上命令說明配置正確。path等環境變量已經自動配置

Server JRE

一種運行在服務器端的Java環境。連接https://www.oracle.com/techne...
選擇進行下載。
在win10 設置中設置環境變量
http://www.runoob.com/w3cnote...

Eclipse

一種Java的IDE環境https://www.eclipse.org/
選擇java環境文件,便可完成,灰常簡單。因爲某些讓人氣憤的緣由,包沒法使用,那就用https://www.eclipse.org/downl...

hello world

如今書寫第一個hello world程序

public class HelloWorld {
    /*你好世界!*/
    public static void main(String []args) {
        System.out.println("hello world");
    }
}

新建HelloWorld.java文件
而後打開同目錄下的powershell
編譯成爲class

PS C:\Users\mingm\Desktop\test> javac .\HelloWorld.java

出現錯誤

.\HelloWorld.java:2: :  GBK IJӳַ (0x81)
        /*你好世界?*/
                 ^
1

提示編碼錯誤,因爲保存的是utf-8編碼的,因此直接代碼編碼進行編譯。

PS C:\Users\mingm\Desktop\test> javac -encoding utf-8 .\HelloWorld.java

使用

-encoding

編碼使用utf-8進行編譯成爲class文件
查看目錄

PS C:\Users\mingm\Desktop\test> ls


    目錄: C:\Users\mingm\Desktop\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2018/9/18     22:14            425 HelloWorld.class
-a----        2018/9/18     22:12            135 HelloWorld.java


PS C:\Users\mingm\Desktop\test>

目錄下出現class文件
繼續運行

PS C:\Users\mingm\Desktop\test> java HelloWorld
hello world
PS C:\Users\mingm\Desktop\test>

出現hello world

在Eclipse上寫hello world

接着書寫項目名稱

接着在src目錄下建立包

建立Java源文件

書寫代碼

package cn.xd.test;

public class Hello {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("hello world");
    }

}

運行

運行結果

評價,不習慣用IDE,至今不知道爲何。╮(╯▽╰)╭。習慣使然。

IntelliJ idea

ps 試試這個,若是能適應TJ的話,那更加的好啦。

和jre鏈接

比較簡單,不在闡述,綜上所述,我的仍是傾向於簡單應用直接編輯器,submit text 就行啦,稍微複雜一點的應用,使用IntelliJ idea 便可。

相關文章
相關標籤/搜索