JAVA名詞匯

1、Java中間件,分布式系統(tǒng)、分布式緩存、消息隊(duì)列

JAVA中間件:包括服務(wù)框架中間件:解決集群間的訪問(wèn)通信問(wèn)題。消息中間件:解決應(yīng)用之間的消息傳遞、解耦、異步的問(wèn)題。數(shù)據(jù)訪問(wèn)中間件:解決應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)的共性問(wèn)題。
??分布式系統(tǒng):一定是有多個(gè)節(jié)點(diǎn)組成的系統(tǒng),一般一個(gè)節(jié)點(diǎn)就是一臺(tái)服務(wù)器,節(jié)點(diǎn)之間是相互連通協(xié)作的,這些連通的節(jié)點(diǎn)上部署了我們的組件,共同服務(wù)于一個(gè)大型系統(tǒng)。比如淘寶網(wǎng),在對(duì)瀏覽器發(fā)送請(qǐng)求的背后,是一個(gè)大型的分布式系統(tǒng)為我們服務(wù),整個(gè)系統(tǒng)有的負(fù)責(zé)請(qǐng)求處理,有的負(fù)責(zé)存儲(chǔ),有的負(fù)責(zé)計(jì)算,最終通過(guò)相互的協(xié)作把請(qǐng)求的結(jié)果返回給瀏覽器,并呈現(xiàn)給我們。
??分布式緩存:就是把數(shù)據(jù)存放在不同的物理機(jī)器上,利用分布式緩存中間件進(jìn)行處理數(shù)據(jù)。Redis和memcached緩存系統(tǒng)都是以key-value的形式存儲(chǔ)和訪問(wèn)數(shù)據(jù),在內(nèi)存中維護(hù)一張巨大的HashTable。但是redis比memcached支持的數(shù)據(jù)類(lèi)型更多,有五種數(shù)據(jù)類(lèi)型:String、Hash、List、Set、ZSet(有序集合)。注意:分布式緩存系統(tǒng)需要用到一致哈希算法,它的的好處在于節(jié)點(diǎn)個(gè)數(shù)發(fā)生變化(減少或增加)時(shí)無(wú)需重新計(jì)算哈希值,避免大量key的重新映射,保證數(shù)據(jù)儲(chǔ)存或讀取時(shí)可以正確、快速地找到對(duì)應(yīng)的節(jié)點(diǎn)。
??消息隊(duì)列(中間件):負(fù)責(zé)消息的收發(fā)管理,利用高效可靠的異步消息傳遞機(jī)制集成到分布式系統(tǒng)。五大優(yōu)點(diǎn):解耦、異步、橫向擴(kuò)展、安全可靠、順序保證。常見(jiàn)的有activeMQ(支持多語(yǔ)言,實(shí)現(xiàn)jms1.1),RabbitMQ(支持更多語(yǔ)言,基于AMQP規(guī)范),kafka(高吞吐量,分布式,分區(qū),O(1)磁盤(pán)順序提供消息持久化)
??
2、常用的開(kāi)源項(xiàng)目框架理解

Spring
??Spring是輕量級(jí)的IoC和AOP的容器框架,是進(jìn)行對(duì)象管理、對(duì)象關(guān)聯(lián)、解耦的一個(gè)中間層框架。是面向Bean的編程,實(shí)現(xiàn)了組件的解耦。
??IoC(DI)依賴(lài)注入實(shí)現(xiàn)的技術(shù):反射機(jī)制、工廠模式。其中pring的BeanFactory主要實(shí)現(xiàn)步驟如下,

解析配置文件(bean.xml)
使用反射機(jī)制動(dòng)態(tài)加載每個(gè)class節(jié)點(diǎn)中配置的類(lèi)
為每個(gè)class節(jié)點(diǎn)中配置的類(lèi)實(shí)例化一個(gè)對(duì)象
使用反射機(jī)制調(diào)用各個(gè)對(duì)象的seter方法,將配置文件中的屬性值設(shè)置進(jìn)對(duì)應(yīng)的對(duì)象
將這些對(duì)象放在一個(gè)存儲(chǔ)空間(beanMap)中
使用getBean方法從存儲(chǔ)空間(beanMap)中取出指定的JavaBean
AOP實(shí)現(xiàn)的技術(shù): JDK動(dòng)態(tài)代理技術(shù) 和 CGLIB技術(shù)(動(dòng)態(tài)字節(jié)碼增強(qiáng)技術(shù)) 。盡管實(shí)現(xiàn)技術(shù)不一樣,但都是基于代理模式 , 都是生成一個(gè)代理對(duì)象 。
??JDK動(dòng)態(tài)代理技術(shù):主要使用到 InvocationHandler 接口和 java.lang.reflect.Proxy類(lèi)的newProxyInstance() 方法。通過(guò)使用接口,使系統(tǒng)松耦合。
??CGLIB(動(dòng)態(tài)字節(jié)碼增強(qiáng))技術(shù):是繼承被代理對(duì)象,然后Override需要被代理的方法。使用繼承,代碼寫(xiě)起來(lái)更簡(jiǎn)單。

Struts2
??Struts2是基于servlet、MVC設(shè)計(jì)模式的Web應(yīng)用框架,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。
??Struts2框架采用Filter(StrutsPrepareAndExecuteFilter)作為核心控制器實(shí)現(xiàn)。是類(lèi)級(jí)別的攔截,每次請(qǐng)求對(duì)應(yīng)實(shí)例一個(gè)新的Action,然后調(diào)用setter getter方法把request中的數(shù)據(jù)注入。一個(gè)Action對(duì)象對(duì)應(yīng)一個(gè)request上下文。
??Struts2流程分析:
①當(dāng)在瀏覽器中輸入相應(yīng)網(wǎng)址,會(huì)加載web.xml中的核心控制器
②核心控制器會(huì)攔截所有請(qǐng)求,加載struts.xml的配置文件,找到和請(qǐng)求名字相同的action
③創(chuàng)建Class屬性指定類(lèi)的對(duì)象
④執(zhí)行method屬性指定的方法,返回一個(gè)字符串結(jié)果
⑤找Name等于此字符串的result,轉(zhuǎn)到相應(yīng)頁(yè)面或action
⑥在頁(yè)面中執(zhí)行相關(guān)代碼:通過(guò)EL表達(dá)式或者OGNL表達(dá)式取當(dāng)前類(lèi)屬性的值

SpringMVC
??SpringMVC是基于Servlet 、MVC設(shè)計(jì)模式的一個(gè)松耦合的web應(yīng)用框架,使用前端控制器模式來(lái)進(jìn)行設(shè)計(jì),再根據(jù)請(qǐng)求映射規(guī)則分發(fā)給相應(yīng)的后端控制器進(jìn)行處理。
SpringMVC框架采用Servlet作為核心控制器實(shí)現(xiàn)。是方法級(jí)別的攔截,攔截到方法后根據(jù)參數(shù)上的注解,把request數(shù)據(jù)注入進(jìn)去。一個(gè)方法對(duì)應(yīng)一個(gè)Request上下文,所以方法直接基本上是獨(dú)立的,獨(dú)享request,response數(shù)據(jù)。、
??開(kāi)發(fā)效率對(duì)比:
??由于SpringMVC基于方法的攔截,有加載一次單例模式bean注入。而Struts2是類(lèi)級(jí)別的攔截,每次請(qǐng)求對(duì)應(yīng)實(shí)例一個(gè)新的Action,需要加載所有的屬性值注入,所以,SpringMVC開(kāi)發(fā)效率和性能高于Struts2
??SpringMVC的工作流程如下:
1.用戶(hù)發(fā)送請(qǐng)求至前端控制器(DispatcherServlet)

  1. DispatcherServlet收到請(qǐng)求調(diào)用處理器映射器(HandlerMapping)
  2. 處理器映射器根據(jù)請(qǐng)求url找到具體的處理器,生成處理器對(duì)象及處理器攔截器對(duì)象一并返回給DispatcherServlet
  3. DispatcherServlet通過(guò)處理器適配器(HandlerAdapter)調(diào)用具體的處理器(Controller)
  4. 處理器即后端控制器(Controller)執(zhí)行具體的業(yè)務(wù)操作,完成后返回ModelAndView
  5. HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
  6. DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
  7. ViewReslover解析后返回具體View DispatcherServlet對(duì)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)
  8. DispatcherServlet響應(yīng)用戶(hù)

MyBatis
??MyBatis 是一個(gè)基于 Java 的 持久層 框架, MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。 把實(shí)體類(lèi)和SQL語(yǔ)句之間建立了映射關(guān)系,是一種半自動(dòng)化的ORM實(shí)現(xiàn)。
??MyBatis的特點(diǎn):
基于SQL語(yǔ)法,SQL語(yǔ)句封裝在配置文件中,便于統(tǒng)一管理與維護(hù)。
自動(dòng)化程度低、手工映射SQL,靈活程度高。

Hibernate
??Hibernate是優(yōu)秀的Java 持久化層解決方案、對(duì)象-關(guān)系映射(ORM)工具、簡(jiǎn)化了JDBC 繁瑣的編碼。
??Hibernate特點(diǎn):
??Hibernate對(duì)象-關(guān)系映射能力強(qiáng),數(shù)據(jù)庫(kù)無(wú)關(guān)性好,對(duì)于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開(kāi)發(fā)可以節(jié)省很多代碼,提高效率。
編寫(xiě)程序的時(shí)候,HQL語(yǔ)句操作,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)。而保存數(shù)據(jù)的時(shí)候,卻以關(guān)系型數(shù)據(jù)庫(kù)的方式存儲(chǔ)。

