久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

JavaEE框架總結(jié)(推薦5篇)

時(shí)間:2019-05-14 23:08:20下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《JavaEE框架總結(jié)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《JavaEE框架總結(jié)》。

第一篇:JavaEE框架總結(jié)

JavaEE框架總結(jié)

框架是什么?

框架是半成品,它把程序員需要寫可以重用的代碼封裝起來(lái)。學(xué)習(xí)框架重點(diǎn)學(xué)習(xí)什么?

重點(diǎn)學(xué)習(xí)工作原理、明白整個(gè)工作流程;明白工作流程中哪些是框架自動(dòng)生成的、哪些需要程序員自己寫的;明確該框架適用于什么場(chǎng)合;

1.三層架構(gòu)

軟件的架構(gòu)可以分為:表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。

2.MVC架構(gòu)

MVC架構(gòu)分為:控制層(Controller)、模型層(Model)和視圖層(View)。

Http RequestController(控制層)接受請(qǐng)求轉(zhuǎn)發(fā)請(qǐng)求委托模型層進(jìn)行數(shù)據(jù)處理Model(模型層)處理請(qǐng)求返回結(jié)果瀏覽器Http Response返回結(jié)果視圖渲染JSTLView(視圖層)接受請(qǐng)求轉(zhuǎn)發(fā)請(qǐng)求 3.Struts2框架

(1)該框架中程序員都需要寫什么? 配置:web.xml、struts.xml文件。編寫Action類和結(jié)果視圖(如jsp)。(2)Struts2用來(lái)干什么: 核心功能:MVC控制器。

擴(kuò)展功能:struts標(biāo)簽庫(kù)(view);集成dwr,來(lái)實(shí)現(xiàn)Ajax的功能;國(guó)際化。

4.Spring框架:

(1)Spring的核心功能:

AOP(面向切面編程):將公共的功能抽取出來(lái)(如轉(zhuǎn)賬時(shí)的權(quán)限驗(yàn)證、環(huán)境驗(yàn)證)。IOC(控制反轉(zhuǎn),DI依賴注入):通過xml或注解的方式獲取類(對(duì)象)、給屬性賦值。由Spring容器控制對(duì)象的生命周期(創(chuàng)建、初始化、銷毀);該創(chuàng)建對(duì)象的方式解決了上層需要new下層的對(duì)象的問題,實(shí)現(xiàn)層與層之間的解耦。(2)Spring IOC工作原理圖:

目標(biāo)類package com.itheima11.helloworld;public class HelloWorld {public void hello(){System.out.println(“hello world”);}}ApplicationContext.xml文件測(cè)試類public class HelloWorldTest {@Testpublic void testHelloWorld(){//啟動(dòng)spring容器ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);//從spring容器中把對(duì)象提取出來(lái)HelloWorld helloWorld =(HelloWorld)context.getBean(“helloWorld”);helloWorld.hello();}} Spring IOC工作原理圖

(3)Spring AOP工作原理圖: 目標(biāo)接口public interface PersonDao {public void savePerson();}切面public class Transaction {public void beginTransaction(){System.out.println(“begin transaction”);}public void commit(){System.out.println(“commit”);}}目標(biāo)類public class PersonDaoImpl implements PersonDao{public void savePerson(){System.out.println(“save person”);}}applicationContext.xml文件 測(cè)試類public class PersonDaoTest {@Testpublic void testSpring(){ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);PersonDao personDao =(PersonDao)context.getBean(“personDao”);personDao.savePerson();}} Spring AOP工作原理一

目標(biāo)接口public interface PersonDao {public void savePerson();}切面類public class Transaction {public void beginTransaction(){System.out.println(“begin transaction”);}public void commit(){System.out.println(“commit”);}}目標(biāo)類public class PersonDaoImpl implements PersonDao{public void savePerson(){System.out.println(“save person”);}}代理類public class PersonDaoProxy implements PersonDao{private PersonDao personDao;private Transaction transaction;public PersonDaoProxy(PersonDao personDao,Transaction transaction){this.personDao = personDao;this.transaction = transaction;}public void savePerson(){this.transaction.beginTransaction();this.personDao.savePerson();this.transaction.commit();}}測(cè)試類public class ProxyTest {@Testpublic void testProxy(){PersonDao personDao = new PersonDaoImpl();Transaction transaction = new Transaction();PersonDaoProxy proxy = new PersonDaoProxy(personDao, transaction);proxy.savePerson();}} Spring AOP工作原理二 5.Hibernate框架:

持久層框架(還有JPA/JDO/MyBatis/toplink)

應(yīng)用程序Configuration配置文件映射文件SessionFactory獲取Session數(shù)據(jù)操作回滾操作異常事務(wù)關(guān)閉Session正常提交數(shù)據(jù)庫(kù) Hibernate框架執(zhí)行流程

Hibernate映射文件:Person.hbm.xml

數(shù)據(jù)表create database day22;use day22;create table PERSONS(ID int primary key auto_increment,NAME varchar(255));Hibernate配置文件:hibernate.cfg.xml

com.mysql.jdbc.Driver

root

admin

jdbc:mysql://localhost:3306/day22

org.hibernate.dialect.MySQLDialectHibernate工具類public class HibernateUtil {private static SessionFactory sessionFactory;static {Configuration cfg = new Configuration().configure();sessionFactory = cfg.buildSessionFactory();}public static Session getSession(){return sessionFactory.openSession();}}實(shí)體類public class Person implements Serializable {private Integer id;private String name;Set/get}測(cè)試類public class CRUDDemo {@Testpublic void testAdd(){Person p = new Person();p.setId(1);p.setName(“楊洋”);Session s = HibernateUtil.getSession();Transaction tx = s.beginTransaction();s.save(p);tx.commit();s.close();}} Hibernate程序結(jié)構(gòu) 需要配置的文件:配置文件、映射文件。

需要開發(fā)的程序:實(shí)體類、工具類、測(cè)試類、數(shù)據(jù)表。

6.SpringMVC框架

7.MyBatis框架

第二篇:JAVAEE基礎(chǔ)總結(jié)(showdy)

Java基礎(chǔ)知識(shí)總結(jié)(超級(jí)經(jīng)典)

寫代碼:

1,明確需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。

3,確定步驟。每一個(gè)思路部分用到哪些語(yǔ)句,方法,和對(duì)象。4,代碼實(shí)現(xiàn)。用具體的java語(yǔ)言代碼把思路體現(xiàn)出來(lái)。

學(xué)習(xí)新技術(shù)的四點(diǎn): 1,該技術(shù)是什么?

2,該技術(shù)有什么特點(diǎn)(使用注意): 3,該技術(shù)怎么使用。demo 4,該技術(shù)什么時(shí)候用?test。

--一:java概述:

1991 年Sun公司的James Gosling等人開始開發(fā)名稱為 Oak 的語(yǔ)言,希望用于控制嵌入在有線電視交換盒、PDA等的微處理器;

1994年將Oak語(yǔ)言更名為Java; DOS命令(掌握): DOS:磁盤操作系統(tǒng)。

DOS命令:是DOS操作系統(tǒng)的命令,是一種面向磁盤的操作命令,主要包括目錄操作類命令、磁盤操作類命令、文件操作類命令和其它命令。

DOS命令行:運(yùn)行Dos命令的窗口。

A:盤符切換: d: 回車

/ 105

B:cd命令

cd 目錄 進(jìn)入指定的單級(jí)目錄

cd d:目錄1目錄2...進(jìn)入指定的多級(jí)目錄 cd..回退上一級(jí)目錄

cd 回到當(dāng)前所在盤符的根目錄

C:cls 清屏

Exit 退出

Java的三種技術(shù)架構(gòu): JAVAEE:Java Platform Enterprise Edition,開發(fā)企業(yè)環(huán)境下的應(yīng)用程序,主要針對(duì)web程序開發(fā); JAVASE:Java Platform Standard Edition,完成桌面應(yīng)用程序的開發(fā),是其它兩者的基礎(chǔ); JAVAME:Java Platform Micro Edition,開發(fā)電子消費(fèi)產(chǎn)品和嵌入式設(shè)備,如手機(jī)中的程序;

1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工具和jre。

2,JRE:Java Runtime Environment,java程序的運(yùn)行環(huán)境,java運(yùn)行的所需的類庫(kù)+JVM(java虛擬機(jī))。3,配置環(huán)境變量:讓java jdkbin目錄下的工具,可以在任意目錄下運(yùn)行,原因是,將該工具所在目錄告訴了系統(tǒng),當(dāng)使用該工具時(shí),由系統(tǒng)幫我們?nèi)フ抑付ǖ哪夸?。環(huán)境變量的配置:

1):永久配置方式:JAVA_HOME=%安裝路徑%Javajdk path=%JAVA_HOME%bin 2):臨時(shí)配置方式:set path=%path%;C:Program FilesJavajdkbin 特點(diǎn):系統(tǒng)默認(rèn)先去當(dāng)前路徑下找要執(zhí)行的程序,如果沒有,再去path中設(shè)置的路徑下找。

classpath的配置: 1):永久配置方式:classpath=.;c:;e:

2):臨時(shí)配置方式:set classpath=.;c:;e:

/ 105

注意:在定義classpath環(huán)境變量時(shí),需要注意的情況

如果沒有定義環(huán)境變量classpath,java啟動(dòng)jvm后,會(huì)在當(dāng)前目錄下查找要運(yùn)行的類文件; 如果指定了classpath,那么會(huì)在指定的目錄下查找要運(yùn)行的類文件。還會(huì)在當(dāng)前目錄找嗎??jī)煞N情況:

4,javac命令和java命令做什么事情呢?

要知道java是分兩部分的:一個(gè)是編譯,一個(gè)是運(yùn)行。

javac:負(fù)責(zé)的是編譯的部分,當(dāng)執(zhí)行javac時(shí),會(huì)啟動(dòng)java的編譯器程序。對(duì)指定擴(kuò)展名的.java文件進(jìn)1):如果classpath的值結(jié)尾處有分號(hào),在具體路徑中沒有找到運(yùn)行的類,會(huì)默認(rèn)在當(dāng)前目錄再找一次。2):如果classpath的值結(jié)果出沒有分號(hào),在具體的路徑中沒有找到運(yùn)行的類,不會(huì)再當(dāng)前目錄找。一般不指定分號(hào),如果沒有在指定目錄下找到要運(yùn)行的類文件,就報(bào)錯(cuò),這樣可以調(diào)試程序。

行編譯。生成了jvm可以識(shí)別的字節(jié)碼文件。也就是class文件,也就是java的運(yùn)行程序。

java:負(fù)責(zé)運(yùn)行的部分.會(huì)啟動(dòng)jvm.加載運(yùn)行時(shí)所需的類庫(kù),并對(duì)class文件進(jìn)行執(zhí)行.一個(gè)文件要被執(zhí)行,必須要有一個(gè)執(zhí)行的起始點(diǎn),這個(gè)起始點(diǎn)就是main函數(shù).運(yùn)算符號(hào):

1)、算術(shù)運(yùn)算符。

+b;b = 3;a = a1;

if(max

return-1;

mid =(max+min)>>1;}

/ 105

return mid;}--------------------------java分了5片內(nèi)存。

1:寄存器。2:本地方法區(qū)。3:方法區(qū)。4:棧。5:堆。

棧:存儲(chǔ)的都是局部變量(函數(shù)中定義的變量,函數(shù)上的參數(shù),語(yǔ)句中的變量); 只要數(shù)據(jù)運(yùn)算完成所在的區(qū)域結(jié)束,該數(shù)據(jù)就會(huì)被釋放。

