版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、尚學堂科技_馬士兵_JAVA視頻教程_J2SE_5.0_第09章_線程 聽課筆記 2010-4-2 20:16:34 by LoveXForce 第九章 Java多線程機制線程基本概念 Runnable線程類接口線程創(chuàng)建和啟動線程的調(diào)度好優(yōu)先級線程的狀態(tài)控制 sleep join yield 線程同步synchronized wait notify/notifyAll線程基本概 :1進程:一個獨立程序的每一次運行稱為一個進程。執(zhí)行進程是指進程里面主線程mian方法開始執(zhí)行了(靜態(tài)概念)。機器上運行的都是線程2線程是一個程序不同的執(zhí)行路徑 是一個程序內(nèi)部的順序控制流)main方法:一個主線程,主
2、分支3一個時間點上一個CPU只能有一個線程執(zhí)行進程與線程區(qū)別每個進程都有獨立的代碼和數(shù)據(jù)空間,進程間的切換會有很大開銷。線程可以看成輕量級的進程 同一類線程共享代碼和數(shù)據(jù)空間,每個線程有獨立的運行棧個程序計數(shù)器,線程切換開銷小。多線程:在操作系統(tǒng)中能同時運行多個任務(程序)。多線程:在同一個應用程序中有多個順序流同時執(zhí)行。線程的創(chuàng)建和啟動1實現(xiàn)Runnable接口(常用,能從其他類基礎(chǔ)和實現(xiàn)其他接口)設(shè)計一個實現(xiàn)Runable接口的類,根據(jù)需要重寫run方法;建立該類的對象,以此對象為參數(shù)建立Thread類的對象;調(diào)用Thread類對象start方法啟動線程,將執(zhí)行權(quán)轉(zhuǎn)交到run方法。2繼承T
3、hread類(繼承比較死,不能從其他類繼承)定義一個從Thread類繼承的子類并重寫其run方法然后生成該類的對象,調(diào)用Thread類對象start方法啟動線程說明:Runnable接口 java.lang.RunnableJava多線程機制的一個重要部分,實際上它只有一個run()方法Thread類實現(xiàn)了Runnable接口,相對于Thread類,它更適合于多個線程處理同一資源 實現(xiàn)Runnable接口的類的對象可以用來創(chuàng)建線程,這時start方法啟動此線程就會在此線程上運行run()方法在編寫復雜程序時相關(guān)的類可能已經(jīng)繼承了某個基類,而Java不支持多繼承,在這種情況下,便需要通過實現(xiàn)Ru
4、nnable接口來生成多線程Thread類 java.lang.Thread在Java程序中創(chuàng)建多線程的方法之一是繼承Thread類 封裝了Java程序中一個線程對象需要擁有的屬性和方法從Thread類派生一個子類,并創(chuàng)建這個子類的對象,就可以產(chǎn)生一個新的線程。這個子類應該重寫Thread類的run方法,在run方法中寫入需要在新線程中執(zhí)行的語句段。這個子類的對象需要調(diào)用start方法來啟動,新線程將自動進入run方法。原線程將同時繼續(xù)往下執(zhí)行Thread類直接繼承了Object類,并實現(xiàn)了Runnable接口。它位于java.lang包中,因而程序開頭不用import任何包就可直接使用例子:
5、ThreadTestThread1.java 開始使用Eclipse1實現(xiàn)Runnable接口(多線程程序交替執(zhí)行.多態(tài)(接口,常用))package Thread;public class TestThread1 public static void main(String args) Runner r = new Runner();Thread t = new Thread(r);/主線程;t.start();/啟動分支線程for(int i=0; i100; i+) System.out.println(Main Thread: + i);class Runner implements
6、Runnable public void run() /線程運行體;for(int i=0; i100; i+) System.out.println(Runner1 : + i);2 一般程序先執(zhí)行子線程,再執(zhí)行主線程(方法調(diào)用)package Thread;public class TestThread1_1 public static void main(String args) Runner1 r = new Runner1();r.run();for(int i=0; i100; i+) System.out.println(Main Thread: + i);class Runne
7、r1 implements Runnable public void run() for(int i=0; i100; i+) System.out.println(Runner1 : + i);3繼承Thread類(繼承,不常用)package Thread;public class TestThread1_2public static void main(String arg)Runner1_2 r = new Runner1_2();r.start();for (int i = 0 ;i = 100; i+)System.out.println(Main Thread:!+i);clas
8、s Runner1_2 extends Threadpublic void run()for (int i = 0 ;i = 100; i+)System.out.println(Runner2:!+i);2010-4-2 21:04:16 2010-4-14 16:28:59線程狀態(tài)轉(zhuǎn)換FromJava Web開發(fā)詳解線程控制基本方法Sleep/Join/Yield方法 Sleep/Join(需要捕獲異常)例子1 Thread/TestInterrupt.Java (線程結(jié)束的方式)package Thread;import java.util.*;public class TestInte
9、rrupt public static void main(String arg)MyThread thread = new MyThread();thread.start();tryThread.sleep(10000);/主線程睡眠catch(InterruptedException e)errupt();/中斷線程。class MyThread extends Threadboolean flag = true;public void run()/重寫的方法不能拋出不必被重寫方法不同的方法,此處不能寫throws InterruptedExceptionwhile(flag)System
10、.out.println(+ new Date()+);trysleep(1000);catch(InterruptedException e)/捕獲拋出的異常return;/停止例子2 Thread/ TestJoin.Java (線程合并方式)package Thread;public class TestJoin public static void main(String args) MyThread2 t1 = new MyThread2(abcde); t1.start();/啟動分支線程 try t1.join();/把T1分支線程合并到當前線程 catch (Interrupt
11、edException e) for(int i=1;i=10;i+) System.out.println(i am main thread); class MyThread2 extends Thread MyThread2(String s) super(s); public void run() for(int i =1;i=10;i+) System.out.println(i am +getName(); try sleep(1000); catch (InterruptedException e) return; 例子3 Thread/ TestYield.Java (讓出Cup
12、)package Thread;public class TestYield public static void main(String args) MyThread3 t1 = new MyThread3(t1); MyThread3 t2 = new MyThread3(t2); t1.start(); t2.start(); class MyThread3 extends Thread MyThread3(String s)super(s); public void run() for(int i =1;i=100;i+) System.out.println(getName()+:
13、+i); if(i%10=0) yield(); 線程優(yōu)先級 Priority例子 Thread/ TestPriority.Javapackage Thread;public class TestPriority public static void main(String args) Thread t1 = new Thread(new T1();Thread t2 = new Thread(new T2();t1.setPriority(Thread.NORM_PRIORITY + 3);/提高優(yōu)先級t1.start();t2.start();class T1 implements Ru
14、nnable public void run() for(int i=0; i1000; i+) System.out.println(T1: + i);class T2 implements Runnable public void run() for(int i=0; i1000; i+) System.out.println(T2: + i);2010年4月14日21:40:41 2010-4-15 16:23:44例子 TestThread2-6TestThread2一個線程類可以啟動兩個線程package Thread;public class TestThread2 /一個線程類可
15、以啟動兩個線程public static void main(String args) Runner2 r = new Runner2();Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t2.start();class Runner2 implements Runnable public void run() for(int i=0; i30; i+) System.out.println(No. + i);正常停止線程TestThread4package Thread;public class TestThrea
16、d4 /怎么正常停止線程public static void main(String args)Runner4 r = new Runner4(); Thread t = new Thread(r); t.start(); for(int i=0;i0) System.out.println(in thread main i= + i); System.out.println(Thread main is over); r.shutDown(); /t.stop(); class Runner4 implements Runnable private boolean flag=true; pu
17、blic void run() int i = 0;while (flag=true) System.out.print( + i+); public void shutDown() flag = false; TestThread6 isAlivepackage Thread;public class TestThread6 public static void main(String args)Thread t = new Runner6(); t.start();for(int i=0; i50; i+) System.out.println(MainThread: + i); clas
18、s Runner6 extends Thread public void run() System.out.println(Thread.currentThread().isAlive();for(int i=0;i50;i+) System.out.println(SubThread: + i);線程同步引入:兩人同時取同一賬戶的錢兩個線程訪問同一資源,進程之間協(xié)調(diào)的問題解決:在進程訪問獨占資源時先鎖定再訪問 synchronized 最好只鎖定一個對象加鎖過程中:一個方法做了同步(加鎖)另一個方法沒有做同步,別的線程可以訪問沒做同步的方法,并且能影響已經(jīng)同步的方法,要保護需要的同步的對象,
19、必須對要訪問的對象所有方法要仔細考慮加不加同步,加同步效率變低,不加同步有可能產(chǎn)生數(shù)據(jù)不一致的后果讀寫兩方法,寫的方法加鎖。兩個方法都改了同一個值,兩個方法都應該加同步TsetSync.javapackage Thread;public class TestSync implements Runnable Timer timer = new Timer(); public static void main(String args) TestSync test = new TestSync(); Thread t1 = new Thread(test); Thread t2 = new Thre
20、ad(test); t1.setName(t1); t2.setName(t2); t1.start(); t2.start(); public void run() timer.add(Thread.currentThread().getName();/拿到當前線程的名字 class Timer private static int num = 0; public void add(String name) /public synchronized void add(String name) /synchronized 鎖定關(guān)鍵字 /synchronized (this) /鎖定 num +
21、; try Thread.sleep(1); /讓線程睡眠,給另一個線程執(zhí)行的機會,更容易看到xia catch (InterruptedException e) System.out.println(name+, 你是第+num+個使用timer的線程); / t2, 你是第2個使用timer的線程t1, 你是第2個使用timer的線程堆內(nèi)存:test對象testtimertimer對象t1t2問題出現(xiàn)在線程執(zhí)行方法時被另一個線程打斷了.執(zhí)行:num +;System.out.println(name+, 你是第+num+個使用timer的線程);兩句話時被另個進程打斷死鎖 07_線程同步_
22、3.aviThread/TestDeadLock.java兩個線程鎖定了互斥的對象package Thread;/一個線程類模擬兩個線程。用flag區(qū)分public class TestDeadLock implements Runnable public int flag = 1;static Object o1 = new Object(), o2 = new Object();public void run() System.out.println(flag= + flag);if(flag = 1) synchronized(o1) /鎖定o1try Thread.sleep(500)
23、; catch (Exception e) e.printStackTrace();synchronized(o2) /鎖定o2System.out.println(1);if(flag = 0) synchronized(o2) /鎖定o2try Thread.sleep(500); catch (Exception e) e.printStackTrace();synchronized(o1) /鎖定o1System.out.println(0);public static void main(String args) TestDeadLock td1 = new TestDeadLock
24、();TestDeadLock td2 = new TestDeadLock();td1.flag = 1;td2.flag = 0;Thread t1 = new Thread(td1);Thread t2 = new Thread(td2);t1.start();t2.start();一道面試題:08_線程同步_4.Avi.當m1()方法執(zhí)行的過程中,另外的線程能執(zhí)行m2()package Thread;public class TT implements Runnable int b = 100;public synchronized void m1() throws Exception
25、b = 1000;Thread.sleep(5000);System.out.println(b = + b);public void m2() System.out.println(b);public void run() try m1(); catch(Exception e) e.printStackTrace();public static void main(String args) throws Exception TT tt = new TT();Thread t = new Thread(tt);t.start();Thread.sleep(1000);tt.m2();結(jié)果:1
26、000b = 1000生產(chǎn)者消費者問題 11_線程同步_7_生產(chǎn)者消費者問題.avi XXX.wait() 讓當前訪問這個線程等待,此時這個線程的鎖不存在了XXXX.notify() 喚醒在此對象監(jiān)視器上等待的單個線程。一個wait()對應一個notify()package Thread;public class ProducerConsumer public static void main(String args) SyncStack ss = new SyncStack();Producer p = new Producer(ss);Consumer c = new Consumer(s
27、s);new Thread(p).start();new Thread(p).start();new Thread(p).start();new Thread(c).start();class WoTou int id; WoTou(int id) this.id = id;public String toString() return WoTou : + id;class SyncStack int index = 0;WoTou arrWT = new WoTou6;public synchronized void push(WoTou wt) while(index = arrWT.le
28、ngth) try this.wait(); catch (InterruptedException e) e.printStackTrace();this.notifyAll();/ 喚醒arrWTindex = wt;index +;public synchronized WoTou pop() while(index = 0) try this.wait(); catch (InterruptedException e) e.printStackTrace();this.notifyAll();index-;return arrWTindex;class Producer impleme
29、nts Runnable SyncStack ss = null;Producer(SyncStack ss) this.ss = ss;public void run() for(int i=0; i20; i+) WoTou wt = new WoTou(i);ss.push(wt);System.out.println(生產(chǎn)了: + wt);try Thread.sleep(int)(Math.random() * 200); catch (InterruptedException e) e.printStackTrace();class Consumer implements Runn
30、able SyncStack ss = null;Consumer(SyncStack ss) this.ss = ss;public void run() for(int i=0; iREFACTER-RENAME 一改全改ALT+ENTER 查看現(xiàn)在項目的位置 Alt+ 當前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了) Alt+ 當前行和上面一行交互位置(同上) Ctrl+W 關(guān)閉當前Editer C+/ 注釋(取消注釋)選中行C+S+/ 注釋多行C+S+取消注釋 F2 查看完整的函數(shù)幫助信息,并且可以復制粘貼文字 ,當選中文件時,有改名作用 F3找到變量的定義 C+鼠標點擊
31、 找到變量的定義 作用和F3C差不多。 F4找到接口方法的具體實現(xiàn)類.=C+T F5刷新 C+F6:在打開的文件間進行切換; C+F7:在資源窗口間進行切換; C+F8:在各種模式間進行切換; C+E:選擇某個打開的文件; C+S+r:打開一個文件; c+s+t:打開一個類; c+s+f:格式化代碼; C+S+O:導入需要的類 c+o:查看類結(jié)構(gòu); c+t:列出子類或接口實現(xiàn)類(類的等級結(jié)構(gòu)) Ctrl+Alt+ 復制當前行到下一行(復制增加) Ctrl+Alt+ 復制當前行到上一行(復制增加) CtrlK (加SHIFT是向上)向下查找選中的字符串 Ctrlshift 向上向下查找一個函數(shù)和
32、變量 Java基礎(chǔ)知識1.Java是Sun公司的JamesGosling發(fā)明的面向?qū)ο蟮目煽缙脚_的編程語言。2.SUN公司,Stanford University Network,斯坦福大學;3.平臺:我們把cpu處理器與操作系統(tǒng)的整體叫做平臺。不同的操作系統(tǒng)支持不同的cpu指令集。不同的cup有不同的指令集,如intel和AMD.4.JDK:Java Software Develop Kit. JVM:Java Virtual Machine.Java虛擬機,包含:類加載器,字節(jié)碼校驗器,java解釋器。 JRE:java運行時環(huán)境,包含jvm與java運行支持類庫。5.環(huán)境變量:java_
33、home;classpath:.;C:Javajdk1.6.0_10lib;path6.jdkjdk1.1為jvm增加了JIT(即時編譯)編譯器;jdk1.2也叫java2;jdk1.5也叫java5(改動較大);現(xiàn)在使用的是jdk1.6。7.jdk,Java Developent ToolKit;開發(fā)java需要有源程序文件到中間文件的編譯器;運行java中間文件需要對應平臺的解釋器(官方叫法JVM);編譯器、解釋器加上一些其它的組件合稱為JDK.JDK的另外一個稱呼為Java Software develop kit.JDK即開發(fā)java程序的組件。jdk=java編譯器+jre(java
34、運行環(huán)境) jre=jvm+運行支持類庫 eclipse和jbuilder本身自帶了java編譯器但不包含jre。8.jre:Java Runtime Environment,java運行時需要的環(huán)境。有兩類,開發(fā)需要的jre和公共jre。9.jdk版本,jdk1.2到j(luò)dk1.4為java2時代,java技術(shù)有j2ee,j2se,jeme.jdk1.5,也叫做java5,技術(shù)術(shù)語改為javase,javaee,javame.1.5在1.4的基礎(chǔ)上改動很大。10.常用的DOS命令:dir,現(xiàn)實當前文件夾的所有文件;cd . 打開上級目錄;exit:退出。11.java注釋:java注釋分為三種
35、單行注釋,多行注釋,文檔注釋,文檔注釋結(jié)果為:/*換行*/,文檔注釋在幫助文檔里面有顯示。12.javadoc幫助文檔,javadoc可執(zhí)行程序可生成幫助文檔,用法如下:javadoc Test01.java13.java 打包jar,用法見cmd輸入jar;ant也是一種打包成jar的工具,其功能叫jar更加強大;除了jar包外,java文件包還有war,ear兩種格式。14.java缺點:運行速度慢,占用資源多是java的缺點;其原因是:class需要二次編譯,解釋執(zhí)行;jvm運行占用資源;無指針無法直接操作內(nèi)存,垃圾回收線程占用資源,并且不會實時收集內(nèi)存。15.JVM,JAVA虛擬機即j
36、ava解釋器;JVM執(zhí)行.class文件需要三步:類加載器加載;校驗器檢查錯誤,執(zhí)行文件。在執(zhí)行的時候有兩種方法:a.解釋器直接執(zhí)行;b.JIT代碼生成器搞定。16.兩種解釋執(zhí)行方法的區(qū)別:直接解釋執(zhí)行是1.1版本的,其直接翻譯class文件,速度必然比機器執(zhí)行二進制文件的速度慢;1.2版本后引入JIT,即將class文件先轉(zhuǎn)換為二進制文件,再執(zhí)行二進制文件,下次執(zhí)行時可直接執(zhí)行二進制文件。15.JIT(即時編譯):java即時編譯技術(shù),可執(zhí)行java代碼的運行速度。17.IDE工具 IDE:Integrated Development Environment,集成開發(fā)環(huán)境。18.開發(fā)java
37、的IDE工具:JCREATOR,JBUILDER,ECLIPSE,NETBEANS.20.拷貝項目的三種方式:a.拷貝整個工作空間,切換工作空間。b.拷貝項目,導入項目。c.只拷貝源代碼(即src文件夾),從新建的項目導入。22.轉(zhuǎn)義字符:單引號:;雙引號:;反斜杠:;回車:n;水平制表符:t;換行:r. 轉(zhuǎn)義字符一般出現(xiàn)在字符串中時,要是以原型輸入,則輸出一定報錯,只有以轉(zhuǎn)換后的才能顯示。23.數(shù)據(jù)類型轉(zhuǎn)換:byte char short int long float double,String,小杯到大杯自動轉(zhuǎn)換,但是大杯到小杯強制轉(zhuǎn)換。一般的格式:標變量=(目標類型)源變量,特殊的,St
38、ring轉(zhuǎn)換為其它,int a = Integer.parseInt(str1);float b = Float.parseFloat(str2);boolean c = Boolean.parseBoolean(str3);24.內(nèi)存分配 基本數(shù)據(jù)類型只在棧中分配內(nèi)存;應用數(shù)據(jù)類型不僅在棧中分配內(nèi)存,還在堆中分配內(nèi)存,在變量聲明時,在棧中分配內(nèi)存,當創(chuàng)建對象時,在堆中分配內(nèi)存。25.值傳遞和引用傳遞 本人去見網(wǎng)友叫按引用傳遞;替身去見網(wǎng)友叫做按值傳遞。引用傳遞參數(shù)數(shù)值改變,按值傳遞參數(shù)值不變?;緮?shù)據(jù)類型就是按值傳遞的,又稱為值類型,而引用類型是按引用傳遞的。String 雖然是按引用傳遞的
39、,但是傳遞給的新變量會有屬于自己的堆內(nèi)存,所以,String值不變。包: 開發(fā)中最好在導入包和類的過程中,最好是使用哪個類就導入那個類,不要導入包。27.包的命名規(guī)則:反寫的企業(yè)域名.功能名.模塊名28.系統(tǒng)包(SUN提供的包)默認包-java.lang.常用包 java.lang: java的核心類庫,包含了運行java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學函數(shù)、字符串處理、線程、異常處理類等,系統(tǒng)缺省加載這個包 java.lang.reflect:提供用于反射對象的工具 java.io: java語言的標準輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出等 java.util:常
40、用的工具類,如集合框架類,日期處理類等。主題:旺旺老師軟件工程師實訓教程-JAVASE 第六章:包與 JAVA 常用類 java.sql: JDBC相關(guān)類。 :JAVA網(wǎng)絡(luò)包,其中包含能夠使程序通過網(wǎng)絡(luò)進行通信的 java.awt;javax.swing:使用java開發(fā)C/S結(jié)構(gòu)應用程序使用的類。29.企業(yè)開發(fā)中命名規(guī)則一般如下: com.easyitedu.dao /持久層代碼 com.easyitedu.view /表示層代碼 .student /stuent模塊的業(yè)務層代碼 .teacher /teacer模塊的業(yè)務層代碼 com.easyitedu.tool /本項目使用的工具類30
41、.包裝類:8個值類型對應的有8個類,我們把它們稱為包裝類。其作用較八種基本類型的作用強大,java不符合面向?qū)ο蟮膬蓚€地方:一個是JAVA保留了8個基本數(shù)據(jù)類型,他們不是對象,更沒有屬性和方法;另一個就是JAVA中存在著main方法。之所以還在用八種基本類型而不是通通用包裝類,是因為一些簡單的業(yè)務用基本數(shù)據(jù)類型效率較高,但是有時必須用八個包裝包,例如:強制類型轉(zhuǎn)換。 其中byte的包裝類是Byte.只有char的類是Character,int 是 Integer.其它像byte一樣是其本身。說明:int a = 10; Integer b = new Integer(10);其中,前者占用一塊
42、內(nèi)存,后者占用兩塊,符合引用傳遞。自動的拆箱和裝箱:把數(shù)據(jù)由基本數(shù)據(jù)類型轉(zhuǎn)換為對應包裝類叫做裝箱,把數(shù)據(jù)由包裝類轉(zhuǎn)化為基本數(shù)據(jù)類型叫拆箱。實例:int a = 10;Integer b = a;/自動裝箱,基本數(shù)據(jù)類型-包裝類 int c = b;/自動拆箱,包裝類-基本數(shù)據(jù)類型,即兩種類型可以自動相互轉(zhuǎn)換,沒其它制約。32.String轉(zhuǎn)換成基本型:調(diào)用包裝類的parse*方法,例如:String a = 12; int a = Integer.parseInt(a);33.=和equals,=比較的是堆內(nèi)存地址,后者堆內(nèi)存(即地址可以不同)。equals,用法:常量.equals(變量),
43、要不然會出現(xiàn)空指針異常。34.字符串池:當字符串直接賦值時,(string a = aa;)其堆內(nèi)存會進入字符串池,當下次在賦值相同時,String b =aa;b會直接引用a的堆內(nèi)存。但是當賦值為new 方法賦值時,其堆內(nèi)存不會進入字符串池,而是直接開辟一個新的空間。String c = new String(aa);35.三個空字符串的區(qū)別:String a = null;String b = ;String c = ;其中null,沒有分配堆內(nèi)存空間,b分配了堆內(nèi)存空間,里面放了一個空格;c雖然分配了內(nèi)存空間,但是沒有放東西。36.字符串拼接:不用String 而是用StringBuff
44、er.append(),前者的對內(nèi)存限定了,改變后重新分配內(nèi)存;后者可以添加內(nèi)存。就像前面是不能加車廂的汽車,每次都得換車;后者是可以加車廂的汽車。37.面向?qū)ο缶幊探蠴OP,還有一門知識叫OOAD(面向?qū)ο蟮姆治雠c設(shè)計),在OOAD中,繼承又叫派生,父類又叫超類。38.Override注釋:第四種注釋,給java編譯器看的,在編譯階段提示錯誤,在重寫父類方法時,一般加上此注釋,表示此方法是重寫的父類方法。39.Deprecated注釋:此方法不推薦使用(看文檔時),一般會有功能更強大的方法代替。SuppressWarrin40.繼承的7點特性:a.子類擁有父類的屬性和方法b.子類可以有自己行
45、的屬性和方法c.子類可以重寫父類的方法d.可以聲明父類,創(chuàng)建子類d_1.聲明什么類型,就只能調(diào)用什么類型的方法d_2.創(chuàng)建什么類型,運行什么類型的方法d_3要使用創(chuàng)建類型的方法,必須得強制轉(zhuǎn)化類型。41.this與super關(guān)鍵字 一般在子類中使用,this表示調(diào)用自己聲明的屬性和方法;super表示父類聲明的屬性和方法。static方法中不能使用this與super關(guān)鍵字。42.繼承中的構(gòu)造方法 創(chuàng)建對象一定會調(diào)用構(gòu)造方法? 創(chuàng)建子類對象一定會調(diào)用父類的構(gòu)造方法? 子類默認調(diào)用父類無參構(gòu)造方法? 子類只能調(diào)用父類存在的構(gòu)造方法? 子類構(gòu)造方法中使用super調(diào)用父類構(gòu)造方法,并且super必
46、須放在第一行? 構(gòu)造方法中this表示調(diào)用本類其他構(gòu)造方法,并且this必須放在第一行43.封裝定義:隱藏屬性,方法和方法實現(xiàn)細節(jié)的過程成為封裝。45.方法的說明符 方法的訪問說明符 1.public 任何地方都可以訪問 2.protected 子類或者同包,同類可以訪問,但是其它包的非子類不可以訪問 3.default 只有同類或者同包可以訪問 4.private 私有的方法,這里的私有指的是被被class所私有,其他類不能訪問,繼承的類也不行。 方法的其他說明符 1.static 2.final 此方法不可以被子類覆蓋。 3.abstract 抽象的方法 4.native 用戶可以使用,但
47、是不能編寫的類。 5.synchronized 同步的方法面向?qū)ο?面向?qū)ο蟮某绦蜷_發(fā)實際上分為三種:OOA OOD OOP |-OOA:面向?qū)ο蟮姆治?|-OOD:面向?qū)ο笤O(shè)計 |-OOP:面向?qū)ο蟪绦?三大特性:封裝、繼承、多態(tài)。 對象的創(chuàng)建及使用:Person zcy = null;/聲明對象 zcy=new Person();/實例化對象 Person zcy = new Person(); 方法不需要創(chuàng)建,直接使用。47.封裝性 封裝性有很多體現(xiàn),但是最簡單的體現(xiàn)是假如“private”關(guān)鍵字。48.實體類:在開發(fā)過程中,有一些類與數(shù)據(jù)庫緊密聯(lián)系,其叫法有幾種,常用的有,entity
48、 實體類;vo類 value object 值傳遞;dto,data transmission object 數(shù)據(jù)傳輸對象。Static49.static普通變量通過對象名.變量訪問;而static變量通過類命.變量訪問,因為static 修飾的變量為類變量。50.final,當定義一常量時,用final修飾,變量名大寫,通常情況下,final修飾,前面加上static,但是反之不成立!51.static方法,靜態(tài)方法,同樣是通過類名.方法名調(diào)用。靜態(tài)方法里面不能調(diào)用非靜態(tài)變量;靜態(tài)方法下面不能使用this,super等關(guān)鍵字。靜態(tài)方法中不能訪問普通方法,但可以調(diào)用靜態(tài)方法;即靜態(tài)方法里面不能
49、出現(xiàn)非靜態(tài)的東西。52.靜態(tài)塊:在虛擬機加載類時就調(diào)用,不需要等到創(chuàng)建對象時執(zhí)行。sun公司不推薦使用。多態(tài)53.方法重載相同的方面名稱,不同的參數(shù)列表(個數(shù)和類別不同),同時出現(xiàn)在一個類中。54.方法重寫:在子類中產(chǎn)生與父類相同的方法頭(參數(shù)列表也相同),但是方法體不同,屬于方法重寫,與方法重載有根本區(qū)別。子類也可以重載父類的方法,只是父子類的方法重載。55.多態(tài)定義:多種形態(tài),多種形式,多種表現(xiàn)形態(tài)。最直接的表現(xiàn)形式是方法重寫(父子類之間),方法重載(一個類里面)。抽象類,接口都為接口服務。abstract56.抽象方法(abstract):由abstract關(guān)鍵字修飾的方法叫做抽象方法,
50、只有方法頭沒有方法體。56.抽象類(abstract):由abstract關(guān)鍵字修飾的類叫做抽象類。只能聲明,不能創(chuàng)建。有抽象方法的類一定是抽象類,但抽象類不一定是抽象方法。當想讓一個方法只能被繼承,但是不能創(chuàng)建時,用到此種情況。57.抽象類子類:1實現(xiàn)父類的所有的抽象方法,2.或者自己聲明為抽象類,3.或者部份實現(xiàn)父類的方法,但自身還是要聲明成抽象類。58.取隨機數(shù):Random random = new Random();int selectTndex = random.nextInt(3);System.out.println(selectTndex);59.接口(interface):
51、接口是一系列方法(功能)的聲明,即沒有實現(xiàn)任何方法的抽象類(沒有abstract關(guān)鍵字,但出現(xiàn)也不會報錯);命名時,前面加上大寫字母I,在其子類中,子類 implements 接口,implements在這里是實現(xiàn)的意思。子類要么實現(xiàn)接口的所有方法,要么把自己變成抽象類。60.接口特點:一個子類可以實現(xiàn)多個接口,即變相的多繼承。接口可以繼承接口,一個接口可以繼承多個接口。接口只能聲明不能創(chuàng)建。61.接口的分類:a.普通接口,即一系列方法的聲明;b.常量接口,項目中常用的一些常量。C.標識接口(空方法接口),子類實現(xiàn)此接口,表示屬于某個體系接口,具有某種功能。Java中級HTML知識點:Html
52、怎么轉(zhuǎn)換成jsp頁面供程序員使用1.首行加上代碼2.重命名為jsptable修飾代碼鼠標來去特效與區(qū)別同樣是標示一個儲存格,唯一不同的是所標示的儲存格中的文字是以粗體出現(xiàn)URL重寫jjj.jsp?參數(shù)名稱=參數(shù)值&參數(shù)名稱=參數(shù)值&參數(shù)名稱=參數(shù)值方法重寫可以通過鏈接頁面跳轉(zhuǎn)傳遞參數(shù),其作用和表單中的隱藏域作用一樣。跳轉(zhuǎn)服務器跳轉(zhuǎn)和客戶端跳轉(zhuǎn):跳轉(zhuǎn)之后地址沒變,稱為服務器跳轉(zhuǎn),地址改變稱為客戶端跳轉(zhuǎn)。跳轉(zhuǎn)方式:客戶端跳轉(zhuǎn)setHeader() response.setHeader(refresh,2;url=ddd.jsp);屬于客戶端跳轉(zhuǎn)response.sendRedirect(DDD,J
53、SP);客戶端跳轉(zhuǎn),頁面執(zhí)行完畢之后再跳轉(zhuǎn),但是不能出傳遞request范圍的屬性。服務器跳轉(zhuǎn);服務器跳轉(zhuǎn),屬于無條件跳轉(zhuǎn),后面的內(nèi)容不執(zhí)行,故而數(shù)據(jù)庫的關(guān)閉不能放在后面。頁面間的兩種跳轉(zhuǎn)服務器跳轉(zhuǎn):超鏈接跳轉(zhuǎn)ssssscookie使用方法:Cookie c1 = new Cookie (dd,ddd); response.addCookie(c1);Cookie c = request.getCookies();for (int i=0;i-注意:發(fā)現(xiàn)瀏覽器關(guān)閉后,不能取得cookie內(nèi)容,原因為其內(nèi)容僅保存在瀏覽器中,并沒有保存在本地,保存本地,其保存時間必需得到設(shè)置。cl.setMaxA
54、ge(22);/插入此代碼即可out.println()out.println()的換行去哪里了呢?這個換行只是針對于源文件中的換行,但是此換行會被HTML忽略掉,所以如果需要換行,可以直接編寫html語句。兩種include指令 include指令和指令語法格式為: include: 指令有兩種格式:語法一: 語法二: /想頁面1中傳遞參數(shù),再包含在本頁面中 四種屬性每種屬性都有三種操作方法:1.設(shè)置屬性setAttribute(String name,Object value) 取得屬性getAttribute (String name) 刪除屬性(removeAttribute)2.屬性
55、范圍 pageContext 范圍僅本頁面 范例:pageContext.setAttribute(name,mldn);/設(shè)置屬性 String re = (String)pageContext.getAttribute(name);/取得屬性 requset 屬性范圍表示在一次服務器跳轉(zhuǎn)中有效,只要是服務器跳轉(zhuǎn),則設(shè)置的request屬性可以一直傳遞下去,超鏈接則不行。 范例:request.setAttribute(name,dd); String ddd = (Sring)request.getAttribute(name); session 屬性范圍僅為一個客戶,兩種跳轉(zhuǎn)都可以 范例
56、:seesion.setAttriute(name,dddd); String dddd = (String)seesion.getAttribute(ddd) application 范圍是在服務器上面設(shè)置一個屬性,所以一旦設(shè)置后任何用戶都可以瀏覽到此屬性。如果在服務器上設(shè)置過多的Application屬性,則會影響到服務器的餓性能。 亂碼轉(zhuǎn)換:產(chǎn)生原因:所有靜態(tài)web的執(zhí)行流程,是先從服務器上取得一個頁面,之后通過把內(nèi)同提交給服務器,之后服務器在提交的內(nèi)容返回給客戶進行顯示。設(shè)置page指令后,本頁面輸入的中文會得到正確的顯示,但是接受到的從其他頁面的參數(shù)卻還是亂碼,解決方法有兩個:第一個
57、直接把接受到的內(nèi)容用服務器返回給客戶的進行顯示,即加上str=new String(str.getBytes(ISO8859-1);/轉(zhuǎn)碼 第二種方法為:前面加上 request.getCharacterEnocoding(gbk);/按中文接受。兩種方法的區(qū)別為:第一種是接受了再轉(zhuǎn)換,第二種是轉(zhuǎn)換了再接受。接收多個同名參數(shù)在表單中,存在復選框,接收方法如下:abc若String inst = request.getParameter(inst);接收內(nèi)容只為選項最前面一個,解決方法如下:String inst = request.getParameteValues(inst);/接收表單參數(shù)
58、% for(int i=0;i 、配置tomcat虛擬目錄。1.文件目錄結(jié)果必須為:WEB TOOT/WEB-INF/WEB.xml。WEB.xml文件有格式要求??梢钥截怐:Tomcat 6.0webappsROOTWEB-INF里面的文件,但是注釋內(nèi)容去掉。2.修改serve.xml 正確位置加上:3.conf/web.xmllistings下面false改為true,項目完成記得改過來。登錄代碼系統(tǒng)登錄 用戶名:密碼: 錯誤的用戶名或者密碼! if(!(.equals(name)|name=null)&(.equals(password)|password=null)這條很重要!Stri
59、ng轉(zhuǎn)換package com.zcy;/* * author yangzhi * */public class Test04 public static void main(String args) String str1 = 10;String str2 = 10.2;String str3 = boolean;/與基本數(shù)據(jù)類型對應的有八個包裝類int a = Integer.parseInt(str1);System.out.println(a);float b = Float.parseFloat(str2); System.out.println(b);boolean c = Boo
60、lean.parseBoolean(str3);System.out.println(c);輸入輸出package com.zcy;import java.util.Scanner;/* * 測試輸入輸出 * author 楊志 * */public class Test03 public static void main(String args) Scanner input = new Scanner(System.in);int age;float money;String name;System.out.println(請輸入您的姓名:);name = input.next();Syst
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石英晶體濾波器制造工崗前進度管理考核試卷含答案
- 鐵合金原料工安全技能水平考核試卷含答案
- 藥品購銷員崗前崗位水平考核試卷含答案
- 糖汁過濾工崗前安全意識強化考核試卷含答案
- 工業(yè)車輛維修工安全生產(chǎn)基礎(chǔ)知識水平考核試卷含答案
- 鍋爐操作工沖突解決考核試卷含答案
- 自輪運轉(zhuǎn)設(shè)備檢修工復測強化考核試卷含答案
- 煉油樹脂工安全理論考核試卷含答案
- 偏鎢酸銨制備工風險評估競賽考核試卷含答案
- 普通銑工崗前時間管理考核試卷含答案
- 2025影像引導肺部腫瘤微波消融術(shù)圍術(shù)期護理專家共識
- 鋁合金鑄造生產(chǎn)車間布局設(shè)計方案
- 2025年國家開放大學《憲法學》期末考試復習題庫及答案解析
- 河南省2025年普通高中學業(yè)水平合格性考試思想政治試題及答案
- 多層折彎板施工方案設(shè)計
- 高二 英語 選擇性必修第一冊《Unit5 B4U5 Developing ideas》課件
- 2025年內(nèi)蒙古公務員錄用考試《行測》真題及答案解析
- 市政維護安全培訓
- 《python程序設(shè)計》題庫含答案
- 2025 SF-36健康調(diào)查量表
- 3.3《立體圖形的拼搭》(課件)-2025-2026學年一年級數(shù)學上冊 西師大版
評論
0/150
提交評論