色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

idea 查詢mysql,怎樣學習Java

傅智翔2年前20瀏覽0評論
idea 查詢mysql,怎樣學習Java?

感謝邀請。

我自己也是一名軟件開發工程師,目前在杭州某電子商務公司進行中間件軟件的開發。職業生涯中用過C++,C#,Java,Python,Go等語言,使用最多的也是Java語言。接下來我就談談我對Java開發的一些理解,談一下我是怎么學習Java的吧,希望能對想學習Java的有些幫助,能夠拋磚引玉就很開心了。

Java語言

學習Java語言之前,先來認識一下Java語言吧,這樣對我們學習會有好處。

Java是一門面向對象編程語言,即經常說的OOP(Object Oriented Programming)。說起面向對象編程,大部分人在大學時應該都學過了C++語言,C++是很經典的面向對象語言。Java吸收了C++的OOP思想,同時也摒棄了C++中一些難以理解的元素,比如指針,多繼承等。所以,Java語言同時具有了功能強大和簡單易用的優點。

JVM

說起Java,就不得不說Java的一個很重要的特性了,那就是JVM(Java Virtual Machine)。Java語言一經發布就收到了巨大的關注和歡迎,一門新的語言,能夠迅速流行,肯定是在某些方面有著巨大的進步。尤其是在老前輩C,C++面前。

JVM是Java語言和同時代語言相比的一個重大突破。Java的口號是“Write Once, Run everywhere”。用Java語言編寫的應用,只需編寫一次,可以在各個平臺運行,包括Window,Linux,Mac等。簡言之,Java應用可以跨平臺。目前有很多的跨平臺語言,但是在當時,這可謂是一個巨大的突破。使用Java語言可以極大的減少跨平臺應用的開發成本,收廣大開發者和企業的歡迎。

JVM是如何做到跨平臺呢?軟件是運行在操作系統之上的,而不同的操作系統的內核,系統API都是不同的。這也導致了不同操作系統的軟件不能在其他系統上直接運行。比如Windows的exe文件在Mac上無法運行。Mac的app軟件在Windows上也無法運行。

計算機系統軟件體系結構采用一種層的結構,有人說過一句名言:

計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決

JVM也是采用了這種方法。即Java代碼不是編譯成可在各平臺直接運行的二進制文件,而是編譯為一種Class文件。Class文件運行在JVM中,JVM負責將Class文件翻譯成各平臺的二進制文件。通過引入JVM中間層,Java應用實現了跨平臺功能。

JVM工作原理如下圖所示:

在學習Java的時候,要記住Java的JVM特性。這樣對后續的Java學習很有好處,比如后面我將要提到的動態代理,AOP等特性。

Java開發環境搭建

知道了Java的JVM原理之后,搭建Java開發環境就很簡單了。不同的操作系統上需要安裝平臺相關的Java開發工具,即常說的JDK,或JRE。

JDK = JRE + 開發工具。JRE是Java應用的運行時環境,是必須的。JDK包含了JRE和開發工具(比如調試,日志,監控等)。

安裝Java有兩種方式:

安裝文件安裝:手動去Oracle官網下載安裝文件,進行安裝。

包管理工具安裝:在Mac平臺推薦使用Homebrew安裝;Linux上使用apt-get或yum來安裝。

Java IDE推薦工欲善其事必先利其器

一個好的開發工具,能為我們提升效率。

Java IDE有很多,比較主流的有Eclipse和IntelliJ IDEA。強烈推薦IntelliJ IDEA,比Eclipse要強大很多,唯一的缺點是IntelliJ IDEA完整功能是收費的。不過,作為日常開發,社區辦已經足夠強大,滿足我們的需求了。如果想使用IntelliJ IDEA商業版,可以購買,獲得更好的體驗。

另外,如果資金不足,可以去網上找找破解版本,作為學習使用。不過,還是推薦使用正版軟件哦。Java一些容易混淆的概念

我是從C#轉Java的。C#是微軟閉環的一個開發語言,剛開始接觸Java時,還沒開始寫代碼,就已經被Java各種概念弄的暈頭轉向。接下來我就理清一下那些容易混淆的概念。

Java1.6和Java6:關于Java的版本,經常看到Java 1.6和Java6的說法。其實Java 1.6和Java6是同樣的版本,只是叫法不一樣。目前在使用的版本一般都是Java 6或以上了。

Java SE,Java EE,Java ME:是很早的時候提出來的一些概念,現在基本已廢棄了,其實可以不用關注了。但我還是簡單說明一下吧,Java SE:Java Standard Edition,可以認為是Java的核心。Java EE:Java Enterprise Edittion:Java企業版,基于Java SE,添加了一些企業開發的特性,用于開發企業級的大項目。Java ME:Java Mobile Edition:移動端開發版本。現在基本沒有這樣的區分了,在Oracle下載Java時,也只有Java SE。Java SE就是Java。

J2EE:J2EE就是Java EE。這個概念也基本被廢棄了。不用太關心。

Apache:Apache是一個開源軟件基金會,也是一款Web服務器,同時還是一種武裝直升機。。。。

學Java即學習Java的生態

這是我自己感觸最深的一點,學習Java最重要的就是要學習Java的生態。這也是剛學習Java時,大部分人比較迷茫的。學習其他語言時,主要的精力可能在學習語言本身。而學習Java,將會需要花費大量的精力來學習Java生態中的各個組件,類庫,框架,產品等。當然Java語言本身也是很重要的,需要花很多時間來學習。下面我就列一下Java常用的組件吧:

Tomcat:Web容器。用于運行Java的Web應用。

Jetty:Web容器。

Maven:項目構建工具。大多數的項目都是使用maven構建的。

Gradle:角色同Maven,是Maven的下一代,升級版。但市場普及度不如Maven。

Spring:Java中最常用的框架。幾乎所有的項目都會使用。我會在后面單獨介紹。

Mysql:數據庫。Java應用一般選擇Mysql作為數據庫。

Mybatis:數據庫訪問框架,簡化數據庫訪問。

Netty:網絡通信組件。簡化網絡編程。

log4j:Log for Java的縮寫,一款日志框架。

junit:Java Unit的縮寫,Java的單元測試框架。

Apache Commons:Apache提供的通用功能的類庫。比如字符串處理,集合處理等。

上面列出的是現在使用比較多的框架,一些過時了的比如Structs,Hibernate就不列舉了。框架太多了,一些過時的就不要去學習了,不要迷失在眼花繚亂的框架中。有時間可以慢慢了解。

Spring

Spring框架,是目前Java生態中最重要,也是使用最廣的一個框架了。Spring框架由最初提供的一些核心功能,發展到今天,已經是一個非常完整的生態了。

Java是一個大生態,Spring是這個大生態中的另一個大生態。

為什么Spring如此重要,Spring提供了什么功能呢?

Spring最重要,最核心,最有價值的地方其實就兩點:

IoC:Inverse of Control,控制反轉。

AOP:Aspect Orentied Programming,面向切面編程。

什么是IoC?

我第一次接觸IoC時,我是一臉蒙圈的,我問了隔壁搞了一年多Java的哥們,什么是IoC,他噼里啪啦和我說了一通,什么解耦,依賴注入,Bean。完了我說,這個IoC有什么關系。

IoC是什么?如果要好理解,先從IoC這三個字母說起,Inverse of Control,控制反轉。

那就要解釋什么是控制反轉了。我們來看下面這兩段代碼:

MysqlDB是Mysql數據庫操作實現類

public class UserRepository {

private MysqlDB db;

public void insert(User user) {

db.insert(user);

}

}

IDB是一個接口,可能有Mysql,Oracle,Mondo等實現。

public class UserRepository {

private IDB db;

public void insert(User user) {

db.insert(user);

}

}

這兩段代碼的唯一區別就是一個使用了MysqlDB,一個使用了IDB。他們都是UserRepository的依賴。UserRepository依賴他們來實現數據庫操作。

使用MysqlDB的代碼中,UserRepository自己控制它依賴的組件是什么,是很明確的MysqlDB。注意這里出現了控制的字眼哦。

使用IDB的代碼中,UserRepository自己不能控制它依賴的組件是什么,可能是MysqlDB,可能是OracleDB,也可能是MondoDB。

本來UserRepository依賴誰是它自己控制的,這也是絕大部分其他語言和Java代碼使用的方式。但是使用IDB的代碼中,控制權不在UserRepository自己這里,而是有外部來控制的。這個外部可能是其他類,可能是其他框架,總之,不是UserRepository自己。這就是控制反轉。

所以,控制反轉說的主要是類之間的依賴關系。當一個類將它依賴的一個具體類,變成一個抽象的接口時,這是控制反轉的表現形式。那控制反轉有什么好處呢?

還是以上面的例子舉例:UserRepository真實想要的功能其實是“保存數據”,而不是“保存數據到Mysql”。可能今天使用Mysql,但某天發現數據量大了,需要遷移到Oracle獲取更大的吞吐量,也可能使用Nosql的Mongo實現更靈活的弱Schema存儲。如果使用具體的MysqlDB,代碼就和MysqlDB耦合了,一旦更換了數據庫,所有依賴MysqlDB的地方的代碼都需要改。而采用IDB的方式,代碼是不用修改的。是解耦的。而且使用接口還有個好處是,我們可以基于抽象的接口生成動態代理,來實現更高級的功能。也就是動態給Java類添加功能。

關于IoC下面的圖解釋的比較清楚:

圖一中四個齒輪是互相嚙合在一起,在軟件的角度上,就是類互相耦合。

圖二中四個齒輪不是嚙合在一起的,而是通過IoC容器連接在一起,是解耦的。

還記得前面引用的那句話嗎?

計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決

IoC也是通過引入了額外的IoC容器來解決類之間的耦合問題。

圖一

圖二

AOP

AOP:面向切面編程。我們可以看上面的圖。向下的三個箭頭是3個業務邏輯處理工程。他們處理了各自不同的邏輯。同時這3個業務處理都有打印日志和安全的問題。那么我們可以把這些通用的邏輯提取到一個公共的地方。就是AOP中的切面。日志和安全是兩個切面,這兩個切面是可以橫切多個業務處理邏輯的。

使用AOP可以將一些公共的代碼從各個業務類中剝離到切面中,提高系統的可維護性和擴展性。

Java進階

有了上面這些基礎之后,基本算是Java入門了,開發基本的功能是可以了。接下來是一些進階的推薦:

Java多線程編程。

Netty網絡編程。

JVM調優,排查問題。

Spring MVC,Spring Boot。

RPC框架使用:Dubbo,Spring Cloud,gRPC。

消息中間件的使用。可以看看RocketMQ源碼來學習。

容器:Docker,k8s等。(這個不是Java特有的,但是未來的趨勢,值得學習)

以上就是我關于學習Java的一些思路吧,更多是從我自己的真實經歷出發,希望能給大家一些參考吧。能力有限,有錯誤之處,還請大家幫著指正。