堆:用于存儲(chǔ)數(shù)組和對(duì)象,也就是實(shí)體。啥是實(shí)體???就是用于封裝多個(gè)數(shù)據(jù)的。

1:每一個(gè)實(shí)體都有內(nèi)存首地址值。

2:堆內(nèi)存中的變量都有默認(rèn)初始化值。因?yàn)閿?shù)據(jù)類型不同,值也不一樣。3:垃圾回收機(jī)制。

-三:面向?qū)ο螅骸铩铩铩铩?/p>

特點(diǎn):1:將復(fù)雜的事情簡(jiǎn)單化。

2:面向?qū)ο髮⒁郧暗倪^程中的執(zhí)行者,變成了指揮者。3:面向?qū)ο筮@種思想是符合現(xiàn)在人們思考習(xí)慣的一種思想。

過程和對(duì)象在我們的程序中是如何體現(xiàn)的呢?過程其實(shí)就是函數(shù);對(duì)象是將函數(shù)等一些內(nèi)容進(jìn)行了封裝。

匿名對(duì)象使用場(chǎng)景:

1:當(dāng)對(duì)方法只進(jìn)行一次調(diào)用的時(shí)候,可以使用匿名對(duì)象。如:new Person().age = 17;//使用一次之后就被銷毀了。

2:當(dāng)對(duì)象對(duì)成員進(jìn)行多次調(diào)用時(shí),不能使用匿名對(duì)象。必須給對(duì)象起名字。

3.可作為實(shí)際參數(shù)進(jìn)行傳遞;只在堆里面開辟存儲(chǔ)區(qū)域, 如:method(new Person());

在類中定義其實(shí)都稱之為成員。成員有兩種: 1:成員變量:其實(shí)對(duì)應(yīng)的就是事物的屬性。

/ 105

2:成員函數(shù):其實(shí)對(duì)應(yīng)的就是事物的行為。

所以,其實(shí)定義類,就是在定義成員變量和成員函數(shù)。但是在定義前,必須先要對(duì)事物進(jìn)行屬性和行為的分析,才可以用代碼來(lái)體現(xiàn)。

private int age;//私有的訪問權(quán)限最低,只有在本類中的訪問有效。注意:私有僅僅是封裝的一種體現(xiàn)形式而已。

私有的成員:其他類不能直接創(chuàng)建對(duì)象訪問,所以只有通過本類對(duì)外提供具體的訪問方式來(lái)完成對(duì)私有的訪問,可以通過對(duì)外提供函數(shù)的形式對(duì)其進(jìn)行訪問。

好處:可以在函數(shù)中加入邏輯判斷等操作,對(duì)數(shù)據(jù)進(jìn)行判斷等操作。

總結(jié):開發(fā)時(shí),記住,屬性是用于存儲(chǔ)數(shù)據(jù)的,直接被訪問,容易出現(xiàn)安全隱患,所以,類中的屬性通常被私有化,并對(duì)外提供公共的訪問方法。

這個(gè)方法一般有兩個(gè),規(guī)范寫法:對(duì)于屬性 xxx,可以使用setXXX(),getXXX()對(duì)其進(jìn)行操作。

類中怎么沒有定義主函數(shù)呢?

注意:主函數(shù)的存在,僅為該類是否需要獨(dú)立運(yùn)行,如果不需要,主函數(shù)是不用定義的。主函數(shù)的解釋:保證所在類的獨(dú)立運(yùn)行,是程序的入口,被jvm調(diào)用。

成員變量和局部變量的區(qū)別:

1:成員變量直接定義在類中。

局部變量定義在方法中,參數(shù)上,語(yǔ)句中。2:成員變量在這個(gè)類中有效。

局部變量只在自己所屬的大括號(hào)內(nèi)有效,大括號(hào)結(jié)束,局部變量失去作用域。3:成員變量存在于堆內(nèi)存中,隨著對(duì)象的產(chǎn)生而存在,消失而消失。局部變量存在于棧內(nèi)存中,隨著所屬區(qū)域的運(yùn)行而存在,結(jié)束而釋放。

/ 105

構(gòu)造函數(shù):用于給對(duì)象進(jìn)行初始化,是給與之對(duì)應(yīng)的對(duì)象進(jìn)行初始化,它具有針對(duì)性,函數(shù)中的一種。特點(diǎn):

1:該函數(shù)的名稱和所在類的名稱相同。2:不需要定義返回值類型。3:該函數(shù)沒有具體的返回值。

記?。核袑?duì)象創(chuàng)建時(shí),都需要初始化才可以使用。

注意事項(xiàng):一個(gè)類在定義時(shí),如果沒有定義過構(gòu)造函數(shù),那么該類中會(huì)自動(dòng)生成一個(gè)空參數(shù)的構(gòu)造函數(shù),為了方便該類創(chuàng)建對(duì)象,完成初始化。如果在類中自定義了構(gòu)造函數(shù),那么默認(rèn)的構(gòu)造函數(shù)就沒有了。

一個(gè)類中,可以有多個(gè)構(gòu)造函數(shù),因?yàn)樗鼈兊暮瘮?shù)名稱都相同,所以只能通過參數(shù)列表來(lái)區(qū)分。所以,一個(gè)類中如果出現(xiàn)多個(gè)構(gòu)造函數(shù)。它們的存在是以重載體現(xiàn)的。

構(gòu)造函數(shù)和一般函數(shù)有什么區(qū)別呢? 1:兩個(gè)函數(shù)定義格式不同。

2:構(gòu)造函數(shù)是在對(duì)象創(chuàng)建時(shí),就被調(diào)用,用于初始化,而且初始化動(dòng)作只執(zhí)行一次。

一般函數(shù),是對(duì)象創(chuàng)建后,需要調(diào)用才執(zhí)行,可以被調(diào)用多次。

什么時(shí)候使用構(gòu)造函數(shù)呢?

分析事物時(shí),發(fā)現(xiàn)具體事物一出現(xiàn),就具備了一些特征,那就將這些特征定義到構(gòu)造函數(shù)內(nèi)。

構(gòu)造代碼塊和構(gòu)造函數(shù)有什么區(qū)別?

構(gòu)造代碼塊:是給所有的對(duì)象進(jìn)行初始化,也就是說(shuō),所有的對(duì)象都會(huì)調(diào)用一個(gè)代碼塊。只要對(duì)象一建立。就會(huì)調(diào)用這個(gè)代碼塊。

構(gòu)造函數(shù):是給與之對(duì)應(yīng)的對(duì)象進(jìn)行初始化。它具有針對(duì)性。

/ 105

Person p = new Person();創(chuàng)建一個(gè)對(duì)象都在內(nèi)存中做了什么事情?

1:先將硬盤上指定位置的Person.class文件加載進(jìn)內(nèi)存。

2:執(zhí)行main方法時(shí),在棧內(nèi)存中開辟了main方法的空間(壓棧-進(jìn)棧),然后在main方法的棧區(qū)分配了一個(gè)變量p。

3:在堆內(nèi)存中開辟一個(gè)實(shí)體空間,分配了一個(gè)內(nèi)存首地址值。new 4:在該實(shí)體空間中進(jìn)行屬性的空間分配,并進(jìn)行了默認(rèn)初始化。5:對(duì)空間中的屬性進(jìn)行顯示初始化。6:進(jìn)行實(shí)體的構(gòu)造代碼塊初始化。

7:調(diào)用該實(shí)體對(duì)應(yīng)的構(gòu)造函數(shù),進(jìn)行構(gòu)造函數(shù)初始化。()8:將首地址賦值給p,p變量就引用了該實(shí)體。(指向了該對(duì)象)------------------------------封 裝(面向?qū)ο筇卣髦唬菏侵鸽[藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式。

好處:將變化隔離;便于使用;提高重用性;安全性。

封裝原則:將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái),把屬性都隱藏,提供公共方法對(duì)其訪問。

this:代表對(duì)象。就是所在函數(shù)所屬對(duì)象的引用。

this到底代表什么呢?哪個(gè)對(duì)象調(diào)用了this所在的函數(shù),this就代表哪個(gè)對(duì)象,就是哪個(gè)對(duì)象的引用。開發(fā)時(shí),什么時(shí)候使用this呢?

在定義功能時(shí),如果該功能內(nèi)部使用到了調(diào)用該功能的對(duì)象,這時(shí)就用this來(lái)表示這個(gè)對(duì)象。

this 還可以用于構(gòu)造函數(shù)間的調(diào)用。調(diào)用格式:this(實(shí)際參數(shù));

this對(duì)象后面跟上.調(diào)用的是成員屬性和成員方法(一般方法); this對(duì)象后面跟上()調(diào)用的是本類中的對(duì)應(yīng)參數(shù)的構(gòu)造函數(shù)。

/ 105

注意:用this調(diào)用構(gòu)造函數(shù),必須定義在構(gòu)造函數(shù)的第一行。因?yàn)闃?gòu)造函數(shù)是用于初始化的,所以初始化動(dòng)作一定要執(zhí)行。否則編譯失敗。

static:★★★ 關(guān)鍵字,是一個(gè)修飾符,用于修飾成員(成員變量和成員函數(shù))。

特點(diǎn):

1,想要實(shí)現(xiàn)對(duì)象中的共性數(shù)據(jù)的對(duì)象共享。可以將這個(gè)數(shù)據(jù)進(jìn)行靜態(tài)修飾。

2,被靜態(tài)修飾的成員,可以直接被類名所調(diào)用。也就是說(shuō),靜態(tài)的成員多了一種調(diào)用方式。類名.靜態(tài)方式。3,靜態(tài)隨著類的加載而加載。而且優(yōu)先于對(duì)象存在。

弊端:

1,有些數(shù)據(jù)是對(duì)象特有的數(shù)據(jù),是不可以被靜態(tài)修飾的。因?yàn)槟菢拥脑挘赜袛?shù)據(jù)會(huì)變成對(duì)象的共享數(shù)據(jù)。這樣對(duì)事物的描述就出了問題。所以,在定義靜態(tài)時(shí),必須要明確,這個(gè)數(shù)據(jù)是否是被對(duì)象所共享的。2,靜態(tài)方法只能訪問靜態(tài)成員,不可以訪問非靜態(tài)成員。

因?yàn)殪o態(tài)方法加載時(shí),優(yōu)先于對(duì)象存在,所以沒有辦法訪問對(duì)象中的成員。3,靜態(tài)方法中不能使用this,super關(guān)鍵字。

因?yàn)閠his代表對(duì)象,而靜態(tài)在時(shí),有可能沒有對(duì)象,所以this無(wú)法使用。4,主函數(shù)是靜態(tài)的。

什么時(shí)候定義靜態(tài)成員呢?或者說(shuō):定義成員時(shí),到底需不需要被靜態(tài)修飾呢? 成員分兩種:

1,成員變量。(數(shù)據(jù)共享時(shí)靜態(tài)化)該成員變量的數(shù)據(jù)是否是所有對(duì)象都一樣:

如果是,那么該變量需要被靜態(tài)修飾,因?yàn)槭枪蚕淼臄?shù)據(jù)。如果不是,那么就說(shuō)這是對(duì)象的特有數(shù)據(jù),要存儲(chǔ)到對(duì)象中。2,成員函數(shù)。(方法中沒有調(diào)用特有數(shù)據(jù)時(shí)就定義成靜態(tài))

/ 105

如果判斷成員函數(shù)是否需要被靜態(tài)修飾呢? 只要參考,該函數(shù)內(nèi)是否訪問了對(duì)象中的特有數(shù)據(jù): 如果有訪問特有數(shù)據(jù),那方法不能被靜態(tài)修飾。