SpringBoot
??SpringBoot是基于Spring4.0的一套快速搭建Spring框架的整合包。方便對(duì)各種框架的整合,讓他們集成在一起更加簡(jiǎn)單,簡(jiǎn)化了我們?cè)诩蛇^(guò)程中的模板化配置。遵循”約定大于配置”,實(shí)現(xiàn)零配置。
??特點(diǎn):

  1. 創(chuàng)建獨(dú)立的Spring應(yīng)用程序
  2. 嵌入的Tomcat,無(wú)需部署WAR文件
  3. 簡(jiǎn)化Maven配置
  4. 自動(dòng)配置Spring
  5. 提供生產(chǎn)就緒型功能,如指標(biāo),健康檢查和外部配置

微服務(wù)
??微服務(wù)是一種可以讓軟件職責(zé)單一、松耦合、自包含、可以獨(dú)立運(yùn)行和部署的架構(gòu)思想。微服務(wù)架構(gòu)是讓微服務(wù)與微服務(wù)之間在結(jié)構(gòu)上“松耦合”,而在功能上則表現(xiàn)為一個(gè)統(tǒng)一的整體。目的是有效的拆分應(yīng)用,實(shí)現(xiàn)敏捷開(kāi)發(fā)和部署。
??關(guān)鍵思想就是:拆分、單一、獨(dú)立、組件化。把原本一個(gè)龐大、復(fù)雜的項(xiàng)目按業(yè)務(wù)邊界拆分一個(gè)一個(gè)獨(dú)立運(yùn)行的小項(xiàng)目,通過(guò)接口的方式組裝成一個(gè)大的項(xiàng)目。

Dubbo
??首先了解一下ESB(企業(yè)數(shù)據(jù)總線):一般采用集中式轉(zhuǎn)發(fā)請(qǐng)求,適合大量異構(gòu)系統(tǒng)集成,側(cè)重任務(wù)的編排,性能問(wèn)題可通過(guò)異構(gòu)的方式來(lái)進(jìn)行規(guī)避,無(wú)法支持特別大的并發(fā)。
??Dubbo(服務(wù)注冊(cè)管理),采用的是分布式調(diào)用,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。其側(cè)重服務(wù)的治理,將各個(gè)服務(wù)顆粒化,各個(gè)子業(yè)務(wù)系統(tǒng)在程序邏輯上完成業(yè)務(wù)的編排。是遠(yuǎn)程服務(wù)調(diào)用的分布式框架(告別Web Service模式中的WSdl,以服務(wù)者與消費(fèi)者的方式在dubbo上注冊(cè))
??其核心部分包含:

  1. 遠(yuǎn)程通訊: 提供對(duì)多種基于長(zhǎng)連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請(qǐng)求-響應(yīng)”模式的信息交換方式。
  2. 集群容錯(cuò): 提供基于接口方法的透明遠(yuǎn)程過(guò)程調(diào)用,包括多協(xié)議支持,以及軟負(fù)載均衡,失敗容錯(cuò),地址路由,動(dòng)態(tài)配置等集群支持。
  3. 自動(dòng)發(fā)現(xiàn): 基于注冊(cè)中心目錄服務(wù),使服務(wù)消費(fèi)方能動(dòng)態(tài)的查找服務(wù)提供方,使地址透明,使服務(wù)提供方可以平滑增加或減少機(jī)器。
    服務(wù)注冊(cè)中心:Zookeeper 服務(wù)調(diào)用方式: RPC

Spring Cloud
??Spring cloud是基于spring boot以及結(jié)合Netflix 相關(guān)思想和代碼對(duì)微服務(wù)理念的java實(shí)現(xiàn)。提供了一些可以用于快速構(gòu)建分布式系統(tǒng)通用模式的工具(例如:配置管理、服務(wù)注冊(cè)與發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線),在本質(zhì)上是一種分布式的解決方案。
??五大核心組件:

  1. 服務(wù)注冊(cè)發(fā)現(xiàn) - Netflix Eureka
  2. 配置中心 - spring cloud config
  3. 負(fù)載均衡-Netflix
  4. Ribbon 斷路器 - Netflix Hystrix
  5. 路由(網(wǎng)關(guān)) - Netflix Zuu

服務(wù)注冊(cè)中心:Netflix Eureka 服務(wù)調(diào)用方式:REST API

Zookeeper
??ZooKeeper是一種分布式應(yīng)用程序協(xié)調(diào)服務(wù),用于管理大型主機(jī)。它是集群的管理者,監(jiān)視著集群中各個(gè)節(jié)點(diǎn)的狀態(tài),根據(jù)節(jié)點(diǎn)提交的反饋進(jìn)行下一步合理操作。最終,將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶(hù)。
??Zookeeper作用:
1.命名服務(wù) 2.配置管理 3.集群管理 4.分布式鎖 5.隊(duì)列管理
??Zookeeper設(shè)計(jì)目的:
1.最終一致性:client不論連接到哪個(gè)Server,展示給它都是同一個(gè)視圖,這是zookeeper最重要的性能。
2.可靠性:具有簡(jiǎn)單、健壯、良好的性能,如果消息被到一臺(tái)服務(wù)器接受,那么它將被所有的服務(wù)器接受。
3.實(shí)時(shí)性:Zookeeper保證客戶(hù)端將在一個(gè)時(shí)間間隔范圍內(nèi)獲得服務(wù)器的更新信息,或者服務(wù)器失效的信息。但由于網(wǎng)絡(luò)延時(shí)等原因,Zookeeper不能保證兩個(gè)客戶(hù)端能同時(shí)得到剛更新的數(shù)據(jù),如果需要最新數(shù)據(jù),應(yīng)該在讀數(shù)據(jù)之前調(diào)用sync()接口。
4.等待無(wú)關(guān)(wait-free):慢的或者失效的client不得干預(yù)快速的client的請(qǐng)求,使得每個(gè)client都能有效的等待。
5.原子性:更新只能成功或者失敗,沒(méi)有中間狀態(tài)。
6.順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺(tái)服務(wù)器上消息a在消息b前發(fā)布,則在所有Server上消息a都將在消息b前被發(fā)布;偏序是指如果一個(gè)消息b在消息a后被同一個(gè)發(fā)送者發(fā)布,a必將排在b前面。

Docker
??Docker 屬于 Linux 容器的一種封裝,提供簡(jiǎn)單易用的容器使用接口。Docker 將應(yīng)用程序與該程序的依賴(lài),打包在一個(gè)文件里面。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣。有了 Docker,就不用擔(dān)心環(huán)境問(wèn)題。
總體來(lái)說(shuō),Docker 的接口相當(dāng)簡(jiǎn)單,用戶(hù)可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
??Docker 主要用途。
(1)提供一次性的環(huán)境。比如,本地測(cè)試他人的軟件、持續(xù)集成的時(shí)候提供單元測(cè)試和構(gòu)建的環(huán)境。
(2)提供彈性的云服務(wù)。因?yàn)?Docker 容器可以隨開(kāi)隨關(guān),很適合動(dòng)態(tài)擴(kuò)容和縮容。
(3)組建微服務(wù)架構(gòu)。通過(guò)多個(gè)容器,一臺(tái)機(jī)器可以跑多個(gè)服務(wù),因此在本機(jī)就可以模擬出微服務(wù)架構(gòu)。

Redis
??Redis 是一個(gè)開(kāi)源的,基于高級(jí)的key-value存儲(chǔ)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件。 它支持多種類(lèi)型的數(shù)據(jù)結(jié)構(gòu),如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢(xún), bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢(xún)。 Redis 內(nèi)置了 復(fù)制(replication),LUA腳本(Lua scripting), LRU驅(qū)動(dòng)事件(LRU eviction),事務(wù)(transactions) 和不同級(jí)別的 磁盤(pán)持久化(persistence), 并通過(guò) Redis哨兵(Sentinel)和自動(dòng) 分區(qū)(Cluster)提供高可用性(high availability)。
??Redis優(yōu)點(diǎn)
(1) 速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類(lèi)似于HashMap,HashMap的優(yōu)勢(shì)就是查找和操作的時(shí)間復(fù)雜度都是O(1)
(2) 支持豐富數(shù)據(jù)類(lèi)型,支持string,list,set,sorted set,hash
(3) 支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行
(4) 豐富的特性:可用于緩存,消息,按key設(shè)置過(guò)期時(shí)間,過(guò)期后將會(huì)自動(dòng)刪除

Memcached
??Memcached基于一個(gè)存儲(chǔ)鍵/值對(duì)的hashmap。Memcached 是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載。它通過(guò)在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來(lái)減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提高動(dòng)態(tài)、數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度。
??Memcached特征:

  1. 協(xié)議簡(jiǎn)單
  2. 基于libevent的事件處理
  3. 內(nèi)置內(nèi)存存儲(chǔ)方式
  4. memcached不互相通信的分布式

Memcache與Redis的區(qū)別都有哪些?
1)、存儲(chǔ)方式 Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過(guò)內(nèi)存大小。 Redis有部份存在硬盤(pán)上,這樣能保證數(shù)據(jù)的持久性。
2)、數(shù)據(jù)支持類(lèi)型 Memcache對(duì)數(shù)據(jù)類(lèi)型支持相對(duì)簡(jiǎn)單。 Redis有復(fù)雜的數(shù)據(jù)類(lèi)型。
3)、使用底層模型不同 它們之間底層實(shí)現(xiàn)方式 以及與客戶(hù)端之間通信的應(yīng)用協(xié)議不一樣。 Redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話(huà),會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求。

