馬士兵 J2SE第三章 面向?qū)ο缶幊?個(gè)人學(xué)習(xí)筆記
《馬士兵 J2SE第三章 面向?qū)ο缶幊?個(gè)人學(xué)習(xí)筆記》由會(huì)員分享,可在線閱讀,更多相關(guān)《馬士兵 J2SE第三章 面向?qū)ο缶幊?個(gè)人學(xué)習(xí)筆記(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、尚學(xué)堂科技_馬士兵_JAVA視頻教程_J2SE_5.0_第03章_面向?qū)ο?聽(tīng)課筆記 09.12.5- by LoveXForce 第三章. 面向?qū)ο缶幊? 一、 面向?qū)ο缶幊趟枷? 從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方式 面向?qū)ο蟾訌?qiáng)調(diào)運(yùn)用人類(lèi)在日常的思維邏輯中經(jīng)常才贏的思想方法與原則,如抽象分類(lèi),繼承,聚合,多態(tài) 二、 對(duì)象和類(lèi)的概念 1. 對(duì)象用計(jì)算機(jī)語(yǔ)言對(duì)問(wèn)題域中食物的描述,對(duì)象通過(guò)“屬性(attribute)”和“方法(method)”來(lái)分別對(duì)應(yīng)事物所具有的靜態(tài)屬性和動(dòng)態(tài)屬性 對(duì)象是屬性(成員變量)和方法的集合。{一類(lèi)事
2、物的具體的某一個(gè)東西(符合這類(lèi)事物的具體特征的某個(gè)東西)叫對(duì)象} 2. 類(lèi)是同種對(duì)象的集合與抽象,類(lèi)中定義了這一類(lèi)對(duì)象所應(yīng)具有的靜態(tài)和動(dòng)態(tài)屬性。 關(guān)系:類(lèi)可以看成一類(lèi)對(duì)象的模板,對(duì)象可以看成該類(lèi)的一個(gè)具體實(shí)例,瓶子是一個(gè)類(lèi),某個(gè)瓶子就是對(duì)象 實(shí)體 類(lèi) 對(duì)象 實(shí)體 對(duì)象 類(lèi) 車(chē) 輪 車(chē) 窗 …… int輪 車(chē) char窗 …… 代碼 實(shí)體 職員A 職員 -姓名 -年齡 -目前工資 +顯示姓名() +顯示年齡() +修改姓名() +領(lǐng)取工資() 職員A:職員 姓名 = A 年齡 = 30 目前工資= 800
3、職員B:職員 姓名 = B 年齡 = 350 目前工資= 900 認(rèn)識(shí)過(guò)程: 分析過(guò)程 三、 面向?qū)ο笤O(shè)計(jì)思想和步驟: (1) 分析問(wèn)題中有哪些類(lèi)那些對(duì)象 (2) 分析這些對(duì)象中應(yīng)該具有的屬性和方法 (3) 分析類(lèi)與類(lèi)之間的關(guān)系 四、 Java與面向?qū)ο? 1. 對(duì)象是Java程序的核心,在java程序中“萬(wàn)事萬(wàn)物皆對(duì)象”。 2. 對(duì)象可以看成靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬性(方法)的封裝體 3. 類(lèi)是用來(lái)創(chuàng)建統(tǒng)一類(lèi)型的對(duì)象的“模板”,在一個(gè)類(lèi)中定義了該類(lèi)對(duì)象所應(yīng)具有的成員變量以及方法 4. J2SDK提供了很多類(lèi)供編程人員使用,編程人員也可以自定義自己
4、的類(lèi)
五、 Java類(lèi)的定義
類(lèi)的定義主要由成員變量和方法組成
聲明成員變量: [
5、 = 20; void Person(int _id, int _age) { id = _id; age = _age; } public static void main(String[] args) { Person tom = new Person(); tom.Person(1, 25); //Person jerry = new Person(); Point p = new Point(); } } class Point { Point() {} int x; int y; } 六、 成員變量 成員變量可
6、以使用java語(yǔ)言中任何一種數(shù)據(jù)類(lèi)型(包括基本類(lèi)型和引用類(lèi)型),作用范圍為整個(gè)類(lèi)體 注意: 局部變量必須賦初試值才可以使用, 成員變量不用初始化,java系統(tǒng)會(huì)給你賦初始值 Byte,short,int----->0 Long ----->0L char ----->’\u0000’ float ----->0.0F double ----->0.0D bloolean ----->false 所有引用類(lèi)型 ----->Null java中成員變量和局部變量的區(qū)別 比較項(xiàng)目
7、 位置 作用范圍 賦初值問(wèn)題 修飾 定義 存儲(chǔ)位置 分類(lèi) 引用問(wèn)題 局部變量 方法或語(yǔ)句塊內(nèi)部(方法的參數(shù)) 小 方法體.語(yǔ)句塊內(nèi)部 必須手動(dòng)初始化 不能被控制修飾符及static修飾 可以定義為final型 棧 所有類(lèi)的成員變量可以通過(guò)this來(lái)引用。 成員變量: 方法外部、類(lèi)的內(nèi)部 大 整個(gè)類(lèi)體 自動(dòng)初始化(被final修飾且沒(méi)有static的必須顯式賦值) 能被控制修飾符及static修飾 可以定義為final型 堆 1實(shí)例變量 2類(lèi)變量(static靜態(tài)變量) 七、 引用類(lèi)型(C中的指針,占兩塊內(nèi)存) 除了java語(yǔ)言
8、中基本類(lèi)型以外的變量類(lèi)型 Java中的對(duì)象是通過(guò)引用對(duì)其操作的 內(nèi)存值 /* 聲明string類(lèi)型的引用變量,但是沒(méi)使它指向一個(gè)對(duì)象*/ String s null /* 使用new語(yǔ)句創(chuàng)建一個(gè)String類(lèi)型的對(duì)象并 用S指向它,以后可以通過(guò)S完成對(duì)其的操作*/ 0X3a123b 堆內(nèi)存 …… …… S = new String (“hello world!”); 0X3a123b
9、 如何在內(nèi)存中區(qū)分類(lèi)和對(duì)象? 類(lèi)是靜態(tài)的概念,代碼區(qū) 獨(dú)享是new出來(lái)的,位于堆內(nèi)存,類(lèi)的每個(gè)成員變量在不同的對(duì)象中都有不同的值(除了靜態(tài)變量) 而方法只有一份,執(zhí)行的時(shí)候才占用內(nèi)存 八、 對(duì)象的創(chuàng)建和使用 1. 必須使用new關(guān)鍵字創(chuàng)建對(duì)象 2. 使用:對(duì)象(引用) .隊(duì)員變量 來(lái)引用對(duì)象的成員變量 3. 使用:對(duì)象(引用).方法(參數(shù)列表)來(lái)調(diào)用對(duì)象的方法 4. 同一對(duì)象的每個(gè)對(duì)象有不同的成員變變量存儲(chǔ)空間 5. 同一類(lèi)的每個(gè)對(duì)象共享該類(lèi)的方法 九、 Java的方法定義 Java的方法類(lèi)似于其他語(yǔ)言的函數(shù),是一段用來(lái)完成特定功能的代碼片段,聲明格式為: [修飾
10、符1 修飾符2 …..] 返回值類(lèi)型 方法名( 形式參數(shù)列表 ){ Java 語(yǔ)句;… … … } 語(yǔ)法解釋?zhuān)? 1. 形式參數(shù):在方法被調(diào)用時(shí)用于接收外界輸入的數(shù)據(jù)。 2. 實(shí)參:調(diào)用方法時(shí)實(shí)際傳給方法的數(shù)據(jù)。 3. 返回值:方法在執(zhí)行完畢后返回給調(diào)用它的環(huán)境的數(shù)據(jù)。 4. 返回值類(lèi)型:事先約定的返回值的數(shù)據(jù)類(lèi)型,無(wú)返回值,必須給出返回類(lèi)型viod。 A. Java語(yǔ)言中使用下述形式調(diào)用方法:對(duì)象名.方法名(實(shí)參列表) B. 實(shí)參的數(shù)目、數(shù)據(jù)類(lèi)型和次序必須和所調(diào)用方法聲明的形式列表匹配。 C. return語(yǔ)句中止方法的運(yùn)行并指定要返回的數(shù)據(jù)。 Java中進(jìn)行
11、函數(shù)調(diào)用中傳遞參數(shù)時(shí),遵循傳遞的原則: 基本類(lèi)型傳遞的是該數(shù)據(jù)本身,引用類(lèi)型傳遞的是對(duì)象的引用,不是對(duì)象本身 十、 類(lèi)和對(duì)象關(guān)系(內(nèi)存中) 03_JAVA中的面向?qū)ο笈c內(nèi)存解析_1.avi 04_JAVA中的面向?qū)ο笈c內(nèi)存解析_2.avi 類(lèi)C的代碼 ( code seg) ( heap seg) XXXX XXXX XXXX XXXX C1.i C1.j C2.i C2.j C1 C2 Class C{ int i; int j; ….main…{ C c1 = new C( ); C
12、 c2 = new C( ); } } 十一、 構(gòu)造函數(shù) 2009-12-9 13:44 04_JAVA中的面向?qū)ο笈c內(nèi)存解析_2.avi 構(gòu)造函數(shù)是定義在java類(lèi)中的一個(gè)用來(lái)初始化對(duì)象的函數(shù) 1. 構(gòu)造函數(shù)名字與類(lèi)的名字相同,大小寫(xiě)也保持一致 2. 使用new+構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象 3. 構(gòu)造函數(shù)與類(lèi)同名切沒(méi)有返回值。即便是void也不能寫(xiě) 4. 注意:當(dāng)無(wú)指定構(gòu)造函數(shù)時(shí),編譯器為類(lèi)自動(dòng)添加形為: 類(lèi)名( ) { } 的構(gòu)造方法 例如:Person類(lèi)的構(gòu)造函數(shù) public class Person{ int id; TOM j
13、rry 1 25 堆內(nèi)存 1 27 XXXXX #### int age = 20; Person(int _id , int _age){ Id = _id Age = _age; } } Public static void main ( String[ ] agrs){ Person tom = new Person(1,25); Person jrry = new Person(1,27); } 內(nèi)存詳細(xì)過(guò)程詳解: 堆內(nèi)存 Tom:xxx _id:1 _age:25 調(diào)用構(gòu)造
14、函數(shù)(方法局部變量) new一個(gè)Person對(duì)象 調(diào)用完成后方法、局部變量消失 Id:1 age:25 十二、 約定俗成的命名規(guī)則 類(lèi)名的首字母大寫(xiě) 變量名和方法名的首字母小寫(xiě) 運(yùn)用駝峰標(biāo)示 十三、 內(nèi)存分析過(guò)程 視頻: J2SE_5.0_第03章_面向?qū)ο?06_內(nèi)存解析_1.avi 07_內(nèi)存解析_2.avi 源碼: TestBirthdate\Test.java 31 class BirthDate { private int day; private int month; private int year;
15、 public BirthDate(int d, int m, int y) { day = d; month = m; year = y; } public void setDay(int d) { day = d; } public void setMonth(int m) { month = m; } public void setYear(int y) { year = y;
16、 } public int getDay() { return day; } public int getMonth() { return month; } public int getYear() { return year; } public void display() { System.out.println (day + " - " + month + " - " + year); }
17、} public class Test{ public static void main(String args[]){ Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.chang
18、e3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){ i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b)
19、 { b.setDay(22); } } 調(diào)用過(guò)程演示(1) 棧內(nèi)存 d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); @ test.change1(date);
20、 test.change2(d1); test.change3(d2); ….. …… …… …… public void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 5
21、87934 354752 調(diào)用過(guò)程演示(2) 棧內(nèi)存 change1à i d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1)
22、; test.change3(d2); ….. …… …… …… public void change1(int i) { @ i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 9
23、 調(diào)用過(guò)程演示(3) 棧內(nèi)存 change1 à i d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1);
24、 test.change3(d2); ….. …… …… …… public void change1(int i) { i = 1234; @ } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 1234 調(diào)
25、用過(guò)程演示(4) 棧內(nèi)存 d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); @ test.change2(d1); test.change3(d2
26、); ….. …… …… …… public void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 調(diào)用過(guò)程演示(5)
27、 棧內(nèi)存 -->b change2 d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); …..
28、…… …… …… public void change1(int i) { i = 1234; } public void change2(BirthDate b) @ { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 587934 調(diào)用過(guò)程演示(6)
29、 棧內(nèi)存 -->b change2 d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); ….. ……
30、…… …… public void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } @ public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 587976 22 2 2004 調(diào)用過(guò)程演示(7)
31、 棧內(nèi)存 d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); @ test.change3(d2); ….. ……
32、…… …… public void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 調(diào)用過(guò)程演示(8) 棧內(nèi)存
33、 change3—>b d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); ….. …… …… ……
34、public void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) @{ b.setDay(22); } 7 7 1970 1 1 2000 110925 9 587934 354752 354752 調(diào)用過(guò)程演示(9) 棧內(nèi)存 change
35、3—>b d2 d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); ….. …… …… …… public
36、void change1(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } @ 7 7 1970 22 1 2000 110925 9 587934 354752 354752 調(diào)用過(guò)程演示(10) 棧內(nèi)存 d2
37、d1 main date test 堆內(nèi)存 Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); @ ….. …… …… …… public void change1
38、(int i) { i = 1234; } public void change2(BirthDate b) { b = new BirthDate(22,2,2004); } public void change3(BirthDate b) { b.setDay(22); } 7 7 1970 22 1 2000 110925 9 587934 354752 08_內(nèi)存解析_3.avi test:xxx date:9 d1:xxxx 22 1 2000 7 7 19
39、70 D2:xxxx 練習(xí): 視頻: 09_練習(xí).avi 10_答案.avi 11_內(nèi)存解析.avi 源碼:TestPoint\TestPoint.java class Point { double x, y, z; Point(double _x, double _y, double _z) { x = _x; y = _y; z = _z; } void setX(double _x) { x = _x; } double getDistance(Point p) { return (x - p.x)*(
40、x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z); } } public class TestPoint { public static void main(String[] args) { Point p = new Point(1.0, 2.0, 3.0); Point p1 = new Point(0.0, 0.0, 0.0); System.out.println(p.getDistance(p1)); p.setX(5.0); System.out.println(p.getD
41、istance(new Point(1.0, 1.0, 1.0))); } } 內(nèi)存調(diào)用過(guò)程見(jiàn)視頻 stack p1:xxx p:xxx heap 5.0 2.0 3.0 0.0 2009-12-9 19:43:33 十四、 方法重載 OverLoad 2009-12-11 10:45:05 方法的重載指一個(gè)類(lèi)中可以定義有相同的名字,但參數(shù)個(gè)數(shù)不同和參數(shù)類(lèi)型不同的多個(gè)方法。調(diào)用時(shí)會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)方法 能被編譯器區(qū)分的方法既是構(gòu)成重載 構(gòu)造函數(shù)(方法)也可以重載 見(jiàn)二十三、繼承中的構(gòu)造方法 P20 方
42、法重載可以改變返回值的類(lèi)型。(不知道為什么2009-12-12 21:24:11) 例子1 12_方法重載與內(nèi)存解析.avi TestOverLoad.java public class TestOverLoad { public static void main(String[] args) { Person p = new Person(); Person p1 = new Person(400); Person p2 = new Person(2, 500); p.info(); p.info("ok"); } } class Pers
43、on { //定義三個(gè)靈活的方法 Person() { id = 0; age = 20; } Person(int _id) { id = _id; age = 23; } Person(int _id, int _age) { id = _id; age = _age; } //成員變量定義 private int id; private int age = 20; //方法定義 public int getAge() {return age;} public void setA
44、ge(int i) {age = i;} public int getId() {return id;} void info() { System.out.println("my id is : " + id); } void info(String t) { System.out.println(t + " id " + id); } } 例子2 12_方法重載與內(nèi)存解析.avi TestOverload\test.java public class Test { void max(int a , int b) {
45、 System.out.println( a > b ? a : b ); } 參數(shù)類(lèi)型不同,可以被 編譯器識(shí)別 void max(short a , short b) { System.out.println("short"); System.out.println( a > b ? a : b ); } void max(float a, float b) { System.out.println( a > b ? a : b ); 參數(shù)返回類(lèi)型不同,構(gòu) }
46、成重名不能被編譯器 識(shí)別 int max(float a, float b) { System.out.println( a > b ? a : b ); } public static void main(String[] args) { Test t = new Test(); t.max(3, 4); short a = 3; short b = 4; t.max(a, b); } } 十五、 對(duì)象創(chuàng)建與使用_復(fù)習(xí)與練習(xí) 源碼:TestCi
47、rcle.java 視頻:14_TestCircle程序分析_1.avi 15_TestCircle程序分析_2.avi 16_TestCircle程序分析_3.avi class Point { private double x; private double y; Point(double x1, double y1) { x = x1; y = y1; } public double getX() { return x; } public double getY() { return y; }
48、 public void setX(double i) { x = i; } public void setY(double i) { y = i; } } // class Circle { private Point o; private double radius; Circle(Point p, double r) { o = p; radius = r; } Circle(double r) { o = new Point(0.0, 0.0); r
49、adius = r; } boolean contains(Point p) { double x = p.getX() - o.getX(); double y = p.getY() - o.getY(); if(x*x + y*y > radius * radius) return false; else return true; } public void setO(double x, double y) { o.setX(x);
50、 o.setY(y); } public Point getO() { return o; } public double getRadius() { return radius;} public void setRadius(double r) { radius = r;} public double area() { return 3.14 * radius * radius; } } public class TestCircle { public static void main(Str
51、ing args[]) { Circle c1 = new Circle(new Point(1.0,2.0), 2.0); Circle c2 = new Circle(5.0); System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius()); System.out.println("c2:("+c2.getO().getX() +","+c2.getO().g
52、etY()+"),"+c2.getRadius()); System.out.println("c1 area = "+c1.area()); System.out.println("c1 area = "+c2.area()); c1.setO(5,6); c2.setRadius(9.0); System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius());
53、 System.out.println("c2:("+c2.getO().getX()+"," +c2.getO().getY()+"),"+c2.getRadius()); System.out.println("c1 area = "+c1.area()); System.out.println("c1 area = "+c2.area()); Point p1 = new Point(5.2, 6.3); System.out.println(c1.contains(
54、p1)); System.out.println(c1.contains(new Point(10.0,9.0))); } } stack c1:xxxx c2:xxxx p1:xxx heap o 5.0 o 5.0 0.0 6.0 0.0 5.0 5.2 6.3 十六、 this關(guān)鍵字 定義:在類(lèi)的方法定義中使用this關(guān)鍵字代表使用該方法的對(duì)象引用 使用 this (argument_list) 調(diào)用本類(lèi)的另外的構(gòu)造方法 使用this.xxx = xxx 獲取本類(lèi)另外一個(gè)構(gòu)造方法傳
55、來(lái)的值 構(gòu)造函數(shù)和一般成員函數(shù)在繼承中的區(qū)別的練習(xí) 使用:當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(shí)要使用this 有時(shí)使用this可以處理方法中成員變量和參數(shù)重名情況 this可以看做一變量,它的值是當(dāng)前對(duì)象引用 this void print( ) { System.out. println("i = "+i );} public static void main(String [] args){ Leaf leaf = new Leaf(100); leaf.increament().increament().print(); } } 十七、 St
56、atic關(guān)鍵字 1. 在類(lèi)中,使用static聲明的成員變量為靜態(tài)成員變量,它為該類(lèi)的公用變量,在第一次使用時(shí)被初始化,對(duì)該類(lèi)的所有對(duì)象來(lái)說(shuō),static成員變量只有一份。 2. 用static聲明的方法為靜態(tài)方法,在調(diào)用該方法時(shí),不會(huì)將對(duì)象的引用傳遞給它,所以在static方法中不可訪問(wèn)非static的成員。 - ----靜態(tài)方法不再是針對(duì)某個(gè)對(duì)象調(diào)用,所以不能訪問(wèn)非靜態(tài)成員 3. 可以通過(guò)對(duì)象引用或者類(lèi)名(不需實(shí)例化)訪問(wèn)靜態(tài)成員。 如 類(lèi)名.靜態(tài)成員變量 System.out out就是靜態(tài)的 4. 靜態(tài)變量可以用來(lái)計(jì)數(shù)。(main方法可以直接調(diào)用) 5. 我覺(jué)得就是在使
57、用內(nèi)部類(lèi)時(shí)使用, 如果不需要內(nèi)部類(lèi)隊(duì)形想與其外圍類(lèi)之間有聯(lián)系,那么可以將內(nèi)部類(lèi)聲明為 static,這通常叫 嵌套類(lèi). 嵌套類(lèi)意味著: 1 要?jiǎng)?chuàng)建嵌套類(lèi)的對(duì)象,并不需要其外圍類(lèi)的對(duì)象. 2 不能從嵌套類(lèi)的對(duì)象中訪問(wèn)非靜態(tài)類(lèi)的外圍類(lèi)對(duì)象! 用Static聲明的 叫 屬性(特點(diǎn)) 用處 位置 訪問(wèn) 變量(成員變量) 靜態(tài)成員變量 該類(lèi)的公用變量,在第一次使用時(shí)被初始化,對(duì)該類(lèi)的所有對(duì)象來(lái)說(shuō),static成員變量只有一份 計(jì)數(shù) 數(shù)據(jù)區(qū) (data seg) 類(lèi)名.靜態(tài)成員變量 方法 靜態(tài)方法 在調(diào)用該方法時(shí),不會(huì)將對(duì)象
58、的引用傳遞給它,所以在static方法中不可訪問(wèn)非static的成員。 6. 例子 源碼:Cat.java 視頻:18_static關(guān)鍵字_1.avi 19_static_關(guān)鍵字_2.avi public class Cat { private static int sid = 0; private String name; int id; Cat(String name) { this.name = name; id = sid++; } public void inf
59、o(){ System.out.println ("My name is "+name+" No."+id); } public static void main(String arg[]){ Cat.sid = 100; Cat mimi = new Cat("mimi"); mimi.sid = 2000; Cat pipi = new Cat("pipi"); mimi.info(); pipi.info(
60、); } } 十八、 package和import 2009-12-11 15:00:21 1. java引入包(package)機(jī)制提供類(lèi)的多重類(lèi)命名空間。 2. package語(yǔ)句作為java源文件第一句,指明該文件定義的類(lèi)所在包。 package pkg1[.pkg2[.pkg3 ….]]; 約定俗成的命名:com.域名.xxx 3. java編譯器把語(yǔ)句對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)句中使用” . ”點(diǎn)值指明包(目錄)層次 如 .sxt; 指的是該文件中所有類(lèi)位于.\com\sxt目錄下 4. Java引入import機(jī)制簡(jiǎn)化包
61、的引入 總結(jié):1聲明包:package.pkg.xxx 而編譯好的文件xx.class必須位于正確目錄下 pkg\xx\... 2 使用包,在另一個(gè)類(lèi)中使用包中的類(lèi),必須寫(xiě)全名稱(chēng), 3 可以用import關(guān)鍵詞,在文件開(kāi)頭引入要使用的類(lèi),如import com.bjsxt.java.* 4 可以不需要用import語(yǔ)句而直接使用java.lang包中的類(lèi) 5 其它類(lèi)訪問(wèn)的飛方式: 寫(xiě)全名 引入import(具體類(lèi)名 * ) 注意:訪問(wèn)位于同一個(gè)包中的類(lèi)不需要引入 6 必須class文件的最上層包的父目錄位于classpath下 例子:1最
62、初始使用包的方法在classpath的testpackage目錄下 20_package和import語(yǔ)句_1 2 3 4.avi Dog.java public class Dog { public static void main(String[] args) { com.bjsxt.java140.Cat c = new com.bjsxt.java140.Cat();//寫(xiě)全名 } } \com\bjsxt\java140\cat.java位于正確的目錄下 package com.bjsxt.java140;//聲明包 class Cat { }
63、 2簡(jiǎn)化使用包的方法在classpath的testpackage目錄下 Dog.java import com.bjsxt.java140.*;//指定包的位置 public class Dog { public static void main(String[] args) { Cat c = new Cat();//不需要寫(xiě)全名 } } \com\bjsxt\java140\cat.java位于正確的目錄下 package com.bjsxt.java140;//聲明包 class Cat { } J2SDK中主要包的介紹 Jdk目錄下j
64、re\lib\rt.jar 里面包含運(yùn)行時(shí)需要的所有class文件:就是一個(gè)classpath Java.lang java語(yǔ)言的核心類(lèi),如String、Math、integer、System和thread,提供常用功能 Java.awt 構(gòu)成抽象窗口工具集(abstract window toolkits)的多個(gè)類(lèi), Java.applet applet運(yùn)行所需的一些類(lèi) J 執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類(lèi) Java.io 提供多種輸入/輸出功能的類(lèi) Java.util 一些使用工具類(lèi),如地挪移系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù) 打包語(yǔ)句: 在classpath的testp
65、ackage目錄下輸入: jar –cvf test.jar *.* F:\DesignProjects\Java\testpackage\mxw.jar 課作為環(huán)境變量路徑,jar包里的東西都可使用, 十九、 訪問(wèn)控制 Java權(quán)限修飾符public protected private置于類(lèi)的成員定義前用來(lái)限定其他對(duì)象對(duì)該類(lèi)對(duì)象成員的訪問(wèn)權(quán)限 修飾符 類(lèi)內(nèi)部 同一個(gè)包 子類(lèi) 任何地方 private √ default √ √ protected √ √ √ public √ √ √ √ 對(duì)于class的權(quán)限修飾值可以用
66、public和default public類(lèi)可以在任意地方被訪問(wèn) default類(lèi)只可以被同一個(gè)包內(nèi)部的類(lèi)訪問(wèn) private私有類(lèi) 子類(lèi)擁有私有變量的所有權(quán),無(wú)使用權(quán)(只能看 不能動(dòng)) 例子: 25_繼承和權(quán)限控制_2.Avi 25_繼承和權(quán)限控制_2.Avi TestAccess.java TestProtected.java public class TestAccess { } class T { private int i = 0; int j = 0; protected int k = 0; public int m = 0; public void m() { i = 9; } } class TT { public void m( ) { T t = new T(); System.out.println( t.i );//不能訪問(wèn) System.out.println( t.j );//能訪問(wèn) } }
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教部編版教材三年級(jí)上冊(cè)道德與法治第四單元家是最溫暖的地方教學(xué)ppt課件 (全套)
- 蘇教版小學(xué)科學(xué)三年級(jí)下冊(cè)《雨下得有多大》課件1
- 花的形態(tài)與結(jié)構(gòu)課件匯總
- 一年級(jí)-數(shù)學(xué)下冊(cè)十幾減九人教版課件
- 電影膠片動(dòng)態(tài)課件
- 高電壓技術(shù)課件第六章
- 項(xiàng)目采購(gòu)管理(6)
- 四川省攀枝花市XX小學(xué)一年級(jí)數(shù)學(xué)下冊(cè)六100以內(nèi)的加法和減法二練習(xí)十三2課件蘇教版
- 山東省青島市黃島區(qū)海青鎮(zhèn)中心中學(xué)七年級(jí)歷史下冊(cè) 15 明朝君權(quán)的加強(qiáng)課件 新人教版
- 把握人物的性格特征
- 剪小紙人PPT課件
- 八年級(jí)物理探究凸透鏡成像規(guī)律8
- 1[1]22配方法2
- 近代機(jī)械行業(yè)唯物主義管理分析自然觀
- 全國(guó)科技創(chuàng)新大賽“科學(xué)幻想畫(huà)”獲獎(jiǎng)作品ppt課件