如果沒有訪問過特有數(shù)據(jù),那么這個(gè)方法需要被靜態(tài)修飾。

成員變量和靜態(tài)變量的區(qū)別:

1,成員變量所屬于對(duì)象。所以也稱為實(shí)例變量。靜態(tài)變量所屬于類。所以也稱為類變量。2,成員變量存在于堆內(nèi)存中。靜態(tài)變量存在于方法區(qū)中。

3,成員變量隨著對(duì)象創(chuàng)建而存在。隨著對(duì)象被回收而消失。靜態(tài)變量隨著類的加載而存在。隨著類的消失而消失。4,成員變量只能被對(duì)象所調(diào)用。

靜態(tài)變量可以被對(duì)象調(diào)用,也可以被類名調(diào)用。

所以,成員變量可以稱為對(duì)象的特有數(shù)據(jù),靜態(tài)變量稱為對(duì)象的共享數(shù)據(jù)。

靜態(tài)的注意:靜態(tài)的生命周期很長(zhǎng)。

靜態(tài)代碼塊:就是一個(gè)有靜態(tài)關(guān)鍵字標(biāo)示的一個(gè)代碼塊區(qū)域。定義在類中。

作用:可以完成類的初始化。靜態(tài)代碼塊隨著類的加載而執(zhí)行,而且只執(zhí)行一次(new 多個(gè)對(duì)象就只執(zhí)行一次)。如果和主函數(shù)在同一類中,優(yōu)先于主函數(shù)執(zhí)行。

Public:訪問權(quán)限最大。

static:不需要對(duì)象,直接類名即可。void:主函數(shù)沒有返回值。Main:主函數(shù)特定的名稱。

/ 105

(String[] args):主函數(shù)的參數(shù),是一個(gè)字符串?dāng)?shù)組類型的參數(shù),jvm調(diào)用main方法時(shí),傳遞的實(shí)際參數(shù)是 new String[0]。

jvm默認(rèn)傳遞的是長(zhǎng)度為0的字符串?dāng)?shù)組,我們?cè)谶\(yùn)行該類時(shí),也可以指定具體的參數(shù)進(jìn)行傳遞??梢栽诳刂婆_(tái),運(yùn)行該類時(shí),在后面加入?yún)?shù)。參數(shù)之間通過空格隔開。jvm會(huì)自動(dòng)將這些字符串參數(shù)作為args數(shù)組中的元素,進(jìn)行存儲(chǔ)。

靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)同時(shí)存在時(shí)的執(zhí)行順序:靜態(tài)代碼塊 ? 構(gòu)造代碼塊 ? 構(gòu)造函數(shù);

生成Java幫助文檔:命令格式:javadoc –d 文件夾名 –auther –version *.java

/** //格式 *類描述 *@author 作者名 *@version 版本號(hào) */ /** *方法描述 *@param 參數(shù)描述 *@return 返回值描述

*/ 設(shè)計(jì)模式:解決問題最行之有效的思想。是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

java中有23種設(shè)計(jì)模式:

單例設(shè)計(jì)模式:★★★★★

解決的問題:保證一個(gè)類在內(nèi)存中的對(duì)象唯一性。

比如:多程序讀取一個(gè)配置文件時(shí),建議配置文件封裝成對(duì)象。會(huì)方便操作其中數(shù)據(jù),又要保證多個(gè)程序讀到的 17 / 105

是同一個(gè)配置文件對(duì)象,就需要該配置文件對(duì)象在內(nèi)存中是唯一的。

Runtime()方法就是單例設(shè)計(jì)模式進(jìn)行設(shè)計(jì)的。

如何保證對(duì)象唯一性呢? 思想:

1,不讓其他程序創(chuàng)建該類對(duì)象。2,在本類中創(chuàng)建一個(gè)本類對(duì)象。

3,對(duì)外提供方法,讓其他程序獲取這個(gè)對(duì)象。

步驟:

1,因?yàn)閯?chuàng)建對(duì)象都需要構(gòu)造函數(shù)初始化,只要將本類中的構(gòu)造函數(shù)私有化,其他程序就無(wú)法再創(chuàng)建該類對(duì)象; 2,就在類中創(chuàng)建一個(gè)本類的對(duì)象;

3,定義一個(gè)方法,返回該對(duì)象,讓其他程序可以通過方法就得到本類對(duì)象。(作用:可控)

代碼體現(xiàn):

1,私有化構(gòu)造函數(shù);

2,創(chuàng)建私有并靜態(tài)的本類對(duì)象; 3,定義公有并靜態(tài)的方法,返回該對(duì)象。--------------//餓漢式 class Single{ private Single(){} //私有化構(gòu)造函數(shù)。

private static Single s = new Single();//創(chuàng)建私有并靜態(tài)的本類對(duì)象。public static Single getInstance(){ //定義公有并靜態(tài)的方法,返回該對(duì)象。

return s;} }

/ 105

--------------//懶漢式:延遲加載方式。

class Single2{ private Single2(){} private static Single2 s = null;public static Single2 getInstance(){

if(s==null)

s = new Single2();

return s;} }----繼 承(面向?qū)ο筇卣髦唬?/p>

好處:

1:提高了代碼的復(fù)用性。

2:讓類與類之間產(chǎn)生了關(guān)系,提供了另一個(gè)特征多態(tài)的前提。

父類的由來(lái):其實(shí)是由多個(gè)類不斷向上抽取共性內(nèi)容而來(lái)的。

java中對(duì)于繼承,java只支持單繼承。java雖然不直接支持多繼承,但是保留了這種多繼承機(jī)制,進(jìn)行改良。

單繼承:一個(gè)類只能有一個(gè)父類。多繼承:一個(gè)類可以有多個(gè)父類。

為什么不支持多繼承呢?

因?yàn)楫?dāng)一個(gè)類同時(shí)繼承兩個(gè)父類時(shí),兩個(gè)父類中有相同的功能,那么子類對(duì)象調(diào)用該功能時(shí),運(yùn)行哪一個(gè)呢?因?yàn)楦割愔械姆椒ㄖ写嬖诜椒w。

但是java支持多重繼承。A繼承B B繼承C C繼承D。

多重繼承的出現(xiàn),就有了繼承體系。體系中的頂層父類是通過不斷向上抽取而來(lái)的。它里面定義的該體系最基本最共性內(nèi)容的功能。

所以,一個(gè)體系要想被使用,直接查閱該系統(tǒng)中的父類的功能即可知道該體系的基本用法。那么想要使用一個(gè)體系時(shí),需要建立對(duì)象。建議建立最子類對(duì)象,因?yàn)樽钭宇惒粌H可以使用父類中的功能。還可以使用子類特有

/ 105

的一些功能。

簡(jiǎn)單說(shuō):對(duì)于一個(gè)繼承體系的使用,查閱頂層父類中的內(nèi)容,創(chuàng)建最底層子類的對(duì)象。

子父類出現(xiàn)后,類中的成員都有了哪些特點(diǎn):

1:成員變量。

當(dāng)子父類中出現(xiàn)一樣的屬性時(shí),子類類型的對(duì)象,調(diào)用該屬性,值是子類的屬性值。

如果想要調(diào)用父類中的屬性值,需要使用一個(gè)關(guān)鍵字:super

This:代表是本類類型的對(duì)象引用。

Super:代表是子類所屬的父類中的內(nèi)存空間引用。

注意:子父類中通常是不會(huì)出現(xiàn)同名成員變量的,因?yàn)楦割愔兄灰x了,子類就不用在定義了,直接繼承過來(lái)用就可以了。

2:成員函數(shù)。

當(dāng)子父類中出現(xiàn)了一模一樣的方法時(shí),建立子類對(duì)象會(huì)運(yùn)行子類中的方法。好像父類中的方法被覆蓋掉一樣。所以這種情況,是函數(shù)的另一個(gè)特性:覆蓋(復(fù)寫,重寫)什么時(shí)候使用覆蓋呢?當(dāng)一個(gè)類的功能內(nèi)容需要修改時(shí),可以通過覆蓋來(lái)實(shí)現(xiàn)。3:構(gòu)造函數(shù)。

發(fā)現(xiàn)子類構(gòu)造函數(shù)運(yùn)行時(shí),先運(yùn)行了父類的構(gòu)造函數(shù)。為什么呢? 原因:子類的所有構(gòu)造函數(shù)中的第一行,其實(shí)都有一條隱身的語(yǔ)句super();

super(): 表示父類的構(gòu)造函數(shù),并會(huì)調(diào)用于參數(shù)相對(duì)應(yīng)的父類中的構(gòu)造函數(shù)。而super():是在調(diào)用父類中空參數(shù)的構(gòu)造函數(shù)。

為什么子類對(duì)象初始化時(shí),都需要調(diào)用父類中的函數(shù)?(為什么要在子類構(gòu)造函數(shù)的第一行加入這個(gè)super()?)因?yàn)樽宇惱^承父類,會(huì)繼承到父類中的數(shù)據(jù),所以必須要看父類是如何對(duì)自己的數(shù)據(jù)進(jìn)行初始化的。所以子類在進(jìn)行對(duì)象初始化時(shí),先調(diào)用父類的構(gòu)造函數(shù),這就是子類的實(shí)例化過程。

/ 105

注意:子類中所有的構(gòu)造函數(shù)都會(huì)默認(rèn)訪問父類中的空參數(shù)的構(gòu)造函數(shù),因?yàn)槊恳粋€(gè)子類構(gòu)造內(nèi)第一行都有默認(rèn)的語(yǔ)句super();如果父類中沒有空參數(shù)的構(gòu)造函數(shù),那么子類的構(gòu)造函數(shù)內(nèi),必須通過super語(yǔ)句指定要訪問的父類中的構(gòu)造函數(shù)。

如果子類構(gòu)造函數(shù)中用this來(lái)指定調(diào)用子類自己的構(gòu)造函數(shù),那么被調(diào)用的構(gòu)造函數(shù)也一樣會(huì)訪問父類中的構(gòu)造函數(shù)。

問題:super()和this()是否可以同時(shí)出現(xiàn)的構(gòu)造函數(shù)中。

兩個(gè)語(yǔ)句只能有一個(gè)定義在第一行,所以只能出現(xiàn)其中一個(gè)。

super()或者this():為什么一定要定義在第一行?

因?yàn)閟uper()或者this()都是調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)用于初始化,所以初始化的動(dòng)作要先完成。

繼承的細(xì)節(jié): 什么時(shí)候使用繼承呢?

當(dāng)類與類之間存在著所屬關(guān)系時(shí),才具備了繼承的前提。a是b中的一種。a繼承b。狼是犬科中的一種。英文書中,所屬關(guān)系:“ is a ” 注意:不要僅僅為了獲取其他類中的已有成員進(jìn)行繼承。

所以判斷所屬關(guān)系,可以簡(jiǎn)單看,如果繼承后,被繼承的類中的功能,都可以被該子類所具備,那么繼承成立。如果不是,不可以繼承。

細(xì)節(jié)二:

在方法覆蓋時(shí),注意兩點(diǎn):

1:子類覆蓋父類時(shí),必須要保證,子類方法的權(quán)限必須大于等于父類方法權(quán)限可以實(shí)現(xiàn)繼承。否則,編譯失敗。

/ 105

2:覆蓋時(shí),要么都靜態(tài),要么都不靜態(tài)。(靜態(tài)只能覆蓋靜態(tài),或者被靜態(tài)覆蓋)

繼承的一個(gè)弊端:打破了封裝性。對(duì)于一些類,或者類中功能,是需要被繼承,或者復(fù)寫的。這時(shí)如何解決問題呢?介紹一個(gè)關(guān)鍵字,final:最終。