3、遠(yuǎn)程服務(wù)調(diào)用 RPC、REST API
?
??RPC 即遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call Protocol,簡(jiǎn)稱(chēng)RPC),像調(diào)用本地服務(wù)(方法)一樣調(diào)用服務(wù)器的服務(wù)(方法)。通常的實(shí)現(xiàn)有 XML-RPC , JSON-RPC , 通信方式基本相同, 不同的只是傳輸數(shù)據(jù)的格式。
??RPC架構(gòu)里包含如下4個(gè)組件:
1、 客戶(hù)端(Client):服務(wù)調(diào)用方
2、 客戶(hù)端存根(Client Stub):存放服務(wù)端地址信息,將客戶(hù)端的請(qǐng)求參數(shù)打包成網(wǎng)絡(luò)消息,再通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)方
3、 服務(wù)端存根(Server Stub):接受客戶(hù)端發(fā)送過(guò)來(lái)的消息并解包,再調(diào)用本地服務(wù)
4、 服務(wù)端(Server):真正的服務(wù)提供者。
??RPC架構(gòu)目的是把調(diào)用、編碼/解碼的過(guò)程封裝起來(lái),讓用戶(hù)像調(diào)用本地服務(wù)一樣的調(diào)用遠(yuǎn)程服務(wù)。要做到對(duì)客戶(hù)端(調(diào)用方)透明化服務(wù), RPC框架需要考慮解決如下問(wèn)題:

  1. 服務(wù)端提供的服務(wù)如何發(fā)布,客戶(hù)端如何發(fā)現(xiàn)服務(wù);
  2. 如何對(duì)請(qǐng)求對(duì)象和返回結(jié)果進(jìn)行序列化和反序列化;
  3. 如何更高效進(jìn)行網(wǎng)絡(luò)通信。

REST 即表述性狀態(tài)傳遞(Representational State Transfer,簡(jiǎn)稱(chēng)REST),是Roy Fielding博士在2000年他的博士論文中提出來(lái)的一種軟件架構(gòu)風(fēng)格。它是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開(kāi)發(fā)方式,可以降低開(kāi)發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。
??REST通過(guò)資源的角度觀察網(wǎng)絡(luò)( 通過(guò)HTTP協(xié)議定義的通用動(dòng)詞方法(GET、PUT、DELETE、POST) ),以URI對(duì)網(wǎng)絡(luò)資源進(jìn)行唯一標(biāo)識(shí),響應(yīng)端根據(jù)請(qǐng)求端的不同需求,通過(guò)無(wú)狀態(tài)通信,對(duì)其請(qǐng)求的資源進(jìn)行表述。
??REST使用HTTP+URI+XML 來(lái)實(shí)現(xiàn)其要求的架構(gòu)風(fēng)格:HTTP協(xié)議和URI用于統(tǒng)一接口和定位資源,文本、二進(jìn)制流、XML、JSON等格式用來(lái)作為資源的表述。
??滿(mǎn)足REST約束條件和原則的架構(gòu)或接口,就被稱(chēng)為是RESTful架構(gòu)或RESTful接口。就像URL都是URI(統(tǒng)一資源標(biāo)識(shí))的表現(xiàn)形式一樣,RESTful是符合REST原則的表現(xiàn)形式。
————————————————————————————————————————————————————————————————————————————————————
1.java中的接口

(1)它只是定義,而不去具體實(shí)現(xiàn),比如一個(gè)水桶,你想用它去裝水,那么你就在下面的方法中具體寫(xiě)出怎么裝水,這個(gè)接口只是負(fù)責(zé)讓你裝,如果你要裝油,那你就具體定義怎么裝油,這是的接口也不管你怎么實(shí)現(xiàn),接口只是接受你給參數(shù),至于怎么用要在繼承的方法中實(shí)現(xiàn)。

(2)接口就是個(gè)招牌。
比如說(shuō)你今年放假出去杭州旅游,玩了一上午,你也有點(diǎn)餓了,突然看到前面有個(gè)店子,上面掛著KFC,然后你就知道今天中飯有著落了。
KFC就是接口,我們看到了這個(gè)接口,就知道這個(gè)店會(huì)賣(mài)炸雞腿(實(shí)現(xiàn)接口)。
那么為神馬我們要去定義一個(gè)接口涅,這個(gè)店可以直接賣(mài)炸雞腿?。ㄖ苯訉?xiě)實(shí)現(xiàn)方法),是的,這個(gè)店可以直接賣(mài)炸雞腿,但沒(méi)有掛KFC的招牌,我們就不能直接簡(jiǎn)單粗暴的沖進(jìn)去叫服務(wù)員給兩個(gè)炸雞腿了。
要么,我們就要進(jìn)去問(wèn),你這里賣(mài)不賣(mài)炸雞腿啊,賣(mài)不賣(mài)漢堡啊,賣(mài)不賣(mài)圣代?。ㄟ@就是反射)。很顯然,這樣一家家的問(wèn)實(shí)在是非常麻煩(反射性能很差)。
要么,我們就要記住,中山路108號(hào)賣(mài)炸雞,黃山路45號(hào)賣(mài)炸雞(硬編碼),很顯然這樣我們要記住的很多很多東西(代碼量劇增),而且,如果有新的店賣(mài)炸雞腿,我們也不可能知道(不利于擴(kuò)展)。

2.java中的框架

(1)框架就是別人幫你搭好了舞臺(tái),怎么表演,那要看你自己啦。

(2)框架很簡(jiǎn)單的,你可以認(rèn)為它是一個(gè)工具,甚至一個(gè)插件。
框架的作用,就是將一個(gè)公用的,常用的技術(shù),封裝起來(lái),
幫你處理一些基礎(chǔ)的東西,可以讓你不用再去寫(xiě)那些繁瑣的東西。
就拿你要學(xué)的struts來(lái)說(shuō):他本質(zhì)上也是用java寫(xiě)的,和我們自己寫(xiě)的類(lèi)沒(méi)有區(qū)別,他實(shí)現(xiàn)的東西我們自己也可以實(shí)現(xiàn)。
比如接收客戶(hù)端的數(shù)據(jù),我們是用request.getParameter()來(lái)的,但是如果有很多個(gè)參數(shù),我們要寫(xiě)很多個(gè),很麻煩。struts它就幫我們實(shí)現(xiàn),不用我們寫(xiě),直接寫(xiě)個(gè)屬性,就可以得到。其實(shí)本質(zhì)還是用request.getParameter()。。
所以你不要再在意框架是什么東西,等你接觸了就知道了。你把它當(dāng)做一個(gè)工具來(lái)用,這就是框架。

(3)比如像蓋房子吧
框架就像是房子搭好的骨架一樣,你要完成房子的建造,就只需要在該房窗戶(hù)的地方裝上窗戶(hù)。
在需要門(mén)的地方裝上門(mén)。。。。。
其實(shí),框架能做的事 不用框架同樣可以做的出來(lái),而且有可能會(huì)效率更高。
之所以有框架主要是因?yàn)榭蚣芙o我們提供了很多的功能和模板!
有些繁瑣的事情可以通過(guò)配置文件進(jìn)行配置進(jìn)行解決!
用到了 慢慢體會(huì)就會(huì)明白是個(gè)什么東西了 但是要用到熟練 掌握精髓

3.JDK

JDK根據(jù)提供的功能不同,將類(lèi)庫(kù)劃分為若干個(gè)包,比如用于操作輸入輸出的java.io包,java程序語(yǔ)言設(shè)計(jì)基礎(chǔ)類(lèi)的java.lang包,提供各種數(shù)學(xué)運(yùn)算的java.math包,基于網(wǎng)絡(luò)應(yīng)用的java.net包,以及一些共用程序類(lèi)所在的java.util包等等。

4.返回值和無(wú)返回值

有返回值的就是:我問(wèn)你叫什么,你回答了我。你的回答就是返回。
無(wú)返回值的就是:我指著一輛汽車(chē)告訴你說(shuō),這叫汽車(chē)。你可以不理我,我也不知道你懂不懂。
從上述兩種情況看。為了減小溝通的障礙,我們的程序在絕大部分情況下,都應(yīng)該要有返回值的。

5參數(shù)與返回

(1)有沒(méi)有見(jiàn)過(guò)自動(dòng)售貨機(jī),扔硬幣進(jìn)去,飲料出來(lái), 自動(dòng)售貨機(jī)相當(dāng)于方法,硬幣相當(dāng)于參數(shù),飲料就是返回(返回有參)

(2)有沒(méi)有見(jiàn)過(guò)自動(dòng)售貨機(jī),扔硬幣進(jìn)去,飲料沒(méi)出來(lái), 自動(dòng)售貨機(jī)相當(dāng)于方法,硬幣相當(dāng)于參數(shù),飲料沒(méi)返回(沒(méi)返回有參)

(3)有沒(méi)有見(jiàn)過(guò)自動(dòng)售貨機(jī),沒(méi)扔硬幣進(jìn)去,飲料沒(méi)出來(lái)(無(wú)參無(wú)返回值)

(4)有沒(méi)有見(jiàn)過(guò)自動(dòng)售貨機(jī),沒(méi)扔硬幣進(jìn)去,飲料出來(lái)了(無(wú)參有返回值)

6重載和重寫(xiě)

重寫(xiě)就是再寫(xiě)一遍,重載就是再多一個(gè)。
重寫(xiě):父類(lèi)里有,子類(lèi)再照貓畫(huà)虎寫(xiě)一個(gè)。
重載:自己類(lèi)里面有,覺(jué)得不夠再寫(xiě)一個(gè)。

  1. 二進(jìn)制

二進(jìn)制就像我們常用的十進(jìn)制、鐘表上的12進(jìn)制,歷史上的秦朝的16進(jìn)制(16兩為1斤,所以有半斤八兩的成語(yǔ));二進(jìn)制就是逢二進(jìn)一,只是二進(jìn)制在平常的生活中不常用所以不容易理解,用得多了也就理解了。
二進(jìn)制數(shù)字是計(jì)算機(jī)能夠理解的唯一數(shù)字,但每個(gè)二進(jìn)制數(shù)字所代表的意義是認(rèn)為規(guī)定的:比如0x00,在ascii碼中有一個(gè)定義,送到顯卡中顯示白色(定義0x00為白),在程序中作為數(shù)據(jù)為0,在指針中表示0x00地址,等等。所以計(jì)算機(jī)的程序有嚴(yán)格的格式劃分和定義,否則就很容易造成運(yùn)行錯(cuò)誤。
所以當(dāng)我們用字處理軟件打開(kāi)一個(gè)二進(jìn)制的程序代碼的時(shí)候會(huì)出現(xiàn)很多亂碼就是這個(gè)原因。

8注冊(cè)表

就是電腦里的一些可運(yùn)行文件,像我們上學(xué)有了學(xué)生證才被認(rèn)可進(jìn)入校園的第一步,電腦里的學(xué)生好比可執(zhí)行文件,要是沒(méi)有在注冊(cè)表注冊(cè)它的來(lái)歷,那么它就不能正常運(yùn)行!在運(yùn)行里輸入regedit 回車(chē) 可以看到你安裝過(guò)的文件里邊都會(huì)有記錄的!

9腳本

類(lèi)似于演戲時(shí)用到的腳本,script 其實(shí)就是一系列指令——演員看了指令就知道自己該表演什么,說(shuō)什么臺(tái)詞;計(jì)算機(jī)看了指令就知道自己該做什么事情。所以 script 其實(shí)就是短小的、用來(lái)讓計(jì)算機(jī)自動(dòng)化完成一系列工作的程序,這類(lèi)程序可以用文本編輯器修改,不需要編譯,通常是解釋運(yùn)行的。

在網(wǎng)站前端編程的語(yǔ)境下,腳本通常是指在瀏覽器里運(yùn)行的小程序,就像劇本一樣,它可以用來(lái)控制網(wǎng)頁(yè)上的各類(lèi)元素該怎么表演給觀眾看——比如知乎主頁(yè)右邊那個(gè)回到頁(yè)首的小箭頭就是個(gè)演員,你可以用腳本告訴它只在屏幕下拉到某個(gè)特定長(zhǎng)度的時(shí)候才出現(xiàn)。

(腳本并不是個(gè)很好的翻譯,問(wèn)題就出在“腳”這個(gè)字上,相當(dāng)?shù)啬涿?。Script 一詞的詞根是“書(shū)寫(xiě)”。)
————————————————————————————————————————————————————————————————————————————————————
“專(zhuān)業(yè)術(shù)語(yǔ)”,程序員在對(duì)JVM 做任何的性能和垃圾回收調(diào)整之前理解和記住這些“專(zhuān)業(yè)術(shù)語(yǔ)”是非常重要的。那么學(xué)習(xí)java有哪些專(zhuān)業(yè)名詞是程序員必須記的呢?下面為大家匯總了Java名詞解釋大全,希望對(duì)同學(xué)們學(xué)習(xí)java有幫助!

面向?qū)ο?面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-Oriented Programming)是一種起源于六十年代,發(fā)展已經(jīng)將近三十年的程序設(shè)計(jì)思想。其自身理論已十分完善,并被多種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言(Object-Oriented Programming Language,以下簡(jiǎn)稱(chēng)OOPL)實(shí)現(xiàn)。對(duì)象是對(duì)現(xiàn)實(shí)世界實(shí)體的模擬,由現(xiàn)實(shí)實(shí)體的過(guò)程或信息牲來(lái)定義。一個(gè)對(duì)象可被認(rèn)為是一個(gè)把數(shù)據(jù)(屬性)和程序(方法)封裝在一起的實(shí)體,這個(gè)程序產(chǎn)生該對(duì)象的動(dòng)作或?qū)λ邮艿降耐饨缧盘?hào)的反應(yīng)。這些對(duì)象操作有時(shí)稱(chēng)為方法。區(qū)別面向?qū)ο蟮拈_(kāi)發(fā)和傳統(tǒng)過(guò)程的開(kāi)發(fā)的要素有:對(duì)象識(shí)別和抽象、封裝、多態(tài)性和繼承。(參見(jiàn)百度百科:面向?qū)ο?

面向?qū)ο笠兀悍庋b、多態(tài)、繼承

Java名詞解釋?zhuān)?/p>

API:應(yīng)用程序接口的縮寫(xiě),Java API是Java平臺(tái)定義的一套類(lèi)和接口的程序庫(kù)。

類(lèi):類(lèi)是一個(gè)模板,它描述了同一類(lèi)對(duì)象都具有的數(shù)據(jù)和行為。 Java中的類(lèi)將這些數(shù)據(jù)和行為進(jìn)行封裝,形成一種復(fù)合數(shù)據(jù)類(lèi)型。

對(duì)象:對(duì)象是在其類(lèi)模型基礎(chǔ)上構(gòu)造出的,是類(lèi)的具體的實(shí)例。一個(gè)類(lèi)可以生成任意多的對(duì)象。

封裝:將對(duì)象的數(shù)據(jù)與操作數(shù)據(jù)的方法結(jié)合起來(lái),通過(guò)方法將對(duì)象的數(shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié)保護(hù)起來(lái),稱(chēng)為封裝。

繼承:子類(lèi)繼承父類(lèi)的狀態(tài)(變量)和行為(方法),可以重用父類(lèi)中的這部分代碼。程序員可以在父類(lèi)中對(duì)一些共同的操作和屬性只說(shuō)明一次而在子類(lèi)中基于子類(lèi)的特性進(jìn)行擴(kuò)展或改變。

多態(tài):多態(tài)的含義可以表達(dá)為:對(duì)外一個(gè)接口,內(nèi)部多種實(shí)現(xiàn)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。

重載:在同一個(gè)類(lèi)中,一個(gè)方法名被用來(lái)定義多個(gè)方法,要求參數(shù)表必須不同,以此區(qū)分不同方法體,但返回類(lèi)型、修飾符可相同或不相同。它實(shí)現(xiàn)了Java的編譯時(shí)多態(tài)。

重寫(xiě):當(dāng)子類(lèi)成員方法與父類(lèi)成員方法具有相同的名字、參數(shù)列表、返回值類(lèi)型時(shí),子類(lèi)方法重寫(xiě)了父類(lèi)方法,在父類(lèi)中定義的方法就被隱藏。它實(shí)現(xiàn)了Java的運(yùn)行時(shí)多態(tài)。

構(gòu)造方法:構(gòu)造方法是類(lèi)的一種特殊方法,方法名與類(lèi)名相同,在類(lèi)實(shí)例化對(duì)象時(shí)被調(diào)用,用于初始化類(lèi)的成員變量、分配資源或其他輔助工作。

包:包是類(lèi)和接口的集合,它把同一種類(lèi)型的類(lèi)(接口)組織在一起,使得程序功能清楚、結(jié)構(gòu)分明,更重要的是可實(shí)現(xiàn)不同程序間類(lèi)的重用。

接口:接口是由一些抽象方法和常量組成的一個(gè)集合,它不是一個(gè)類(lèi),不能用來(lái)實(shí)例化一個(gè)對(duì)象。接口好比一個(gè)契約,保證每個(gè)實(shí)現(xiàn)它的類(lèi)都包含該接口所聲明的方法,且可以擴(kuò)展其他接口。

事件(Event):當(dāng)用戶(hù)在界面上執(zhí)行一個(gè)操作(如按下鍵盤(pán)或單擊、拖動(dòng)鼠標(biāo))時(shí),都將產(chǎn)生一個(gè)事件。可見(jiàn),事件用來(lái)描述不同類(lèi)型用戶(hù)操作的對(duì)象。Java有很多不同類(lèi)型的事件類(lèi),對(duì)應(yīng)不同類(lèi)型的用戶(hù)動(dòng)作

事件源(Event source):產(chǎn)生事件的組件就是一個(gè)事件源。例如,在一個(gè)Button上單擊鼠標(biāo)時(shí),將產(chǎn)生一個(gè)ActionEvent類(lèi)型的事件,那么這個(gè)Button就是事件源。

事件處理器(Event handle):事件處理器就是一個(gè)方法,它接收一個(gè)事件對(duì)象,對(duì)其進(jìn)行解釋?zhuān)⒆龀鱿鄳?yīng)的處理。

異常:Java程序中,由于程序員的疏忽或環(huán)境的變化,在程序運(yùn)行時(shí)出現(xiàn)的打斷正常程序流程的不正常情況。

輸入流:Java可以打開(kāi)一個(gè)從某種數(shù)據(jù)源(如文件、內(nèi)存等)到程序的一個(gè)流,從這個(gè)流中讀取數(shù)據(jù),這就是輸入流。它只能從流中讀出,不能向流中寫(xiě)入。21、輸出流:Java可以打開(kāi)一個(gè)從程序到某種數(shù)據(jù)宿(如文件、內(nèi)存等)的一個(gè)流,把數(shù)據(jù)順序?qū)懭脒@個(gè)流以便輸出,這就是輸出流。它只能向流中寫(xiě)入,不能從流中讀出。

Abstract class 抽象類(lèi):抽象類(lèi)是不允許實(shí)例化的類(lèi),因此一般它需要被進(jìn)行擴(kuò)展繼承。

Abstract method 抽象方法:抽象方法即不包含任何功能代碼的方法。

Access modifier 訪問(wèn)控制修飾符:訪問(wèn)控制修飾符用來(lái)修飾Java中類(lèi)、以及類(lèi)的方法和變量的訪問(wèn)控制屬性。

Anonymous class 匿名類(lèi):當(dāng)你需要?jiǎng)?chuàng)建和使用一個(gè)類(lèi),而又不需要給出它的名字或者再次使用的使用,就可以利用匿名類(lèi)。