final特點(diǎn):

1:這個(gè)關(guān)鍵字是一個(gè)修飾符,可以修飾類,方法,變量。2:被final修飾的類是一個(gè)最終類,不可以被繼承。3:被final修飾的方法是一個(gè)最終方法,不可以被覆蓋。4:被final修飾的變量是一個(gè)常量,只能賦值一次。

其實(shí)這樣的原因的就是給一些固定的數(shù)據(jù)起個(gè)閱讀性較強(qiáng)的名稱。

不加final修飾不是也可以使用嗎?那么這個(gè)值是一個(gè)變量,是可以更改的。加了final,程序更為嚴(yán)謹(jǐn)。常量名稱定義時(shí),有規(guī)范,所有字母都大寫,如果由多個(gè)單詞組成,中間用 _ 連接。

抽象類: abstract 抽象:不具體,看不明白。抽象類表象體現(xiàn)。

在不斷抽取過程中,將共性內(nèi)容中的方法聲明抽取,但是方法不一樣,沒有抽取,這時(shí)抽取到的方法,并不具體,需要被指定關(guān)鍵字abstract所標(biāo)示,聲明為抽象方法。

抽象方法所在類一定要標(biāo)示為抽象類,也就是說(shuō)該類需要被abstract關(guān)鍵字所修飾。

抽象類的特點(diǎn):

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關(guān)鍵字修飾(可以描述類和方法,不可以描述變量)。

2:抽象方法只定義方法聲明,并不定義方法實(shí)現(xiàn)。3:抽象類不可以被創(chuàng)建對(duì)象(實(shí)例化)。

/ 105

4:只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實(shí)例化。否則,該子類還是一個(gè)抽象類。

抽象類的細(xì)節(jié):

1:抽象類中是否有構(gòu)造函數(shù)?有,用于給子類對(duì)象進(jìn)行初始化。2:抽象類中是否可以定義非抽象方法? 可以。其實(shí),抽象類和一般類沒有太大的區(qū)別,都是在描述事物,只不過抽象類在描述事物時(shí),有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個(gè)抽象函數(shù)。而且比一般類少了一個(gè)創(chuàng)建對(duì)象的部分。

3:抽象關(guān)鍵字abstract和哪些不可以共存?final , private , static 4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創(chuàng)建對(duì)象。

--模板方法設(shè)計(jì)模式:

解決的問題:當(dāng)功能內(nèi)部一部分實(shí)現(xiàn)時(shí)確定,一部分實(shí)現(xiàn)是不確定的。這時(shí)可以把不確定的部分暴露出去,讓子類去實(shí)現(xiàn)。

abstract class GetTime{

public final void getTime(){ //此功能如果不需要復(fù)寫,可加final限定

} public abstract void code();//抽象不確定的功能,讓子類復(fù)寫實(shí)現(xiàn) long start = System.currentTimeMillis();code();//不確定的功能部分,提取出來(lái),通過抽象方法實(shí)現(xiàn) long end = System.currentTimeMillis();System.out.println(“毫秒是:”+(end-start));} class SubDemo extends GetTime{

public void code(){ //子類復(fù)寫功能方法

for(int y=0;y<1000;y++){ System.out.println(“y”);}

/ 105 } } 接 口:★★★★★

1:是用關(guān)鍵字interface定義的。

2:接口中包含的成員,最常見的有全局常量、抽象方法。

注意:接口中的成員都有固定的修飾符。

成員變量:public static final 成員方法:public abstract interface Inter{ public static final int x = 3;public abstract void show();} 3:接口中有抽象方法,說(shuō)明接口不可以實(shí)例化。接口的子類必須實(shí)現(xiàn)了接口中所有的抽象方法后,該子類才可以實(shí)例化。否則,該子類還是一個(gè)抽象類。

4:類與類之間存在著繼承關(guān)系,類與接口中間存在的是實(shí)現(xiàn)關(guān)系。繼承用extends ;實(shí)現(xiàn)用implements ;

5:接口和類不一樣的地方,就是,接口可以被多實(shí)現(xiàn),這就是多繼承改良后的結(jié)果。java將多繼承機(jī)制通過多現(xiàn)實(shí)來(lái)體現(xiàn)。

6:一個(gè)類在繼承另一個(gè)類的同時(shí),還可以實(shí)現(xiàn)多個(gè)接口。所以接口的出現(xiàn)避免了單繼承的局限性。還可以將類進(jìn)行功能的擴(kuò)展。

7:其實(shí)java中是有多繼承的。接口與接口之間存在著繼承關(guān)系,接口可以多繼承接口。

接口都用于設(shè)計(jì)上,設(shè)計(jì)上的特點(diǎn):(可以理解主板上提供的接口)

1:接口是對(duì)外提供的規(guī)則。2:接口是功能的擴(kuò)展。3:接口的出現(xiàn)降低了耦合性。

/ 105

抽象類與接口:

抽象類:一般用于描述一個(gè)體系單元,將一組共性內(nèi)容進(jìn)行抽取,特點(diǎn):可以在類中定義抽象內(nèi)容讓子類實(shí)現(xiàn),可以定義非抽象內(nèi)容讓子類直接使用。它里面定義的都是一些體系中的基本內(nèi)容。接口:一般用于定義對(duì)象的擴(kuò)展功能,是在繼承之外還需這個(gè)對(duì)象具備的一些功能。

抽象類和接口的共性:都是不斷向上抽取的結(jié)果。

抽象類和接口的區(qū)別:

1:抽象類只能被繼承,而且只能單繼承。

接口需要被實(shí)現(xiàn),而且可以多實(shí)現(xiàn)。

2:抽象類中可以定義非抽象方法,子類可以直接繼承使用。

接口中都有抽象方法,需要子類去實(shí)現(xiàn)。3:抽象類使用的是 is a 關(guān)系。

接口使用的 like a 關(guān)系。4:抽象類的成員修飾符可以自定義。

接口中的成員修飾符是固定的。全都是public的。

在開發(fā)之前,先定義規(guī)則,A和B分別開發(fā),A負(fù)責(zé)實(shí)現(xiàn)這個(gè)規(guī)則,B負(fù)責(zé)使用這個(gè)規(guī)則。至于A是如何對(duì)規(guī)則具體實(shí)現(xiàn)的,B是不需要知道的。這樣這個(gè)接口的出現(xiàn)就降低了A和B直接耦合性。

---多 態(tài)★★★★★(面向?qū)ο筇卣髦唬汉瘮?shù)本身就具備多態(tài)性,某一種事物有不同的具體的體現(xiàn)。

體現(xiàn):父類引用或者接口的引用指向了自己的子類對(duì)象。//Animal a = new Cat();多態(tài)的好處:提高了程序的擴(kuò)展性。

多態(tài)的弊端:當(dāng)父類引用指向子類對(duì)象時(shí),雖然提高了擴(kuò)展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。(前期不能使用后期產(chǎn)生的功能,即訪問的局限性)

/ 105

多態(tài)的前提:

多態(tài)的出現(xiàn)思想上也做著變化:以前是創(chuàng)建對(duì)象并指揮對(duì)象做事情。有了多態(tài)以后,我們可以找到對(duì)象的共性類型,直接操作共性類型做事情即可,這樣可以指揮一批對(duì)象做事情,即通過操作父類或接口實(shí)現(xiàn)。class 畢姥爺{

void 講課(){ } void 釣魚(){ System.out.println(“釣魚”);System.out.println(“企業(yè)管理”);1:必須要有關(guān)系,比如繼承、或者實(shí)現(xiàn)。2:通常會(huì)有覆蓋操作。

} } class 畢老師 extends 畢姥爺{

void 講課(){ System.out.println(“JAVA”);} void 看電影(){ System.out.println(“看電影”);} } class { public static void main(String[] args){ 畢姥爺 x = new 畢老師();//畢老師對(duì)象被提升為了畢姥爺類型。x.講課();x.看電影();//錯(cuò)誤.畢老師 y =(畢老師)x;//將畢姥爺類型強(qiáng)制轉(zhuǎn)換成畢老師類型。

/ 105

// //

y.看電影();//在多態(tài)中,自始自終都是子類對(duì)象在做著類型的變化。

} }導(dǎo)入:類名稱變長(zhǎng),寫起來(lái)很麻煩。為了簡(jiǎn)化,使用了一個(gè)關(guān)鍵字:import,可以使用這個(gè)關(guān)鍵字導(dǎo)入指定包中的類。記住:實(shí)際開發(fā)時(shí),到的哪個(gè)類就導(dǎo)入哪個(gè)類,不建議使用*.import packa.*;//這個(gè)僅僅是導(dǎo)入了packa當(dāng)前目錄下的所有的類。不包含子包。import packa.abc.*;//導(dǎo)入了packa包中的子包abc下的當(dāng)前的所有類。

如果導(dǎo)入的兩個(gè)包中存在著相同名稱的類。這時(shí)如果用到該類,必須在代碼中指定包名。

常見的軟件包: java.lang : language java的核心包,Object System String Throwable jdk1.2版本后,該包中的類自動(dòng)被導(dǎo)入。

java.awt : 定義的都是用于java圖形界面開發(fā)的對(duì)象。

javax.swing: 提供所有的windows桌面應(yīng)用程序包括的控件,比如:Frame , Dialog, Table, List 等等,就是java的圖形界面庫(kù)。

java.net : 用于java網(wǎng)絡(luò)編程方面的對(duì)象都在該包中。

java.io : input output 用于操作設(shè)備上數(shù)據(jù)的對(duì)象都在該包中。比如:讀取硬盤數(shù)據(jù),往硬盤寫入數(shù)據(jù)。java.util : java的工具包,時(shí)間對(duì)象,集合框架。

java.applet: application+let 客戶端java小程序。server+let--> servlet 服務(wù)端java小程序。

jar :java的壓縮包,主要用于存儲(chǔ)類文件,或者配置文件等。

命令格式:jar –cf 包名.jar 包目錄

解壓縮:jar –xvf 包名.jar

/ 105

將jar包目錄列表重定向到一個(gè)文件中:jar –tf 包名.jar >c:1.txt--多線程:★★★★

進(jìn)程:正在進(jìn)行中的程序。其實(shí)進(jìn)程就是一個(gè)應(yīng)用程序運(yùn)行時(shí)的內(nèi)存分配空間。

線程:其實(shí)就是進(jìn)程中一個(gè)程序執(zhí)行控制單元,一條執(zhí)行路徑。進(jìn)程負(fù)責(zé)的是應(yīng)用程序的空間的標(biāo)示。線程負(fù)責(zé)的是應(yīng)用程序的執(zhí)行順序。

一個(gè)進(jìn)程至少有一個(gè)線程在運(yùn)行,當(dāng)一個(gè)進(jìn)程中出現(xiàn)多個(gè)線程時(shí),就稱這個(gè)應(yīng)用程序是多線程應(yīng)用程序,每個(gè)線程在棧區(qū)中都有自己的執(zhí)行空間,自己的方法區(qū)、自己的變量。

jvm在啟動(dòng)的時(shí),首先有一個(gè)主線程,負(fù)責(zé)程序的執(zhí)行,調(diào)用的是main函數(shù)。主線程執(zhí)行的代碼都在main方法中。

當(dāng)產(chǎn)生垃圾時(shí),收垃圾的動(dòng)作,是不需要主線程來(lái)完成,因?yàn)檫@樣,會(huì)出現(xiàn)主線程中的代碼執(zhí)行會(huì)停止,會(huì)去運(yùn)行垃圾回收器代碼,效率較低,所以由單獨(dú)一個(gè)線程來(lái)負(fù)責(zé)垃圾回收。

隨機(jī)性的原理:因?yàn)閏pu的快速切換造成,哪個(gè)線程獲取到了cpu的執(zhí)行權(quán),哪個(gè)線程就執(zhí)行。

返回當(dāng)前線程的名稱:Thread.currentThread().getName()線程的名稱是由:Thread-編號(hào)定義的。編號(hào)從0開始。線程要運(yùn)行的代碼都統(tǒng)一存放在了run方法中。

線程要運(yùn)行必須要通過類中指定的方法開啟。start方法。(啟動(dòng)后,就多了一條執(zhí)行路徑)start方法:1)、啟動(dòng)了線程;2)、讓jvm調(diào)用了run方法。

創(chuàng)建線程的第一種方式:繼承Thread,由子類復(fù)寫run方法。步驟:

1,定義類繼承Thread類;

2,目的是復(fù)寫run方法,將要讓線程運(yùn)行的代碼都存儲(chǔ)到run方法中;

/ 105

3,通過創(chuàng)建Thread類的子類對(duì)象,創(chuàng)建線程對(duì)象; 4,調(diào)用線程的start方法,開啟線程,并執(zhí)行run方法。

線程狀態(tài):

被創(chuàng)建:start()運(yùn)行:具備執(zhí)行資格,同時(shí)具備執(zhí)行權(quán);

凍結(jié):sleep(time),wait()—notify()喚醒;線程釋放了執(zhí)行權(quán),同時(shí)釋放執(zhí)行資格; 臨時(shí)阻塞狀態(tài):線程具備cpu的執(zhí)行資格,沒有cpu的執(zhí)行權(quán); 消亡:stop()

創(chuàng)建線程的第二種方式:實(shí)現(xiàn)一個(gè)接口Runnable。步驟:

1,定義類實(shí)現(xiàn)Runnable接口。

2,覆蓋接口中的run方法(用于封裝線程要運(yùn)行的代碼)。3,通過Thread類創(chuàng)建線程對(duì)象;

4,將實(shí)現(xiàn)了Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳遞給Thread類中的構(gòu)造函數(shù)。為什么要傳遞呢?因?yàn)橐尵€程對(duì)象明確要運(yùn)行的run方法所屬的對(duì)象。

5,調(diào)用Thread對(duì)象的start方法。開啟線程,并運(yùn)行Runnable接口子類中的run方法。

/ 105

Ticket t = new Ticket();/* 直接創(chuàng)建Ticket對(duì)象,并不是創(chuàng)建線程對(duì)象。

因?yàn)閯?chuàng)建對(duì)象只能通過new Thread類,或者new Thread類的子類才可以。所以最終想要?jiǎng)?chuàng)建線程。既然沒有了Thread類的子類,就只能用Thread類。*/ Thread t1 = new Thread(t);//創(chuàng)建線程。/* 只要將t作為Thread類的構(gòu)造函數(shù)的實(shí)際參數(shù)傳入即可完成線程對(duì)象和t之間的關(guān)聯(lián) 為什么要將t傳給Thread類的構(gòu)造函數(shù)呢?其實(shí)就是為了明確線程要運(yùn)行的代碼run方法。*/ t1.start();

為什么要有Runnable接口的出現(xiàn)?

1:通過繼承Thread類的方式,可以完成多線程的建立。但是這種方式有一個(gè)局限性,如果一個(gè)類已經(jīng)有了自己的父類,就不可以繼承Thread類,因?yàn)閖ava單繼承的局限性。

可是該類中的還有部分代碼需要被多個(gè)線程同時(shí)執(zhí)行。這時(shí)怎么辦呢?

只有對(duì)該類進(jìn)行額外的功能擴(kuò)展,java就提供了一個(gè)接口Runnable。這個(gè)接口中定義了run方法,其實(shí)run方法的定義就是為了存儲(chǔ)多線程要運(yùn)行的代碼。

所以,通常創(chuàng)建線程都用第二種方式。

因?yàn)閷?shí)現(xiàn)Runnable接口可以避免單繼承的局限性。

2:其實(shí)是將不同類中需要被多線程執(zhí)行的代碼進(jìn)行抽取。將多線程要運(yùn)行的代碼的位置單獨(dú)定義到接口中。為其他類進(jìn)行功能擴(kuò)展提供了前提。

所以Thread類在描述線程時(shí),內(nèi)部定義的run方法,也來(lái)自于Runnable接口。

實(shí)現(xiàn)Runnable接口可以避免單繼承的局限性。而且,繼承Thread,是可以對(duì)Thread類中的方法,進(jìn)行子類復(fù)寫的。但是不需要做這個(gè)復(fù)寫動(dòng)作的話,只為定義線程代碼存放位置,實(shí)現(xiàn)Runnable接口更方便一些。所

/ 105

以Runnable接口將線程要執(zhí)行的任務(wù)封裝成了對(duì)象。------------------------//面試

new Thread(new Runnable(){ //匿名

}){

public void run(){ System.out.println(“runnable run”);} public void run(){ System.out.println(“subthread run”);} }.start();//結(jié)果:subthread run

--------------------------Try { Thread.sleep(10);}catch(InterruptedException e){}// 當(dāng)刻意讓線程稍微停一下,模擬cpu 切換情況。

多線程安全問題的原因:

通過圖解:發(fā)現(xiàn)一個(gè)線程在執(zhí)行多條語(yǔ)句時(shí),并運(yùn)算同一個(gè)數(shù)據(jù)時(shí),在執(zhí)行過程中,其他線程參與進(jìn)來(lái),并操作了這個(gè)數(shù)據(jù)。導(dǎo)致到了錯(cuò)誤數(shù)據(jù)的產(chǎn)生。

涉及到兩個(gè)因素:

1,多個(gè)線程在操作共享數(shù)據(jù)。2,有多條語(yǔ)句對(duì)共享數(shù)據(jù)進(jìn)行運(yùn)算。

原因:這多條語(yǔ)句,在某一個(gè)時(shí)刻被一個(gè)線程執(zhí)行時(shí),還沒有執(zhí)行完,就被其他線程執(zhí)行了。

解決安全問題的原理:

只要將操作共享數(shù)據(jù)的語(yǔ)句在某一時(shí)段讓一個(gè)線程執(zhí)行完,在執(zhí)行過程中,其他線程不能進(jìn)來(lái)執(zhí)行就可以解決這個(gè)問題。

如何進(jìn)行多句操作共享數(shù)據(jù)代碼的封裝呢?

/ 105

java中提供了一個(gè)解決方式:就是同步代碼塊。

格式:

synchronized(對(duì)象){ // 任意對(duì)象都可以。這個(gè)對(duì)象就是鎖。需要被同步的代碼;

}-同步:★★★★★

好處:解決了線程安全問題。

弊端:相對(duì)降低性能,因?yàn)榕袛噫i需要消耗資源,產(chǎn)生了死鎖。

定義同步是有前提的:

1,必須要有兩個(gè)或者兩個(gè)以上的線程,才需要同步。2,多個(gè)線程必須保證使用的是同一個(gè)鎖。

同步的第二種表現(xiàn)形式:

同步函數(shù):其實(shí)就是將同步關(guān)鍵字定義在函數(shù)上,讓函數(shù)具備了同步性。

同步函數(shù)是用的哪個(gè)鎖呢?

通過驗(yàn)證,函數(shù)都有自己所屬的對(duì)象this,所以同步函數(shù)所使用的鎖就是this鎖。

當(dāng)同步函數(shù)被static修飾時(shí),這時(shí)的同步用的是哪個(gè)鎖呢?

靜態(tài)函數(shù)在加載時(shí)所屬于類,這時(shí)有可能還沒有該類產(chǎn)生的對(duì)象,但是該類的字節(jié)碼文件加載進(jìn)內(nèi)存就已經(jīng)被封裝成了對(duì)象,這個(gè)對(duì)象就是該類的字節(jié)碼文件對(duì)象。

所以靜態(tài)加載時(shí),只有一個(gè)對(duì)象存在,那么靜態(tài)同步函數(shù)就使用的這個(gè)對(duì)象。這個(gè)對(duì)象就是 類名.class

同步代碼塊和同步函數(shù)的區(qū)別?

/ 105

同步代碼塊使用的鎖可以是任意對(duì)象。

同步函數(shù)使用的鎖是this,靜態(tài)同步函數(shù)的鎖是該類的字節(jié)碼文件對(duì)象。

在一個(gè)類中只有一個(gè)同步,可以使用同步函數(shù)。如果有多同步,必須使用同步代碼塊,來(lái)確定不同的鎖。所以同步代碼塊相對(duì)靈活一些。

------------------------★考點(diǎn)問題:請(qǐng)寫一個(gè)延遲加載的單例模式?寫懶漢式;當(dāng)出現(xiàn)多線程訪問時(shí)怎么解決?加同步,解決安全問題;效率高嗎?不高;怎樣解決?通過雙重判斷的形式解決。

//懶漢式:延遲加載方式。

當(dāng)多線程訪問懶漢式時(shí),因?yàn)閼袧h式的方法內(nèi)對(duì)共性數(shù)據(jù)進(jìn)行多條語(yǔ)句的操作。所以容易出現(xiàn)線程安全問題。為了解決,加入同步機(jī)制,解決安全問題。但是卻帶來(lái)了效率降低。

為了效率問題,通過雙重判斷的形式解決。class Single{ private static Single s = null;private Single(){} public static Single getInstance(){ //鎖是誰(shuí)?字節(jié)碼文件對(duì)象;

if(s == null){

synchronized(Single.class){

if(s == null)

s = new Single();

}

}

return s;} }--------------------------同步死鎖:通常只要將同步進(jìn)行嵌套,就可以看到現(xiàn)象。同步函數(shù)中有同步代碼塊,同步代碼塊中還有同步函數(shù)。

線程間通信:思路:多個(gè)線程在操作同一個(gè)資源,但是操作的動(dòng)作卻不一樣。1:將資源封裝成對(duì)象。

2:將線程執(zhí)行的任務(wù)(任務(wù)其實(shí)就是run方法。)也封裝成對(duì)象。

/ 105

等待喚醒機(jī)制:涉及的方法:

wait:將同步中的線程處于凍結(jié)狀態(tài)。釋放了執(zhí)行權(quán),釋放了資格。同時(shí)將線程對(duì)象存儲(chǔ)到線程池中。notify:?jiǎn)拘丫€程池中某一個(gè)等待線程。notifyAll:喚醒的是線程池中的所有線程。

注意:

1:這些方法都需要定義在同步中。2:因?yàn)檫@些方法必須要標(biāo)示所屬的鎖。你要知道 A鎖上的線程被wait了,那這個(gè)線程就相當(dāng)于處于A鎖的線程池中,只能A鎖的notify喚醒。3:這三個(gè)方法都定義在Object類中。為什么操作線程的方法定義在Object類中? 因?yàn)檫@三個(gè)方法都需要定義同步內(nèi),并標(biāo)示所屬的同步鎖,既然被鎖調(diào)用,而鎖又可以是任意對(duì)象,那么能被任意對(duì)象調(diào)用的方法一定定義在Object類中。

wait和sleep區(qū)別: 分析這兩個(gè)方法:從執(zhí)行權(quán)和鎖上來(lái)分析:

wait:可以指定時(shí)間也可以不指定時(shí)間。不指定時(shí)間,只能由對(duì)應(yīng)的notify或者notifyAll來(lái)喚醒。sleep:必須指定時(shí)間,時(shí)間到自動(dòng)從凍結(jié)狀態(tài)轉(zhuǎn)成運(yùn)行狀態(tài)(臨時(shí)阻塞狀態(tài))。wait:線程會(huì)釋放執(zhí)行權(quán),而且線程會(huì)釋放鎖。Sleep:線程會(huì)釋放執(zhí)行權(quán),但不是不釋放鎖。