Anonymous inner classes 匿名內(nèi)部類(lèi):匿名內(nèi)部類(lèi)是沒(méi)有類(lèi)名的局部?jī)?nèi)部類(lèi)。

API 應(yīng)用程序接口:提供特定功能的一組相關(guān)的類(lèi)和方法的集合。

Array 數(shù)組:存儲(chǔ)一個(gè)或者多個(gè)相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu),使用下標(biāo)來(lái)訪問(wèn)。在Java中作為對(duì)象處理。

Automatic variables 自動(dòng)變量:也稱(chēng)為方法局部變量method local variables,即聲明在方法體中的變量。

AWT抽象窗口工具集:一個(gè)獨(dú)立的API平臺(tái)提供用戶(hù)界面功能。

Base class 基類(lèi):即被擴(kuò)展繼承的類(lèi)。

Blocked state 阻塞狀態(tài):當(dāng)一個(gè)線程等待資源的時(shí)候即處于阻塞狀態(tài)。阻塞狀態(tài)不使用處理器資源。

Call stack 調(diào)用堆棧:調(diào)用堆棧是一個(gè)方法列表,按調(diào)用順序保存所有在運(yùn)行期被調(diào)用的方法。

Casting 類(lèi)型轉(zhuǎn)換 :即一個(gè)類(lèi)型到另一個(gè)類(lèi)型的轉(zhuǎn)換,可以是基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,也可以是對(duì)象類(lèi)型的轉(zhuǎn)換。

char 字符:容納單字符的一種基本數(shù)據(jù)類(lèi)型。

Child class 子類(lèi):見(jiàn)繼承類(lèi)Derived class

Class 類(lèi):面向?qū)ο笾械淖罨?、最重要的定義類(lèi)型。

Class members 類(lèi)成員:定義在類(lèi)一級(jí)的變量,包括實(shí)例變量和靜態(tài)變量。

Class methods 類(lèi)方法:類(lèi)方法通常是指的靜態(tài)方法,即不需要實(shí)例化類(lèi)就可以直接訪問(wèn)使用的方法。

Class variable 類(lèi)變量:見(jiàn)靜態(tài)變量Static variable。

Collection 容器類(lèi):容器類(lèi)可以看作是一種可以?xún)?chǔ)存其他對(duì)象的對(duì)象,常見(jiàn)的容器類(lèi)有Hashtables和Vectors。

Collection interface 容器類(lèi)接口:容器類(lèi)接口定義了一個(gè)對(duì)所有容器類(lèi)的公共接口。

Collections framework 容器類(lèi)構(gòu)架:接口、實(shí)現(xiàn)和算法三個(gè)元素構(gòu)成了容器類(lèi)的架構(gòu)。

Constructor 構(gòu)造函數(shù):在對(duì)象創(chuàng)建或者實(shí)例化時(shí)候被調(diào)用的方法。通常使用該方法來(lái)初始化數(shù)據(jù)成員和所需資源。

Containers容器:容器是一種特殊的組件,它可以容納其他組件。

Declaration 聲明:聲明即是在源文件中描述類(lèi)、接口、方法、包或者變量的語(yǔ)法。

Derived class 繼承類(lèi):繼承類(lèi)是擴(kuò)展繼承某個(gè)類(lèi)的類(lèi)。

Encapsulation 封裝性:封裝性體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)特性,將方法和數(shù)據(jù)組織在一起,隱藏其具體實(shí)現(xiàn)而對(duì)外體現(xiàn)出公共的接口。

Event classes 事件類(lèi):所有的事件類(lèi)都定義在java.awt.event包中。

Event sources 事件源:產(chǎn)生事件的組件或?qū)ο蠓Q(chēng)為事件源。事件源產(chǎn)生事件并把它傳遞給事件監(jiān)聽(tīng)器event listeners。

Exception 異常:異常在Java中有兩方面的意思。首先,異常是一種對(duì)象類(lèi)型。其次,異常還指的是應(yīng)用中發(fā)生的一種非標(biāo)準(zhǔn)流程情況,即異常狀態(tài)。

Extensibility擴(kuò)展性:擴(kuò)展性指的是面向?qū)ο蟪绦蛑校恍枰貙?xiě)代碼和重新設(shè)計(jì),能容易的增強(qiáng)源設(shè)計(jì)的功能JAVA常見(jiàn)名詞解釋大全JAVA常見(jiàn)名詞解釋大全。

Finalizer 收尾:每個(gè)類(lèi)都有一個(gè)特殊的方法finalizer,它不能被直接調(diào)用,而被JVM在適當(dāng)?shù)臅r(shí)候調(diào)用,通常用來(lái)處理一些清理資源的工作,因此稱(chēng)為收尾機(jī)制。

Garbage collection 垃圾回收機(jī)制:當(dāng)需要分配的內(nèi)存空間不再使用的時(shí)候,JVM將調(diào)用垃圾回收機(jī)制來(lái)回收內(nèi)存空間。

Guarded region 監(jiān)控區(qū)域:一段用來(lái)監(jiān)控錯(cuò)誤產(chǎn)生的代碼。

Heap堆:Java中管理內(nèi)存的結(jié)構(gòu)稱(chēng)作堆。

Identifiers 標(biāo)識(shí)符:即指定類(lèi)、方法、變量的名字。注意Java是大小寫(xiě)敏感的語(yǔ)言。

Import statement 引入語(yǔ)法:引入語(yǔ)法允許你可以不使用某個(gè)類(lèi)的全名就可以參考這個(gè)類(lèi)。

Inheritance 繼承:繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特點(diǎn),它是一種處理方法,通過(guò)這一方法,一個(gè)對(duì)象可以獲得另一個(gè)對(duì)象的特征。

Inner classes 內(nèi)部類(lèi):內(nèi)部類(lèi)與一般的類(lèi)相似,只是它被聲明在類(lèi)的內(nèi)部,或者甚至某個(gè)類(lèi)方法體中。

Instance 實(shí)例:類(lèi)實(shí)例化以后成為一個(gè)對(duì)象。

Instance variable 實(shí)例變量:實(shí)例變量定義在對(duì)象一級(jí),它可以被類(lèi)中的任何方法或者其他類(lèi)的中方法訪問(wèn),但是不能被靜態(tài)方法訪問(wèn)。

Interface 接口:接口定義的是一組方法或者一個(gè)公共接口,它必須通過(guò)類(lèi)來(lái)實(shí)現(xiàn)。

Java source file Java源文件:Java源程序包含的是Java程序語(yǔ)言計(jì)算機(jī)指令。

Java Virtual Machine (JVM) Java虛擬機(jī):解釋和執(zhí)行Java字節(jié)碼的程序,其中Java字節(jié)碼由Java編譯器生成。

javac Java編譯器:Javac是Java編譯程序的名稱(chēng)。

JVM Java虛擬機(jī):見(jiàn)Java虛擬機(jī)

Keywords 關(guān)鍵字:即Java中的保留字,不能用作其他的標(biāo)識(shí)符。

Layout managers 布局管理器:布局管理器是一些用來(lái)負(fù)責(zé)處理容器中的組件布局排列的類(lèi)。

Local inner classes 局部?jī)?nèi)部類(lèi):在方法體中,或者甚至更小的語(yǔ)句塊中定義的內(nèi)部類(lèi)。

Local variable 局部變量:在方法體中聲明的變量

Member inner classes 成員內(nèi)部類(lèi):定義在封裝類(lèi)中的沒(méi)有指定static修飾符的內(nèi)部類(lèi)。

Members 成員:類(lèi)中的元素,包括方法和變量。

Method 方法:完成特定功能的一段源代碼,可以傳遞參數(shù)和返回結(jié)果,定義在類(lèi)中。

Method local variables 方法局部變量:見(jiàn)自動(dòng)變量Automatic variables

Modifier 修飾符:用來(lái)修飾類(lèi)、方法或者變量行為的關(guān)鍵字。

Native methods 本地方法:本地方法是指使用依賴(lài)平臺(tái)的語(yǔ)言編寫(xiě)的方法,它用來(lái)完成Java無(wú)法處理的某些依賴(lài)于平臺(tái)的功能。

Object 對(duì)象:一旦類(lèi)實(shí)例化之后就成為對(duì)象JAVA常見(jiàn)名詞解釋大全文章JAVA常見(jiàn)名詞解釋大全出自http://www.gkstk.com/article/wk-78500001155671.html,轉(zhuǎn)載請(qǐng)保留此鏈接!。

Overloaded methods 名稱(chēng)重載方法:方法的名稱(chēng)重載是指同一個(gè)類(lèi)中具有多個(gè)方法,使用相同的名稱(chēng)而只是其參數(shù)列表不同。

Overridden methods 覆蓋重載方法:方法的覆蓋重載是指父類(lèi)和子類(lèi)使用的方法采用同樣的名稱(chēng)、參數(shù)列表和返回類(lèi)型。

Package 包:包即是將一些類(lèi)聚集在一起的一個(gè)實(shí)體。

Parent class 父類(lèi):被其他類(lèi)繼承的類(lèi)。也見(jiàn)基類(lèi)。

Private members 私有成員:私有成員只能在當(dāng)前類(lèi)被訪問(wèn),其他任何類(lèi)都不可以訪問(wèn)之。

Public members 公共成員:公共成員可以被任何類(lèi)訪問(wèn),而不管該類(lèi)屬于那個(gè)包。

Runtime exceptions 運(yùn)行時(shí)間異常:運(yùn)行時(shí)間異常是一種不能被你自己的程序處理的異常。通常用來(lái)指示程序BUG。

Source file 源文件:源文件是包含你的Java代碼的一個(gè)純文本文件。

Stack trace 堆棧軌跡:如果你需要打印出某個(gè)時(shí)間的調(diào)用堆棧狀態(tài),你將產(chǎn)生一個(gè)堆棧軌跡。