線程的停止:通過stop方法就可以停止線程。但是這個(gè)方式過時(shí)了。

停止線程:原理就是:讓線程運(yùn)行的代碼結(jié)束,也就是結(jié)束run方法。怎么結(jié)束run方法?一般run方法里肯定定義循環(huán)。所以只要結(jié)束循環(huán)即可。第一種方式:定義循環(huán)的結(jié)束標(biāo)記。

第二種方式:如果線程處于了凍結(jié)狀態(tài),是不可能讀到標(biāo)記的,這時(shí)就需要通過Thread類中的interrupt方法,將其凍結(jié)狀態(tài)強(qiáng)制清除。讓線程恢復(fù)具備執(zhí)行資格的狀態(tài),讓線程可以讀到標(biāo)記,并結(jié)束。

/ 105

---------< java.lang.Thread >----------interrupt():中斷線程。

setPriority(int newPriority):更改線程的優(yōu)先級(jí)。getPriority():返回線程的優(yōu)先級(jí)。

toString():返回該線程的字符串表示形式,包括線程名稱、優(yōu)先級(jí)和線程組。Thread.yield():暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程。

setDaemon(true):將該線程標(biāo)記為守護(hù)線程或用戶線程。將該線程標(biāo)記為守護(hù)線程或用戶線程。當(dāng)正在運(yùn)行的線程都是守護(hù)線程時(shí),Java 虛擬機(jī)退出。該方法必須在啟動(dòng)線程前調(diào)用。join:臨時(shí)加入一個(gè)線程的時(shí)候可以使用join方法。

當(dāng)A線程執(zhí)行到了B線程的join方式。A線程處于凍結(jié)狀態(tài),釋放了執(zhí)行權(quán),B開始執(zhí)行。A什么時(shí)候執(zhí)行呢?只有當(dāng)B線程運(yùn)行結(jié)束后,A才從凍結(jié)狀態(tài)恢復(fù)運(yùn)行狀態(tài)執(zhí)行。----------------------------Lock接口:多線程在JDK1.5版本升級(jí)時(shí),推出一個(gè)接口Lock接口。

解決線程安全問題使用同步的形式,(同步代碼塊,要么同步函數(shù))其實(shí)最終使用的都是鎖機(jī)制。

到了后期版本,直接將鎖封裝成了對(duì)象。線程進(jìn)入同步就是具備了鎖,執(zhí)行完,離開同步,就是釋放了鎖。在后期對(duì)鎖的分析過程中,發(fā)現(xiàn),獲取鎖,或者釋放鎖的動(dòng)作應(yīng)該是鎖這個(gè)事物更清楚。所以將這些動(dòng)作定義在了鎖當(dāng)中,并把鎖定義成對(duì)象。

所以同步是隱示的鎖操作,而Lock對(duì)象是顯示的鎖操作,它的出現(xiàn)就替代了同步。

在之前的版本中使用Object類中wait、notify、notifyAll的方式來(lái)完成的。那是因?yàn)橥街械逆i是任意對(duì)象,所以操作鎖的等待喚醒的方法都定義在Object類中。

而現(xiàn)在鎖是指定對(duì)象Lock。所以查找等待喚醒機(jī)制方式需要通過Lock接口來(lái)完成。而Lock接口中并沒有直接操作等待喚醒的方法,而是將這些方式又單獨(dú)封裝到了一個(gè)對(duì)象中。這個(gè)對(duì)象就是Condition,將Object中的 48 / 105

三個(gè)方法進(jìn)行單獨(dú)的封裝。并提供了功能一致的方法 await()、signal()、signalAll()體現(xiàn)新版本對(duì)象的好處。

< java.util.concurrent.locks > Condition接口:await()、signal()、signalAll();

-------------------------class BoundedBuffer { final Lock lock = new ReentrantLock();

final Condition notFull = lock.newCondition();final Condition notEmpty = lock.newCondition();final Object[] items = new Object[100];int putptr, takeptr, count;public void put(Object x)throws InterruptedException { lock.lock();try {

while(count == items.length)notFull.await();items[putptr] = x;if(++putptr == items.length)putptr = 0;++count;notEmpty.signal();

} finally { lock.unlock();} } public Object take()throws InterruptedException { lock.lock();try {

while(count == 0)notEmpty.await();

Object x = items[takeptr];if(++takeptr == items.length)takeptr = 0;--count;notFull.signal();return x;} finally { lock.unlock();} } }---API:(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的以訪問一組例程的能力,而又無(wú)需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。

/ 105

--< java.lang >--String字符串:★★★☆

java中用String類進(jìn)行描述。對(duì)字符串進(jìn)行了對(duì)象的封裝。這樣的好處是可以對(duì)字符串這種常見數(shù)據(jù)進(jìn)行方便的操作。對(duì)象封裝后,可以定義N多屬性和行為。

如何定義字符串對(duì)象呢?String s = “abc”;只要是雙引號(hào)引起的數(shù)據(jù)都是字符串對(duì)象。

特點(diǎn):字符串一旦被初始化,就不可以被改變,存放在方法區(qū)中的常量池中。-----------------------String s1 = “abc”;// s1指向的內(nèi)存中只有一個(gè)對(duì)象abc。

String s2 = new String(“abc”);// s2指向的內(nèi)容中有兩個(gè)對(duì)象abc、new。

System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true,字符串中equals比較的是字符串內(nèi)容是否相同。------------------------字符串的方法:

1:構(gòu)造方法:將字節(jié)數(shù)組或者字符數(shù)組轉(zhuǎn)成字符串。

String s1 = new String();//創(chuàng)建了一個(gè)空內(nèi)容的字符串。String s2 = null;//s2沒有任何對(duì)象指向,是一個(gè)null常量值。

String s3 = “";//s3指向一個(gè)具體的字符串對(duì)象,只不過這個(gè)字符串中沒有內(nèi)容。//一般在定義字符串時(shí),不用new。String s4 = new String(”abc“);String s5 = ”abc";一般用此寫法

new String(char[]);//將字符數(shù)組轉(zhuǎn)成字符串。

new String(char[],offset,count);//將字符數(shù)組中的一部分轉(zhuǎn)成字符串。

2:一般方法:

按照面向?qū)ο蟮乃枷耄?/p>

/ 105

第三篇:JavaEE學(xué)習(xí)心得與總結(jié)

學(xué)習(xí)Java EE 心得體會(huì)

這學(xué)期通過對(duì)Java EE五部分的學(xué)習(xí),掌握了java 的基本開發(fā)方法,學(xué)習(xí)JavaEE 基礎(chǔ)部分分為6大部分,分別是基礎(chǔ)服務(wù),Java Web開發(fā),Web Service,JSF框架,EJB部分和JPA。

其中第一部分是基礎(chǔ)服務(wù)部分,此部分包括六章:第一章是概述,介紹了java EE 的發(fā)展歷史,架構(gòu),組件,服務(wù),容器等概念,并介紹了平臺(tái)角色以及開發(fā)環(huán)境和應(yīng)用服務(wù)的選擇與安裝。第二章講了使用JNDI 訪問明明和目錄服務(wù),介紹了什么是命名和服務(wù)目錄,以及如何通過JNDI 訪問Weblogic 提供的命名目錄服務(wù)。

第三章 講了使用JDBC 訪問數(shù)據(jù)庫(kù),介紹了JDBC的基本用法以及連接池的配置和訪問。第四章講了使用JTA 進(jìn)行事物處理,介紹了事物處理概念以及如何通過JTA進(jìn)行事務(wù)處理。第五章 RMI :遠(yuǎn)程方法調(diào)用,介紹了RMI 的結(jié)構(gòu)以及如何使用RMI進(jìn)行編程。第六章,使用JMS接發(fā)消息,介紹了消息服務(wù)的概念,在Weblogic 中消息服務(wù)相關(guān)的配置以及如何通過JMS開發(fā)消息發(fā)送和接受程序。

J2EE是一種技術(shù),旨在簡(jiǎn)化企業(yè)應(yīng)用程序的設(shè)計(jì)和實(shí)施。在本教程中,您將學(xué)習(xí)J2EE是什么,它的好處,J2EE的主要組成部分,企業(yè)應(yīng)用框架的演變,為什么要使用J2EE,J2EE平臺(tái)架構(gòu),J2EE API和技術(shù)和J2EE參考實(shí)現(xiàn)。在繼續(xù)之前,我們的J2EE討論讓定義企業(yè)應(yīng)用程序是什么。企業(yè)應(yīng)用程序是一個(gè)應(yīng)用程序,它可能要繼續(xù)使用他們,同時(shí)添加或遷移到一個(gè)新的利用互聯(lián)網(wǎng),電子商務(wù)等新技術(shù)的應(yīng)用,集傳統(tǒng)的現(xiàn)有應(yīng)用程序和數(shù)據(jù)庫(kù)。

Java EE 架構(gòu)分為四層,客戶端層,Web層,EJB層和數(shù)據(jù)庫(kù)層,其中,數(shù)據(jù)庫(kù)層為系統(tǒng)提供數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)庫(kù)管理功能,在整個(gè)企業(yè)級(jí)應(yīng)用中可能村愛很多個(gè)數(shù)據(jù)庫(kù),并且采用不同類型的數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行管理。EJB層也稱為業(yè)務(wù)邏輯層,用于完成系統(tǒng)中復(fù)雜的或者共享的業(yè)務(wù),這些功能主要是提供客戶端層和Web層調(diào)用,用戶不會(huì)直接調(diào)用該層。Web層是基于HTTP 的訪問方式,客戶通過Web層訪問系統(tǒng)的業(yè)務(wù)邏輯和數(shù)據(jù)等??蛻舳藢影ˋpplet客戶端和Application客戶端,客戶通過客戶端的形式訪問系統(tǒng)的業(yè)務(wù)邏輯和數(shù)據(jù)等。邏輯中的四層可能不同時(shí)出現(xiàn)在系統(tǒng)中,例如某個(gè)系統(tǒng)可能只提供Web形式的客戶端,并且不使用EJB技術(shù),此時(shí)系統(tǒng)圖只留下Web層和數(shù)據(jù)庫(kù)層。

Java運(yùn)行環(huán)境定義了五種類型的應(yīng)用組件,包括客戶端組件Application和Applet,Web層組件JSP和Servlet,EJB組件等,這些組件類型是Java EE 產(chǎn)品必須支持的。

其中的JPA是我學(xué)習(xí)的重點(diǎn)。JPA包括以下3方面的技術(shù):(1).ORM映射元數(shù)據(jù),JPA支持XML和JDK 5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中.(2).JPA 的API,用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來(lái)。(3).查詢語(yǔ)言,這是持久化操作中很重要的一個(gè)方面,通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢語(yǔ)言查詢數(shù)據(jù),避免程序的SQL語(yǔ)句緊密耦合。JPA的優(yōu)勢(shì)包括:1 標(biāo)準(zhǔn)化,JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu),提供相同的訪問 API,這保證了基于JPA開發(fā)的企業(yè)應(yīng)用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運(yùn)行。2 對(duì)容器級(jí)特性的支持,JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù),這使得 JPA 超越了簡(jiǎn)單持久化框架的局限,在企業(yè)應(yīng)用發(fā)揮更大的作用。3 簡(jiǎn)單易用,集成方便,JPA的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型:在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類一樣簡(jiǎn)單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡(jiǎn)單,沒有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開發(fā)者可以很容易的掌握。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成。4 可媲美JDBC的查詢能力,JPA的查詢語(yǔ)言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的,它以面向?qū)ο蟮淖匀徽Z(yǔ)法構(gòu)造查詢語(yǔ)句,可以看成是Hibernate HQL的等價(jià)物。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴(kuò)展,它是針對(duì)實(shí)體的一種查詢語(yǔ)言,操作對(duì)象是實(shí)體,而不是關(guān)系數(shù)據(jù)庫(kù)的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢。5 支持面向?qū)ο蟮母呒?jí)特性,JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,這樣的支持能夠讓開發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計(jì)企業(yè)應(yīng)用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫(kù)的持久化。

第二部分是Java Web 開發(fā),其中第七章主要講了Java Web應(yīng)用概述,介紹Java Web的主要技術(shù),發(fā)展歷史,文檔結(jié)構(gòu),并通過一個(gè)簡(jiǎn)單的例子介紹了Servlet和JSP的運(yùn)行原理。第八章主要講了JSP的基本語(yǔ)法,對(duì)JSP的基本語(yǔ)法,指令,動(dòng)作,內(nèi)部對(duì)象和如何在MyEclipse中開發(fā)進(jìn)行了介紹。第九章主要講了JavaServlet技術(shù),介紹如何編寫Servlet,如何使用Servlet與客戶端進(jìn)行交互以及Servlet過濾器和Servle監(jiān)聽器的使用。第十章主要講EL,介紹EL的基本用法。其中的JSP是我學(xué)習(xí)的重點(diǎn)。JSP技術(shù)使用Java編成語(yǔ)言編寫類XML的tags和scriptlets,來(lái)封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的處理邏輯。網(wǎng)頁(yè)還能通過tags和scriptlets訪問存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁(yè)邏輯與網(wǎng)頁(yè)設(shè)計(jì)和顯示分離,支持可重用的基于組件的設(shè)計(jì),使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易。Web服務(wù)器在遇到訪問JSP網(wǎng)頁(yè)的請(qǐng)求時(shí),首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數(shù)據(jù)庫(kù)、重新定向網(wǎng)頁(yè)等,以實(shí)現(xiàn)建立動(dòng)態(tài)網(wǎng)頁(yè)所需要的功能。JSP與JavaServlet一樣,是在服務(wù)器端執(zhí)行的,通常返回給客戶端的就是一個(gè)HTML文本,因此客戶端只要有瀏覽器就能瀏覽。JSP頁(yè)面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁(yè)面被客戶端請(qǐng)求以后對(duì)這些Java代碼進(jìn)行處理,然后將生成的HTML頁(yè)面返回給客戶端的瀏覽器。Java Servlet是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要Java Servlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡(jiǎn)單易用,完全的面向?qū)ο?,具有平臺(tái)無(wú)關(guān)性且安全可靠,主要面向因特網(wǎng)的所有特點(diǎn)。利用JSP技術(shù),動(dòng)態(tài)信息由JSP頁(yè)面來(lái)表現(xiàn),JSP頁(yè)面由安裝在Web服務(wù)器或者使用JSP的應(yīng)用服務(wù)器上的JSP引擎執(zhí)行。JSP引擎接受客戶端對(duì)JSP頁(yè)面的請(qǐng)求,并且生成JSP頁(yè)面作為對(duì)客戶端的響應(yīng)。JSP頁(yè)面通常被編譯成為Java Servlets,這是一個(gè)標(biāo)準(zhǔn)的Java擴(kuò)展。頁(yè)面開發(fā)人員能夠訪問全部的Java應(yīng)用環(huán)境,以利用Java技術(shù)的擴(kuò)展性和可移植性。當(dāng)JSP頁(yè)面第一次被調(diào)用時(shí),如果它還不存在,就會(huì)被編譯成為一個(gè)Java Servlets類,并且存儲(chǔ)在服務(wù)器的內(nèi)存中。這就使得在接下來(lái)的對(duì)該頁(yè)面的調(diào)用中,服務(wù)器會(huì)有非??斓捻憫?yīng)(這避免了CGI-BIN為每個(gè)HTTP請(qǐng)求生成一個(gè)新的進(jìn)程的問題)。JSP頁(yè)面可以包含在多種不同的應(yīng)用體系結(jié)構(gòu)或者模型中,可以用于由不同協(xié)議、組件和格式所組成的聯(lián)合體中?;贘SP的動(dòng)態(tài)信息發(fā)布技術(shù)是一個(gè)開放的、可擴(kuò)展的建立動(dòng)態(tài)Web頁(yè)面的標(biāo)準(zhǔn)。不論采用什么創(chuàng)建工具,開發(fā)人員都可以使用JSP頁(yè)面來(lái)創(chuàng)建可移植的Web應(yīng)用,在不同的Web應(yīng)用服務(wù)器上運(yùn)行。

第三部分主要講Web Service,本部分內(nèi)容主要包括三章。第十三章主要講Web Service概述沒介紹了什么是Web Service以及相關(guān)概念,包括WSDL,SOAP和UDDI.第十四章主要講Java EE 對(duì)Web Service的支持,包括JAXR,JAXB和SAAJ.第十五章主要是使用JAX-WS開發(fā)Web Service,介紹如何使用JAX-WS 編寫WebService以及訪問WebService的客戶端,包括在MyEcilipse中的開發(fā)。Webservice 的概念是使用一個(gè)標(biāo)準(zhǔn)的輸出接口來(lái)定義代碼提供的功能,以便讓外界可以通過這個(gè)標(biāo)準(zhǔn)的輸出接口來(lái)調(diào)用,而所謂的標(biāo)準(zhǔn)輸出接口就是wsdl,wsdl是一個(gè)xml組成的文件,描述了實(shí)現(xiàn)程序?qū)ν馓峁┖瘮?shù)的原型,客戶端可以通過wsdl來(lái)調(diào)用實(shí)現(xiàn)程序提供的服務(wù)代碼。

第四部分主要講了JSF 框架,內(nèi)容包括五章。第十六章講了JSF概述,介紹了JSF 的體系結(jié)構(gòu),JSF的組成和生命周期等。第十七章將了一個(gè)簡(jiǎn)單的JSF應(yīng)用,介紹了在MyEclipse中如何開發(fā)JSF應(yīng)用。第十八章主要講了UI組件,介紹了JSF提供的界面控件。第十九章主要講了在JSP中使用JSF,介紹了本地化,轉(zhuǎn)換器,時(shí)間監(jiān)聽器,驗(yàn)證器和導(dǎo)航的使用。第二十章主要是Bean,介紹了輔助Bean的配置,訪問和編寫。

在這部分中我主要學(xué)習(xí)了怎樣使用JSF編程,其過程主要包括以下幾點(diǎn):第一步,創(chuàng)建web工程J2ee下創(chuàng)建web project,這沒什么說(shuō)的了,不過以前在eclipse中總是不知道怎么創(chuàng)建web應(yīng)用,夠傻的,原來(lái)需要插件,在myeclipse提供了全套的插件。不過Myeclipse需要破解。中國(guó)程序員似乎很少用正版的。言歸正傳,Myeclipse中需要在Open Perspective中選擇J2ee enterprse視圖。然后創(chuàng)建web project。這跟delphi的New一個(gè)project不太一樣,delphi把所有可以new的都放在一個(gè)窗口中,而eclipse有不同的視圖來(lái)提供管理,這算一種進(jìn)步吧,插件化的進(jìn)步。接下來(lái)需要 Add JSF Capability,因?yàn)檫@個(gè)類庫(kù)(不知道是否應(yīng)該稱為類庫(kù))支撐了JSF開發(fā)需要的組件。第二步,創(chuàng)建bean.在New-àother中的Myeclipse-àweb-JSF下有managed bean,創(chuàng)建bean可以連Java類文件一起創(chuàng)建,且可以將需要的屬性一起完成,myeclipse可以自動(dòng)完成屬性的get,set方法。是個(gè)比較酷的功能。第三步,創(chuàng)建,編輯jsp文件.在工程的webroot-->web-inf下面有一個(gè)facesconfig.xml文件,這個(gè)文件是Javabean的管理文件,同時(shí)它管理了頁(yè)面之間的切換關(guān)系,起到導(dǎo)航頁(yè)面的作用。有趣的是這個(gè)文件居然有個(gè)漂亮的design界面,可以在上面創(chuàng)建新的jsp文件,且可以用拖拽方式定義頁(yè)面之間的關(guān)系,讓所有頁(yè)面的關(guān)系看起來(lái)很直觀。感覺這里是個(gè)很酷的設(shè)計(jì)。頁(yè)面的導(dǎo)航是根據(jù)一個(gè)字符串來(lái)作為判斷依據(jù)的,所以在配置導(dǎo)航關(guān)系時(shí),只要設(shè)定From outcome的值為調(diào)用bean方法的返回值即可。值得注意的是,JSF對(duì)于導(dǎo)航值只允許string類型。Jsp頁(yè)面的編寫其實(shí)很方便,即使不太懂,因?yàn)閙yeclipse提供了拖拽式的頁(yè)面設(shè)計(jì),如果熟練直接寫代碼也很好玩吧。我以前一直很討厭html的代碼,因?yàn)橛X得太機(jī)械了,且不好記憶,這會(huì)得硬著頭皮學(xué)了,不過在這種拖拽式的設(shè)計(jì)中可以省不少力氣。記得jsp中使用Java采用””的方式,這會(huì)是:”#{}” 直接以bean來(lái)調(diào)用。第四步,本地化.如果需要考慮國(guó)際化的問題,那么需要?jiǎng)?chuàng)建一個(gè).properties的文件,否則可以跳過這里。.properties文件需要?jiǎng)?chuàng)建到源碼文件的目錄下,否則在指定位置時(shí)便會(huì)找不到它。.properties文件的配置非常簡(jiǎn)單,如同一個(gè)ini文件。如:“username=user name”, 如果要顯示中文的話,這里需要轉(zhuǎn)化為unicode,jdk帶了一個(gè)native2ascii的小工具可以輕松轉(zhuǎn)換,不過這個(gè)玩意每次復(fù)制的時(shí)候都要先將編輯設(shè)為“標(biāo)記”。不知道有沒有更方便的工具。另外如果要支持中文的.properties文件需要以_zh_CN結(jié)尾才行。在jsp文件中使用下面形式定義:然后就如同Java中的類一樣使用了.第五部分主要是EJB部分,內(nèi)容包括四章,地二十一章介紹了EJB 的目標(biāo),發(fā)展歷史,特點(diǎn),角色,分類以及變成規(guī)約。第二十二章主要對(duì)會(huì)話Bean的開發(fā)以及運(yùn)行原理進(jìn)行了介紹。第二十三章介紹了消息驅(qū)動(dòng)Bean以及客戶端程序的編寫。第二十四章講解了如何訪問數(shù)據(jù)源,定時(shí)服務(wù)和事務(wù)處理對(duì)象。其中EJB為學(xué)習(xí)的重點(diǎn),EJB(Enterprise JavaBean)是J2EE的一部分,定義了一個(gè)用于開發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn)。其特點(diǎn)包括網(wǎng)絡(luò)服務(wù)支持和核心開發(fā)工具(SDK)。在J2EE里,Enterprise Java Beans(EJB)稱為Java 企業(yè)柄,是Java的核心代碼,分為整體柄和片段柄和消息柄三個(gè)部分,其中的消息柄將在以后再作討論。EJB是sun的服務(wù)器端組件模型,最大的用處是部署。

第四篇:JavaEE學(xué)習(xí)順序