Static inner classes 靜態(tài)內(nèi)部類(lèi):靜態(tài)內(nèi)部類(lèi)是內(nèi)部類(lèi)最簡(jiǎn)單的形式,它于一般的類(lèi)很相似,除了被定義在了某個(gè)類(lèi)的內(nèi)部。

Static methods 靜態(tài)方法:靜態(tài)方法聲明一個(gè)方法屬于整個(gè)類(lèi),即它可以不需要實(shí)例化一個(gè)類(lèi)就可以通過(guò)類(lèi)直接訪問(wèn)之。

Static variable 靜態(tài)變量:也可以稱(chēng)作類(lèi)變量。它類(lèi)似于靜態(tài)方法,也是可以不需要實(shí)例化類(lèi)就可以通過(guò)類(lèi)直接訪問(wèn)。

Superclass 超類(lèi):被一個(gè)或多個(gè)類(lèi)繼承的類(lèi)。

Synchronized methods 同步方法:同步方法是指明某個(gè)方法在某個(gè)時(shí)刻只能由一個(gè)線程訪問(wèn)。

Thread 線程:線程是一個(gè)程序內(nèi)部的順序控制流。

Time-slicing 時(shí)間片:調(diào)度安排線程執(zhí)行的一種方案。

Variable access 變量訪問(wèn)控制:變量訪問(wèn)控制是指某個(gè)類(lèi)讀或者改變一個(gè)其他類(lèi)中的變量的能力。

Visibility 可見(jiàn)性: 可見(jiàn)性體現(xiàn)了方法和實(shí)例變量對(duì)其他類(lèi)和包的訪問(wèn)控制。

容器:充當(dāng)中間件的角色。

WEB容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接更容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問(wèn)題。主要有WEB服務(wù)器來(lái)實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。

EJB容器:Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿(mǎn)足J2EE規(guī)范的EJB放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過(guò)現(xiàn)成的接口來(lái)獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。

WEB容器和EJB容器在原理上是大體相同的,更多的區(qū)別是被隔離的外界環(huán)境。

WEB容器更多的是跟基于HTTP的請(qǐng)求打交道。

而EJB容器不是。它是更多的跟數(shù)據(jù)庫(kù)、其它服務(wù)打交道。

但他們都是把與外界的交互實(shí)現(xiàn)從而減輕應(yīng)用程序的負(fù)擔(dān)。例如SERVLET不用關(guān)心HTTP的細(xì)節(jié),直接引用環(huán)境變量session,request,response就行、EJB不用關(guān)心數(shù)據(jù)庫(kù)連接速度、各種事務(wù)控制,直接由容器來(lái)完成。

RMI/IIOP:遠(yuǎn)程方法調(diào)用/internet對(duì)象請(qǐng)求中介協(xié)議,他們主要用于通過(guò)遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過(guò)一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。

JNDI:JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿(mǎn)足快速查找和定位分布式應(yīng)用程序的功能。

JMS:JAVA消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。

JAVAMAIL:JAVA郵件服務(wù)。提供郵件的存儲(chǔ)、傳輸功能。他是JAVA編程中實(shí)現(xiàn)郵件功能的核心。相當(dāng)MS中的EXCHANGE開(kāi)發(fā)包。

JTA:JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。

JAF:JAVA安全認(rèn)證框架提供一些安全控制方面的框架。讓開(kāi)發(fā)者通過(guò)各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。

EAI:企業(yè)應(yīng)用集成。是一種概念,從而牽涉到好多技術(shù)。J2EE技術(shù)是一種很好的集成實(shí)現(xiàn)。

其他縮寫(xiě)名詞:
DTO:Data Transport Object 數(shù)據(jù)傳輸對(duì)象
JDO:Java Data Object
DAO:Database Access Object 數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象
POJO:Proterozoic Java Object Java原生對(duì)象
VO:Value Object 值對(duì)象
SOAP:Simple Object Access Protocol 簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議

abstract schema name 抽象結(jié)構(gòu)名稱(chēng)
annotation 注釋
attribute 屬性
build 構(gòu)建
column 字段
constructor 構(gòu)造函數(shù)
delegate 委托
deployment descriptor 部署描述文件
detached 游離
distributed object 分布式對(duì)象
cagely fetch 立即獲取
EJB object ejb對(duì)象
element 元素
endpoint interface 端點(diǎn)接口
entity listener entity監(jiān)聽(tīng)器
field 數(shù)據(jù)成員
heuristic decision 試探性決策
loacl interface 本地接口
managed 托管
message destination 消息目標(biāo)地址
method 成員函數(shù)
modeling 建模
named 命名的
operator 操作符
partial XML deployment 部署描述片段
phantom read 幻讀
property 屬性
proxy 代理
relationship 關(guān)聯(lián)
remote interface 遠(yuǎn)程接口
response time 響應(yīng)時(shí)間
standalon application 獨(dú)立桌面應(yīng)用程序
stub 存根
transaction-aware 事務(wù)感知
transaction demarcation 事務(wù)劃分
transient property 瞬時(shí)屬性
undeploy 卸載
unqualified class name 非限定類(lèi)名
warpper type 封裝類(lèi)

J2EE平臺(tái)是由一整套服務(wù)(Services)、應(yīng)用程序接口(APIs)和協(xié)議構(gòu)成。

J2EE包括以下技術(shù):
EJB:Enterprise JavaBeans 企業(yè)JavaBean組件
IDL:Interface Definition Language 接口定義語(yǔ)言
JMS:Java Message Service Java消息服務(wù)
JNDI:Java Naming and Directory Interface Java命名目錄接口
RMI:Remote Method Invocation 遠(yuǎn)程方法調(diào)用
JTA:Java Transaction API Java事務(wù)API
JTS:Java Transaction Service Java事務(wù)服務(wù)
Object Serialization:對(duì)象序列化
JavaMail:Java郵件服務(wù)
JDBC:數(shù)據(jù)庫(kù)訪問(wèn)API
JSP:Java Server Pages

EJB分為三種:
Session Bean(會(huì)話(huà)BEAN)
Entity Bean(實(shí)體BEAN)
Message Driver Bean(消息驅(qū)動(dòng)BEAN)
Session Bean分為兩種:
Stateless Session Bean(無(wú)狀態(tài)會(huì)話(huà)Bean)
Statefull Session Bean(有狀態(tài)會(huì)話(huà)Bean)
Entity Bean分為兩種:
CMP:Container Manager Persistence(容器管理持久性)
BMP:Bean Manager Persistence(Bean管理持久性)
————————————————————————————————————————————————————————————————————————————————————

在Java中常說(shuō)某個(gè)包下面的某個(gè)類(lèi)。那么什么是包呢?在平時(shí)操作電腦時(shí),我們常江某個(gè)文檔,視頻,音頻等問(wèn)價(jià)放在某個(gè)文件夾下,而這個(gè)文件夾在Java中就就叫做包。其實(shí)飽和文件夾在某種意義上來(lái)說(shuō)是等同的,只是在Java中將其叫做包而不叫做文件夾。
類(lèi)
放在包下面的一個(gè)個(gè)并且是以.java結(jié)尾的文件就是類(lèi)。前面有說(shuō)道對(duì)想是Java程序的核心,而類(lèi)描述了對(duì)象的屬性和對(duì)象的行為,類(lèi)是對(duì)象模板【類(lèi)是對(duì)對(duì)象的抽象,對(duì)象是對(duì)類(lèi)的實(shí)例化】
類(lèi)按類(lèi)型分為普通類(lèi),抽象類(lèi),接口,嵌套類(lèi)等。按層級(jí)分又分為父類(lèi)和子類(lèi)。
普通類(lèi)
【訪問(wèn)修飾符】 class 類(lèi)名 【implements/extends 類(lèi)名】{ },其中有一種特殊的類(lèi)object類(lèi),object類(lèi)是所有類(lèi)的父類(lèi),如果一個(gè)類(lèi)沒(méi)有用extends明確指出繼承于某個(gè)類(lèi),那么它默認(rèn)繼承Object類(lèi)。
抽象類(lèi)
當(dāng)一個(gè)類(lèi)中沒(méi)有足夠的信息描述一個(gè)具體的書(shū)屋時(shí),這個(gè)類(lèi)就是抽象類(lèi)。
語(yǔ)法:【訪問(wèn)修飾符】 abstract class 類(lèi)名{ }
特點(diǎn):
1、抽象類(lèi)不能實(shí)例化
2、抽象類(lèi)可以擁有構(gòu)造方法
3、抽象類(lèi)可以聲明實(shí)例變量,也可以聲明靜態(tài)變量,也可以存在普通方法和靜態(tài)方法,變量在抽象類(lèi)中可以初始化
4、抽象類(lèi)中還可以有抽象方法 語(yǔ)法:【訪問(wèn)修飾符】 abstract 返回值類(lèi)型 方法名 (【參數(shù)】);
5、抽象類(lèi)抽象方法,有抽象類(lèi)的子類(lèi)來(lái)實(shí)現(xiàn)
6、如果一個(gè)類(lèi)是抽象類(lèi),那么這個(gè)類(lèi)的不一定有抽象方法,但如果一個(gè)類(lèi)有抽象方法,那么這個(gè)類(lèi)一定是抽象類(lèi)
7、如果抽象類(lèi)的子類(lèi)沒(méi)有吧抽象類(lèi)中的所有抽象方法實(shí)現(xiàn),則子類(lèi)也需要定義成抽象類(lèi),有子類(lèi)的子類(lèi)負(fù)責(zé)實(shí)現(xiàn)剩余的抽象方法。
8、普通方法在子類(lèi)中與普通類(lèi)一樣,可以實(shí)現(xiàn)也可以不實(shí)現(xiàn)。
接口
就是對(duì)外提供了一系列功能的生命(也可以說(shuō)接口中定義的方法只有方法的生命,沒(méi)有方法體)
語(yǔ)法:【訪問(wèn)修飾符】 interface 接口名 {  
    //常量和方法的聲明
}
1 public interface demo{
2 int i=0;
3 public void add() ;
4 }
特點(diǎn):
1、接口中聲明的方法沒(méi)有方法體,只有方法的聲明;
2、接口中聲明的成員屬性都是靜態(tài)的而且都是不可變的,因?yàn)榻涌谥械某蓡T屬性默認(rèn)都是public static final 來(lái)修飾的;
3、接口沒(méi)有構(gòu)造方法,也不能被實(shí)例化;
4、接口可以實(shí)現(xiàn)多繼承,接口之間用逗號(hào)隔開(kāi);
5、接口中的方法只能被public來(lái)修飾,就算沒(méi)有明確的神明訪問(wèn)修飾符,默認(rèn)也是public通過(guò)implements來(lái)實(shí)現(xiàn)接口,語(yǔ)法:【訪問(wèn)修飾符】 class 類(lèi)名 implements 接口1,接口2{ }。
嵌套類(lèi)
聲明在類(lèi)的內(nèi)部的類(lèi)稱(chēng)之為嵌套類(lèi)
語(yǔ)法:【訪問(wèn)修飾符】 class 類(lèi)名{
      【訪問(wèn)修飾符】【static】 class 類(lèi)名{
      }
  }