JavaEE學(xué)習(xí)順序

第一階段:java基礎(chǔ)

技術(shù):

1.java語(yǔ)法 2.面向?qū)ο?3.常用的api 4.界面編程 5.多線程 6.文件io 7.java網(wǎng)絡(luò)編程 視頻:

張孝祥 或者馬士兵java視頻 書籍:

《java2核心技術(shù)一二卷》 《java編程思想》研讀,精讀 《java模式》

第二階段:數(shù)據(jù)庫(kù)

技術(shù):

1.oracle——主要的 2.mysql 3.sql server 視頻: 韓順平oracle視頻 書籍:Oracle使用教程

深入淺出Oracle 第三階段:web開發(fā)

技術(shù):

1.html 2.css 3.javascript 視頻:

張孝祥 JavaScript視頻 書籍:

張孝祥配套書籍《JavaScript網(wǎng)頁(yè)開發(fā)》 別具光芒

孫鑫《HTML語(yǔ)言速成》

第四階段:JavaEE中級(jí)

技術(shù):

1.servet 2.jsp 3.mvc 服務(wù)器:tomcat、jboss、weblogic、websphere 視頻:

韓順平servlet—jsp視頻 書籍: oreilly公司《jsp設(shè)計(jì)》《java servlet編程》

第五階段:JavaEE高級(jí)

技術(shù)

1.struts 2.hibernate 3.spring 視頻:

美河圖書《Servlet與JSP核心編程》

張小靜 Struts視頻

孫衛(wèi)琴《精通Struts基于MVC的Java.Web設(shè)計(jì)與開發(fā)》 李興華 Hibernate視頻

孫衛(wèi)琴《精通Java對(duì)象持久化技術(shù)詳解》

第六階段:其他流行技術(shù)

技術(shù):

Xml ajax(jquery,dw)Junit ant Ejb

Enterprise JavaBeans技術(shù)2.0

Java消息服務(wù)(JMS)1.0

Java命名目錄接口(JNDI)1.2

Java事務(wù)API(JTA)1.0

JavaMail API 1.2

JavaBeans激活架構(gòu)(JAF)1.0

J2EE連接器體系結(jié)構(gòu)(JCA)1.0

Java認(rèn)證和授權(quán)服務(wù)(JAAS)1.0

書籍: 《精通ejb》

常見的j2eeAPI:

JavaServer Pages(JSP)技術(shù)1.2

Java Servlet技術(shù)2.3

JDBC API 2.0

Java XML處理API(JAXP)1.1

Enterprise JavaBeans技術(shù)2.0

Java消息服務(wù)(JMS)1.0

Java命名目錄接口(JNDI)1.2

Java事務(wù)API(JTA)1.0

JavaMail API 1.2

JavaBeans激活架構(gòu)(JAF)1.0

J2EE連接器體系結(jié)構(gòu)(JCA)1.0

Java認(rèn)證和授權(quán)服務(wù)(JAAS)1.0

第五篇:javaEE個(gè)人心得體會(huì)范文

Java EE架構(gòu)與程序設(shè)計(jì)大作業(yè)心得體會(huì)

大作業(yè)題目:

基于web的教務(wù)管理系統(tǒng)

學(xué)號(hào):

姓名:

組別:

本次javaEE課程設(shè)計(jì)我們這組做的課題是基于web的教務(wù)管理系統(tǒng),我們組將整個(gè)系統(tǒng)設(shè)計(jì)成基于SSH的教務(wù)管理系統(tǒng),系統(tǒng)總共分為三個(gè)角色:學(xué)生、教師、管理員。整個(gè)系統(tǒng)我們小組成員在組長(zhǎng)的帶領(lǐng)下實(shí)現(xiàn)了:學(xué)生登陸該系統(tǒng)可以查看個(gè)人信息,查看可選課程,查詢成績(jī),選課等操作。教師登陸該系統(tǒng)可以實(shí)現(xiàn)查看個(gè)人信息,查看選課情況,錄入學(xué)生成績(jī)等操作。管理員登陸該系統(tǒng),可以實(shí)現(xiàn)修改學(xué)生或老師信息,增加學(xué)生或教師信息等操作。

通過這次課程設(shè)計(jì),使我靈活應(yīng)用所學(xué)javaEE知識(shí),和小組成員一起完成問題分析,結(jié)合javaEE理論知識(shí),編寫程序?qū)崿F(xiàn)系統(tǒng)所需功能。初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法分析和解決問題的能力;并用系統(tǒng)的的觀點(diǎn)進(jìn)行系統(tǒng)設(shè)計(jì),鞏固、深化學(xué)生的理論知識(shí),提高編程水平,并在此過程中培養(yǎng)我們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的編程風(fēng)格。進(jìn)一步加深對(duì)SSH框架的知識(shí)的理解,并能夠利用SSH框架的知識(shí)實(shí)現(xiàn)教務(wù)管理系統(tǒng)。同時(shí)在這學(xué)期的實(shí)驗(yàn)中,培養(yǎng)了以專業(yè)的眼光去對(duì)待我們系統(tǒng)中的每一段代碼,這算是一次不可多得的實(shí)踐機(jī)會(huì)。在這一次的實(shí)踐過程中,不論是個(gè)人動(dòng)手能力,還是團(tuán)隊(duì)合作能力,方方面面都得到了一定程度的提高。在這個(gè)過程中,我學(xué)會(huì)了很多學(xué)習(xí)的方法。而這是日后最實(shí)用

也是最寶貴的。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。這對(duì)于我們的將來(lái)也有很大的幫助。

這次實(shí)驗(yàn)我們根據(jù)組長(zhǎng)分配的任務(wù),在組長(zhǎng)的帶領(lǐng)下,我們小組成功實(shí)現(xiàn)了教務(wù)管理系統(tǒng)。在系統(tǒng)設(shè)計(jì)過程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。學(xué)會(huì)了合作,學(xué)會(huì)了寬容,學(xué)會(huì)了理解,也學(xué)會(huì)了做人與處世。課程設(shè)計(jì)是是一次模擬的社會(huì)實(shí)踐,是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過程。實(shí)驗(yàn)過程中,也十分感謝張永定老師的指點(diǎn)與教導(dǎo)。這次課程設(shè)計(jì)不僅是對(duì)這學(xué)期所學(xué)知識(shí)的一種綜合檢驗(yàn),而且也是對(duì)自己動(dòng)手能力的一種提高,增強(qiáng)了自己實(shí)踐能力。通過這次課程設(shè)計(jì)使我明白了自己知識(shí)還比較欠缺,只是學(xué)習(xí)書本知識(shí)還是遠(yuǎn)遠(yuǎn)不夠的,自己不會(huì)的東西還有太多,學(xué)習(xí)需要自己長(zhǎng)期的積累,在以后的學(xué)習(xí)、工作中都應(yīng)該不斷的學(xué)習(xí),將課本的理論知識(shí)與生活中的實(shí)踐知識(shí)相結(jié)合,不斷提高自己文化知識(shí)和實(shí)踐能力。

下載JavaEE框架總結(jié)(推薦5篇)word格式文檔
下載JavaEE框架總結(jié)(推薦5篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    三大框架總結(jié)

    JAVA三大框架ssh-Struts、Spring、Hibernate Struts1. struts是一個(gè)按MVC模式設(shè)計(jì)的Web層框架,其實(shí)它就是一個(gè)大大的servlet,這個(gè)Servlet名為ActionServlet,或是 ActionServlet......

    CI框架總結(jié)

    第一部分 CI框架的簡(jiǎn)介 1.官網(wǎng)下載ci框架包 2.解壓包需要的文件夾是 aplication systerm(ci框架包) index.php總?cè)肟谖募?3.aplication 中分別有文件: models controllers v......

    框架總結(jié)日語(yǔ)

    幕沖擊可以讓哪?位置可前可后!說(shuō)我們奢望。海量游;吃今天酸,奮刻苦讀書后來(lái)?巧的看似,鑄鞭臘月草。聲那小虎他爺!頭的語(yǔ)大,聽過哪些最好!一綠活著。 則由:頭風(fēng)曉得閃。個(gè)宏簡(jiǎn);類同也;牢......

    WEB框架總結(jié)

    概述 開發(fā)框架的選擇,始終是個(gè)仁者見仁、智者見智的事情。尤其是Web層的開發(fā)框架,數(shù)量非常多,而且各有特色,如:Struts、WebWork、Spring MVC、Tapestry、JSF、WebPage3.0......等......

    工程技術(shù)總結(jié)框架

    1 工程概況 1.1地理位置 1.2 工程簡(jiǎn)介 1.3 設(shè)備情況 1.4 各專業(yè)主要工程量 2 現(xiàn)場(chǎng)建設(shè)、設(shè)計(jì)、監(jiān)理、調(diào)試單位情況 3 現(xiàn)場(chǎng)施工組織管理 3.1項(xiàng)目部組織管理機(jī)構(gòu)圖 3.2項(xiàng)目部......

    2018 JavaEE程序員收入高嗎

    2018 JavaEE程序員收入高嗎 現(xiàn)在參加JavaEE培訓(xùn)的小伙伴比較關(guān)心的就是多久能學(xué)好,學(xué)好后是否能順利畢業(yè),畢業(yè)了能不能找到合適的薪資較高的工作。本篇文章小編就和大家分享一......

    【java總結(jié)】集合框架

    【java總結(jié)】集合框架 Collection是集合框架層次結(jié)構(gòu)中的根接口。Collection 表示一組對(duì)象,這些對(duì)象也稱為 collection 的元素。一些 collection 允許有重復(fù)的元素,而另一些則......

    財(cái)務(wù)部上半年度工作總結(jié)框架

    第一部分:上半年度財(cái)務(wù)部工作完成情況第二部分:工作中存在的問題及解決方案第三部分:取得的工作成績(jī)和工作經(jīng)驗(yàn)第四部分:總結(jié)并展望下半年度財(cái)務(wù)部工作具體如下一、個(gè)人(部門)主要......

主站蜘蛛池模板: 精品久久久久久久久久中文字幕| 丰满肥臀大屁股熟妇激情视频| 乱色精品无码一区二区国产盗| 亚洲成av人片无码不卡播放器| 国产在线拍揄自揄视频菠萝| 67194熟妇人妻欧美日韩| 99精品国产兔费观看久久99| 欧美国产日韩a在线观看| 日韩精品亚洲色大成网站| 东北少妇不戴套对白第一次| 4hu44四虎www在线影院麻豆| 青青青国产精品一区二区| 国产末成年女av片| 国产热a欧美热a在线视频| 成人午夜无码精品免费看| 欧美性猛少妇xxxxx免费| 2020国产精品香蕉在线观看| 国产成人无码区免费内射一片色欲| 久久精品九九亚洲精品天堂| 免费无码又爽又刺激高潮视频| 无码无套少妇毛多18pxxxx| 精品久久国产| 久久老子午夜精品无码怎么打| www一区二区乱码www| 国产av无码专区国产乱码| 丰满少妇被粗大的猛烈进出视频| 色综合av综合无码综合网站| 人妻少妇精品无码专区动漫| 亚洲精品一区国产| 亚洲成a人v欧美综合天堂| 精品国产在天天线2019| 四川少妇被弄到高潮| 欧美日韩在大午夜爽爽影院| 青青久在线视频免费观看| www.一区二区三区在线 | 欧洲| 色综合99久久久无码国产精品| 日韩精品 在线 国产 丝袜| 精品毛片| 欧美大屁股熟妇bbbbbb| 亚洲日韩∨a无码中文字幕| 中文字幕被公侵犯的漂亮人妻|