分類(lèi):內(nèi)部類(lèi):非靜態(tài)嵌套類(lèi);
   靜態(tài)嵌套類(lèi):用static修飾的嵌套類(lèi)。
內(nèi)部類(lèi):內(nèi)部類(lèi)作為外部類(lèi)的一個(gè)成員存在,與外部類(lèi)的成員變量,成員方法并列;
局部?jī)?nèi)部類(lèi):在方法體內(nèi)聲明的類(lèi),可以訪問(wèn)他所在方法中的final參數(shù)和final局部變量;
靜態(tài)嵌套類(lèi)中可聲明static成員或非靜態(tài)成員變量,但只能訪問(wèn)外部類(lèi)中的靜態(tài)成員。
方法
方法就是實(shí)現(xiàn)某個(gè)功能的代碼塊
方法的定義語(yǔ)法:
1、無(wú)返回值無(wú)參數(shù)的方法 【訪問(wèn)修飾符】 void 方法名(){ //方法的功能代碼 }
說(shuō)明:void就是表示該方法是無(wú)返回值得(也就是說(shuō)調(diào)用完該方法不會(huì)返回一個(gè)結(jié)果)
2、無(wú)返回值有參數(shù)的方法 【訪問(wèn)修飾符】 void 方法名(數(shù)據(jù)類(lèi)型 參數(shù)名,…){//方法的功能代碼}
說(shuō)明:方法中的參數(shù)又稱(chēng)為形參(形式意義的參數(shù)),調(diào)用該方法時(shí)傳遞的數(shù)據(jù)稱(chēng)為實(shí)參(實(shí)際的數(shù)據(jù)),傳遞的參數(shù)要和方法中的參數(shù)類(lèi)型匹配
3、有返回值無(wú)參數(shù)的方法 【訪問(wèn)修飾符】 返回值類(lèi)型 方法名稱(chēng)(){ return 返回值; }
說(shuō)明:1、返回值類(lèi)型有放回值來(lái)決定
2、在由返回值得方法的最后一句代碼,一定是 return 返回值;。
4、有返回值有參數(shù)的方法 【訪問(wèn)修飾符】 返回值類(lèi)型 方法名(參數(shù)列表){ return 返回值}
變量
定義:在Java中用來(lái)存儲(chǔ)數(shù)據(jù)的元素,而且該元素所存放的數(shù)據(jù)時(shí)可以變化的,所以稱(chēng)為變量
注意:變量也是標(biāo)識(shí)符的一部分
語(yǔ)法:1、變身名變賦值 數(shù)據(jù)類(lèi)型 變量名稱(chēng)=變量值
   2、先聲明后賦值 數(shù)據(jù)類(lèi)型 變量名稱(chēng);變量名稱(chēng)=變量值;
定義變量的四個(gè)步驟:
1、聲明數(shù)據(jù)類(lèi)型其實(shí)就是為了根據(jù)數(shù)據(jù)類(lèi)型開(kāi)辟相應(yīng)的內(nèi)存空間
2、給變量命名,其實(shí)就會(huì)說(shuō)為了能夠把變量名和數(shù)據(jù)類(lèi)型所對(duì)應(yīng)的內(nèi)存空間進(jìn)行關(guān)聯(lián)
3、給變量賦值,其實(shí)就是把數(shù)據(jù)存放到變量名所對(duì)應(yīng)的內(nèi)存空間
4、使用變量,其實(shí)就是把變量所對(duì)應(yīng)的內(nèi)存空間中的數(shù)據(jù)讀取出來(lái)
常量
定義:在程序中他的值是不可變的,這樣的冤死及時(shí)常量
語(yǔ)法:final 數(shù)據(jù)類(lèi)型 常量名稱(chēng)=常量值;
建議:常量名稱(chēng)一般全部大寫(xiě)
標(biāo)識(shí)符
標(biāo)識(shí)符就是類(lèi)名,方法名,參數(shù)名,包名等元素命名時(shí),所寫(xiě)的字符序列就統(tǒng)稱(chēng)為標(biāo)識(shí)符
標(biāo)識(shí)符的命名規(guī)則:
1、有字幕,數(shù)字,下劃線,和$組成
2、不能以數(shù)字開(kāi)頭
3、嚴(yán)格區(qū)分大小寫(xiě)
4、長(zhǎng)度無(wú)限制
5、不能是Java的關(guān)鍵字和保留關(guān)鍵字
建議:見(jiàn)名知意
訪問(wèn)修飾符
在定義類(lèi)、屬性、方法時(shí)都需要指定訪問(wèn)修飾符,以此來(lái)限定類(lèi)、屬性、方法的可訪問(wèn)范圍。Java中的訪問(wèn)修飾符有以下幾個(gè)關(guān)鍵字:
public:公共。該類(lèi)或非該類(lèi)均可訪問(wèn)
private:私有的。只有在類(lèi)的主體中才可以訪問(wèn)。只能修飾屬性和方法,不能修飾類(lèi)
protected:受保護(hù)。該類(lèi)及子類(lèi)的成員均可以訪問(wèn),同一個(gè)包中的類(lèi)也可以訪問(wèn)。只能修飾屬性和方法,不能修飾類(lèi)
默認(rèn):不使用修飾符。只有相同包中的類(lèi)才可以訪問(wèn)

位置private默認(rèn)protectedpublic同一個(gè)類(lèi)是同一個(gè)包內(nèi)的類(lèi)否是不同保內(nèi)的類(lèi)不同包內(nèi)不同類(lèi)
關(guān)鍵字
在Java中被賦予了一定特殊意義和用途的單詞保留關(guān)鍵字也是關(guān)鍵字,只是目前沒(méi)有任何的特殊意義和用途,保留使用。
this關(guān)鍵字
使用范圍:this關(guān)鍵字只能使用在沒(méi)有被static關(guān)鍵字修飾的方法中
作用:this關(guān)鍵字就會(huì)說(shuō)對(duì)當(dāng)類(lèi)某個(gè)對(duì)象的引用(簡(jiǎn)單來(lái)說(shuō)就是可以把this看做當(dāng)前類(lèi)的一個(gè)對(duì)象,哪個(gè)對(duì)象調(diào)用當(dāng)前的方法,this關(guān)鍵字就指向該對(duì)象)
【當(dāng)局部變量和成員變量完全一致時(shí),以局部變量為主,即就近原則】
用法:
1、當(dāng)方法中的參數(shù)名或變量名和成員變量完全一致時(shí),可以通過(guò)this關(guān)鍵字來(lái)區(qū)分作用域
2、當(dāng)this關(guān)鍵字以this(參數(shù)列表)的形式,出現(xiàn)在構(gòu)造方法的第一句時(shí),就表示當(dāng)前構(gòu)造方法調(diào)用了該類(lèi)中其他的構(gòu)造方法。
final關(guān)鍵字
1、final修飾的變量等同于常量,一旦賦值就無(wú)法更改(是指引用變量不能變,引用變量所指向的對(duì)象的內(nèi)容還是可以改變的)【final無(wú)論修飾全局變量還是局部變量,在定義時(shí)都必修要初始化才能使用】
2、final修飾方法中的參數(shù)稱(chēng)為最終參數(shù),在方法體中同樣也不能為最終參數(shù)重新賦值
3、final修飾類(lèi),該類(lèi)不能被繼承
4、final修飾的方法,不能被重寫(xiě)
staitic關(guān)鍵字
static可以修飾變量,方法,代碼塊
static修飾變量,也稱(chēng)為類(lèi)變量,因?yàn)閟tatic關(guān)鍵字修飾的變量,方法,代碼塊都屬于類(lèi),而不屬于某個(gè)對(duì)象
【實(shí)例變量:沒(méi)有被static修飾的成員屬性或方法都屬于某個(gè)對(duì)象,也叫做實(shí)例屬性或?qū)嵗椒ǎ瑢?duì)象存在了,才會(huì)有實(shí)例變量開(kāi)辟空間】
static修飾的屬相、方法可以通過(guò):類(lèi)名.屬性名或l類(lèi)名.方法(參數(shù))的形式來(lái)調(diào)用
特點(diǎn):
1、靜態(tài)方法中只能訪問(wèn)靜態(tài)方法和靜態(tài)的成員變量
2、在非靜態(tài)方法中,既可以訪問(wèn)非靜態(tài)的方法、屬性,也可以訪問(wèn)靜態(tài)屬性和靜態(tài)方法
3、在靜態(tài)方法中不能使用this和supper關(guān)鍵字,因?yàn)閠his和supper表示對(duì)對(duì)象的引用,而static修飾的方法是屬于類(lèi),所以在語(yǔ)法上存在一定的沖突
靜態(tài)代碼塊:靜態(tài)代碼塊只能出現(xiàn)在類(lèi)的內(nèi)部,任何方法的外部
靜態(tài)代碼塊語(yǔ)法:static{ }
靜態(tài)代碼塊作用:就是給靜態(tài)的成員屬性進(jìn)行初始化
靜態(tài)代碼塊的優(yōu)先級(jí)比構(gòu)造方法的優(yōu)先級(jí)高
方法中參數(shù)的傳遞
在Java中無(wú)論是基本數(shù)據(jù)類(lèi)型還是引用數(shù)據(jù)類(lèi)型,在進(jìn)行參數(shù)的傳遞時(shí),都是采用的值傳遞(也就是傳遞的都是具體的數(shù)據(jù))
基本數(shù)據(jù)類(lèi)型在進(jìn)行參數(shù)傳遞時(shí),傳遞的值是副本,也就是說(shuō)當(dāng)把當(dāng)前數(shù)據(jù)復(fù)制一份,然后再進(jìn)行穿絲,所以目標(biāo)方法中,對(duì)參數(shù)進(jìn)行修改,這個(gè)值得本身是沒(méi)有任何變化的。
引用數(shù)據(jù)類(lèi)型字進(jìn)行參數(shù)的傳遞時(shí),傳遞的是數(shù)據(jù)所在的內(nèi)存地址,所以在目標(biāo)方法中,對(duì)參數(shù)進(jìn)行修改,這個(gè)值本身也會(huì)發(fā)生相應(yīng)的變化。
向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:把一個(gè)子類(lèi)的對(duì)象,賦值給父類(lèi),就會(huì)把該對(duì)象當(dāng)做父類(lèi)對(duì)象來(lái)用
動(dòng)態(tài)(延遲)綁定機(jī)制:在程序運(yùn)行期間,會(huì)根據(jù)對(duì)象的真正的創(chuàng)建者來(lái)決定調(diào)用那個(gè)方法
發(fā)生動(dòng)態(tài)綁定機(jī)制的條件:
1、繼承
2、重寫(xiě)
3、向上轉(zhuǎn)型
4、用向上轉(zhuǎn)型的對(duì)象調(diào)用被子類(lèi)重寫(xiě)的方法
向下轉(zhuǎn)型:把一個(gè)父類(lèi)對(duì)象,復(fù)制給某個(gè)子類(lèi),需要加上強(qiáng)制轉(zhuǎn)換符,向下轉(zhuǎn)型一定是在向上轉(zhuǎn)型的基礎(chǔ)上類(lèi)型的還原,向下轉(zhuǎn)型調(diào)用子類(lèi)中的沒(méi)有重寫(xiě)的方法,可以通過(guò)instanceof關(guān)鍵字來(lái)判斷某個(gè)獨(dú)享是否屬于某各類(lèi)
————————————————————————————————————————————————————————————————————————————————————
1)類(lèi)與對(duì)象
類(lèi):生活中一些對(duì)象共同點(diǎn)的集合、主觀的、以人的意識(shí)存在的

對(duì)象:客觀存在的,類(lèi)的實(shí)體

2)面向?qū)ο?br> java是一門(mén)面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言,c是面向過(guò)程的開(kāi)發(fā)語(yǔ)言,兩種編程思想的不同:

生活中一件事 = 對(duì)象(執(zhí)行者) + 過(guò)程(執(zhí)行流程)

面向?qū)ο蟆P(guān)注對(duì)象(關(guān)注事情的執(zhí)行者) ->>結(jié)果不確定(靈活)
面向過(guò)程————關(guān)注過(guò)程(關(guān)注事情的執(zhí)行流程) ->>結(jié)果確定(死板)

面向?qū)ο笕筇匦裕豪^承性、多態(tài)性、封裝性

3)基本語(yǔ)法:
1.一個(gè)類(lèi)對(duì)應(yīng)一個(gè)java文件
2.屬性(特征)的定義格式:訪問(wèn)權(quán)限 類(lèi)型 屬性名;
3.方法(行為)的定義格式:訪問(wèn)權(quán)限 返回類(lèi)型 方法名(參數(shù)列表){}
4.創(chuàng)建對(duì)象的格式:類(lèi)名 對(duì)象名 = new 類(lèi)名();
5.調(diào)用屬性:對(duì)象名.屬性名
6.調(diào)用方法:對(duì)象名.方法名(參數(shù))

7.程序入口:public static void main(String[] args){}

代碼示例1.1:
[圖片上傳中...(image.png-6515f5-1559722384053-0)]


image.png

運(yùn)行結(jié)果:


image.png

對(duì)于JButton一個(gè)有參,一個(gè)無(wú)參
同時(shí)這也是構(gòu)造函數(shù)的重載,關(guān)于JButton的構(gòu)造函數(shù)重載,可由API查得
image.png

6)繼承(子類(lèi)和父類(lèi))
關(guān)鍵字:extends
定義:子類(lèi)可以繼承父類(lèi)的所有非私有屬性和方法,子類(lèi)可以有額外的屬性和方法
作用:動(dòng)態(tài)的拓展類(lèi)的功能,一般情況下子類(lèi)比父類(lèi)更強(qiáng)大
代碼舉例:


image.png

image.png

image.png

8)轉(zhuǎn)型:父類(lèi)引用指向子類(lèi)引用
定義:無(wú)論是上轉(zhuǎn)還是下轉(zhuǎn)都是為了讓類(lèi)的使用范圍和適用范圍發(fā)生變化,以便操作不同范圍的變量或者方法。
1)上轉(zhuǎn)型是指將子類(lèi)對(duì)象使用父類(lèi)引用進(jìn)行引用。通俗地說(shuō)就是是將子類(lèi)對(duì)象轉(zhuǎn)為父類(lèi)對(duì)象。
得:上轉(zhuǎn)型對(duì)象可以操作和使用子類(lèi)繼承或者重寫(xiě)的方法。
失:上轉(zhuǎn)型對(duì)象喪失了對(duì)子類(lèi)新增成員變量或新增的方法的操作和使用。
2)與向上轉(zhuǎn)型相反,即是把父類(lèi)對(duì)象轉(zhuǎn)為子類(lèi)對(duì)象:作用也與上轉(zhuǎn)相反。向下轉(zhuǎn)型需要用到強(qiáng)制類(lèi)型轉(zhuǎn)換。

向上轉(zhuǎn)型代碼舉例:
若把上面代碼的主函數(shù)部分改成


image.png

9)多態(tài)
定義:指允許不同類(lèi)的對(duì)象對(duì)同一消息做出響應(yīng)。即同一消息可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)
作用:消除類(lèi)型之間的耦合關(guān)系。
理解:現(xiàn)實(shí)中多態(tài)的舉例有很多,如果當(dāng)前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果當(dāng)前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支持。同一個(gè)事件發(fā)生在不同的對(duì)象上會(huì)產(chǎn)生不同的結(jié)果。
多態(tài)存在的三個(gè)必要條件
1)要有繼承
2)要有重寫(xiě)
3)父類(lèi)引用指向子類(lèi)對(duì)象
多態(tài)的好處:

1.可替換性。多態(tài)對(duì)已存在代碼具有可替換性。例如,多態(tài)對(duì)圓Circle類(lèi)工作,對(duì)其他任何圓形幾何體,如圓環(huán),也同樣工作。
2.可擴(kuò)充性。多態(tài)對(duì)代碼具有可擴(kuò)充性。增加新的子類(lèi)不影響已存在類(lèi)的多態(tài)性、繼承性,以及其他特性的運(yùn)行和操作。實(shí)際上新加子類(lèi)更容易獲得多態(tài)功能。例如,在實(shí)現(xiàn)了圓錐、半圓錐以及半球體的多態(tài)基礎(chǔ)上,很容易增添球體類(lèi)的多態(tài)性。
3.接口性。多態(tài)是超類(lèi)通過(guò)方法簽名,向子類(lèi)提供了一個(gè)共同接口,由子類(lèi)來(lái)完善或者覆蓋它而實(shí)現(xiàn)的。
4.靈活性。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。
5.簡(jiǎn)化性。多態(tài)簡(jiǎn)化對(duì)應(yīng)用軟件的代碼編寫(xiě)和修改過(guò)程,尤其在處理大量對(duì)象的運(yùn)算和操作時(shí),這個(gè)特點(diǎn)尤為突出和重要。

關(guān)于多態(tài)的一個(gè)練習(xí):


image.png

image.png

image.png

10)當(dāng)前類(lèi)對(duì)象this
理解:代碼執(zhí)行前,或沒(méi)執(zhí)行到之前,this是沒(méi)有指向的,執(zhí)行時(shí),指回當(dāng)前對(duì)象,如果類(lèi)有屬性,this.XXX就是指這個(gè)類(lèi)的xxx屬性,有方法的,this.xx().就是指這個(gè)類(lèi)的xx()方法。
理解舉例:


image.png

image.png

文章轉(zhuǎn)載于https://blog.csdn.net/Coder_Chang/article/details/51532374

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 整理來(lái)自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工具...
    Ncompass閱讀 1,616評(píng)論 0 6
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 一:java概述: 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)...
    慕容小偉閱讀 1,936評(píng)論 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,800評(píng)論 0 11
  • 1.import static是Java 5增加的功能,就是將Import類(lèi)中的靜態(tài)方法,可以作為本類(lèi)的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,419評(píng)論 0 2

友情鏈接更多精彩內(nèi)容