




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 J2SE_5.0第03章面向對象_筆記 第三章. 面向對象編程一、 面向對象編程思想從現實世界中客觀存在的事物出發(fā)來構造軟件系統(tǒng),并在系統(tǒng)的構造中盡可能運用人類的自然思維方式面向對象更加強調運用人類在日常的思維邏輯中經常才贏的思想方法與原則,如抽象分類,繼承,聚合,多態(tài)二、 對象和類的概念1. 對象用計算機語言對問題域中食物的描述,對象通過“屬性(attribute)”和“方法(method)”來分別對應事物所具有的靜態(tài)屬性和動態(tài)屬性對象是屬性(成員變量)和方法的集合。一類事物的具體的某一個東西(符合這類事物的具體特征的某個東西)叫對象2. 類是同種對象的集合與抽象,類中定義了這一類對象所應
2、具有的靜態(tài)和動態(tài)屬性。關系:類可以看成一類對象的模板,對象可以看成該類的一個具體實例,瓶子是一個類,某個瓶子就是對象實體類對象實體對象類車 輪車 窗 int輪車 char窗 代碼實體職員A職員-姓名-年齡-目前工資+顯示姓名()+顯示年齡()+修改姓名()+領取工資()職員A:職員姓名 = A年齡 = 30目前工資= 800職員B:職員姓名 = B年齡 = 350目前工資= 900認識過程:分析過程三、 面向對象設計思想和步驟:(1) 分析問題中有哪些類那些對象(2) 分析這些對象中應該具有的屬性和方法(3) 分析類與類之間的關系四、 Java與面向對象1. 對象是Java程序的核心,在jav
3、a程序中“萬事萬物皆對象”。2. 對象可以看成靜態(tài)屬性(成員變量)和動態(tài)屬性(方法)的封裝體3. 類是用來創(chuàng)建統(tǒng)一類型的對象的“模板”,在一個類中定義了該類對象所應具有的成員變量以及方法4. J2SDK提供了很多類供編程人員使用,編程人員也可以自定義自己的類五、 Java類的定義類的定義主要由成員變量和方法組成聲明成員變量: <modifiers> type<attr_name>=defaultValue例如:private int id;private int age = 20;聲明方法:<modifiers >< modifiers ><
4、;teturn_type><name>(<argu_list>)<statements> 例如:public int getAge( ) return age ;public class Person int id;int age = 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
5、();Point p = new Point();class Point Point() int x;int y;六、 成員變量成員變量可以使用java語言中任何一種數據類型(包括基本類型和引用類型),作用范圍為整個類體注意: 局部變量必須賦初試值才可以使用, 成員變量不用初始化,java系統(tǒng)會給你賦初始值Byte,short,int->0Long ->0Lchar ->u0000float ->0.0Fdouble ->0.0Dbloolean ->false所有引用類型 ->Nulljava中成員變量和局部變量的區(qū)別比較項目位置作用范圍賦初值問題修
6、飾定義存儲位置分類引用問題局部變量方法或語句塊內部(方法的參數)小 方法體.語句塊內部必須手動初始化不能被控制修飾符及static修飾可以定義為final型棧所有類的成員變量可以通過this來引用。成員變量:方法外部、類的內部大 整個類體自動初始化(被final修飾且沒有static的必須顯式賦值)能被控制修飾符及static修飾可以定義為final型堆1實例變量2類變量(static靜態(tài)變量)七、 引用類型(C中的指針,占兩塊內存)除了java語言中基本類型以外的變量類型Java中的對象是通過引用對其操作的 內存值/* 聲明string類型的引用變量,但是沒使它指向一個對象*/String
7、s null/* 使用new語句創(chuàng)建一個String類型的對象并用S指向它,以后可以通過S完成對其的操作*/ 0X3a123b堆內存 S = new String (“hello world!”); 0X3a123b如何在內存中區(qū)分類和對象?類是靜態(tài)的概念,代碼區(qū)獨享是new出來的,位于堆內存,類的每個成員變量在不同的對象中都有不同的值(除了靜態(tài)變量)而方法只有一份,執(zhí)行的時候才占用內存八、 對象的創(chuàng)建和使用1. 必須使用new關鍵字創(chuàng)建對象2. 使用:對象(引用) .隊員變量 來引用對象的成員變量3. 使用:對象(引用).方法(參數列表)來調用對象的方法4. 同一對象的每個對象有不同的成員變
8、變量存儲空間5. 同一類的每個對象共享該類的方法九、 Java的方法定義 Java的方法類似于其他語言的函數,是一段用來完成特定功能的代碼片段,聲明格式為:修飾符1 修飾符2 . 返回值類型 方法名( 形式參數列表 )Java 語句; 語法解釋:1. 形式參數:在方法被調用時用于接收外界輸入的數據。2. 實參:調用方法時實際傳給方法的數據。3. 返回值:方法在執(zhí)行完畢后返回給調用它的環(huán)境的數據。4. 返回值類型:事先約定的返回值的數據類型,無返回值,必須給出返回類型viod。A. Java語言中使用下述形式調用方法:對象名.方法名(實參列表)B. 實參的數目、數據類型和次序必須和所調用方法聲明
9、的形式列表匹配。C. return語句中止方法的運行并指定要返回的數據。Java中進行函數調用中傳遞參數時,遵循傳遞的原則:基本類型傳遞的是該數據本身,引用類型傳遞的是對象的引用,不是對象本身十、 類和對象關系(內存中) 03_JAVA中的面向對象與內存解析_1.avi 04_JAVA中的面向對象與內存解析_2.avi類C的代碼( code seg)( heap seg)XXXXXXXXXXXXXXXXC1.iC1.jC2.iC2.jC1C2Class Cint i;int j;.mainC c1 = new C( );C c2 = new C( );十一、 構造函數 2009-12-9 13
10、:44 04_JAVA中的面向對象與內存解析_2.avi構造函數是定義在java類中的一個用來初始化對象的函數1. 構造函數名字與類的名字相同,大小寫也保持一致2. 使用new+構造方法創(chuàng)建一個新的對象3. 構造函數與類同名切沒有返回值。即便是void也不能寫4. 注意:當無指定構造函數時,編譯器為類自動添加形為: 類名( ) 的構造方法例如:Person類的構造函數public class Personint id;TOMjrry125堆內存127XXXXX#int age = 20;Person(int _id , int _age)Id = _idAge = _age;Public st
11、atic void main ( String agrs)Person tom = new Person(1,25);Person jrry = new Person(1,27);內存詳細過程詳解:堆內存Tom:xxx_id:1_age:25調用構造函數(方法局部變量)new一個Person對象調用完成后方法、局部變量消失Id:1age:25 十二、 約定俗成的命名規(guī)則類名的首字母大寫變量名和方法名的首字母小寫運用駝峰標示十三、 內存分析過程視頻: J2SE_5.0_第03章_面向對象 06_內存解析_1.avi 07_內存解析_2.avi 源碼: TestBirthdateTest.java
12、33class BirthDate private int day; private int month; private int year; 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; public int getDay() return day; public int getMon
13、th() return month; public int getYear() return year; public void display() System.out.println (day + " - " + month + " - " + year); 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= ne
14、w BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(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) b.setDay(22);
15、調用過程演示(1) 棧內存d2d1maindatetest堆內存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(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,20
16、04); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752調用過程演示(2) 棧內存change1à id2d1maindatetest堆內存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)
17、;. 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); 77197011200011092595879343547529調用過程演示(3) 棧內存change1 à id2d1maindatetest堆內存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,
18、1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); 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); 77197011200011092595879343547521234調用過程演示(4) 棧內存d2
19、d1maindatetest堆內存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(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public voi
20、d change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752調用過程演示(5) 棧內存->bchange2 d2d1maindatetest堆內存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 c
21、hange1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752587934調用過程演示(6) 棧內存->bchange2 d2d1maindatetest堆內存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthD
22、ate d2= new BirthDate(1,1,2000); test.change1(date); 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); 77197011200011092595879343547525879762222004調用過程演示(7) 棧內存d2d1ma
23、indatetest堆內存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(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void ch
24、ange3(BirthDate b) b.setDay(22); 7719701120001109259587934354752調用過程演示(8) 棧內存change3>bd2d1maindatetest堆內存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
25、(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752354752調用過程演示(9) 棧內存change3>bd2d1maindatetest堆內存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2=
26、new BirthDate(1,1,2000); test.change1(date); 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); 77197022120001109259587934354752354752調用過程演示(10) 棧內存d2d1maindatetest堆內存
27、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(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthD
28、ate b) b.setDay(22); 7719702212000110925958793435475208_內存解析_3.avitest:xxxdate:9d1:xxxx2212000771970D2:xxxx練習: 視頻: 09_練習.avi 10_答案.avi 11_內存解析.avi源碼:TestPointTestPoint.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 getDi
29、stance(Point p) return (x - p.x)*(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.getDistance(
30、new Point(1.0, 1.0, 1.0);內存調用過程見視頻stackp1:xxxp:xxxheap5.02.03.00.02009-12-9 19:43:33十四、 方法重載 OverLoad 2009-12-11 10:45:05 方法的重載指一個類中可以定義有相同的名字,但參數個數不同和參數類型不同的多個方法。調用時會根據不同的參數表選擇對應方法能被編譯器區(qū)分的方法既是構成重載 構造函數(方法)也可以重載 見二十三、繼承中的構造方法 P20方法重載可以改變返回值的類型。(不知道為什么2009-12-12 21:24:11)例子1 12_方法重載與內存解析.aviTestOverL
31、oad.javapublic class TestOverLoad public static void main(String args) Person p = new Person();Person p1 = new Person(400);Person p2 = new Person(2, 500);();("ok");class Person /定義三個靈活的方法Person() id = 0;age = 20;Person(int _id) id = _id;age = 23;Person(int _id, int _age) id = _
32、id;age = _age; /成員變量定義 private int id; private int age = 20; /方法定義 public int getAge() return age; public void setAge(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_
33、方法重載與內存解析.aviTestOverloadtest.javapublic class Test void max(int a , int b) System.out.println( a > b ? a : b );參數類型不同,可以被編譯器識別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 )
34、; 參數返回類型不同,構成重名不能被編譯器識別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);十五、 對象創(chuàng)建與使用_復習與練習 源碼:TestCircle.java 視頻:14_TestCircle程序分析_1.avi 15_TestCircle程序分析_2.avi 16_TestCircle程序分析_3
35、.aviclass 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; 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, doub
36、le r) o = p; radius = r; Circle(double r) o = new Point(0.0, 0.0); radius = 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); o.setY(y); publi
37、c 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(String args) Circle c1 = new Circle(new Point(1.0,2.0), 2.0); Circle c2 = new Circle(5.0);
38、 System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius(); System.out.println("c2:("+c2.getO().getX() +","+c2.getO().getY()+"),"+c2.getRadius(); System.out.println("c1 area = "+c1.area(); System.out.pri
39、ntln("c1 area = "+c2.area(); c1.setO(5,6); c2.setRadius(9.0); System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius(); System.out.println("c2:("+c2.getO().getX()+"," +c2.getO().getY()+"),"+c2.getRadius
40、(); 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(p1); System.out.println(c1.contains(new Point(10.0,9.0); stackc1:xxxxc2:xxxxp1:xxxheapo5.0o5.00.06.00.05.05.26.3十六、 this關鍵字定義:在
41、類的方法定義中使用this關鍵字代表使用該方法的對象引用 使用 this (argument_list) 調用本類的另外的構造方法使用this.xxx = xxx 獲取本類另外一個構造方法傳來的值構造函數和一般成員函數在繼承中的區(qū)別的練習使用:當必須指出當前使用方法的對象是誰時要使用this有時使用this可以處理方法中成員變量和參數重名情況this可以看做一變量,它的值是當前對象引用thisvoid print( ) System.out. println("i = "+i );public static void main(String args)Leaf leaf =
42、 new Leaf(100);leaf.increament().increament().print();十七、 Static關鍵字1. 在類中,使用static聲明的成員變量為靜態(tài)成員變量,它為該類的公用變量,在第一次使用時被初始化,對該類的所有對象來說,static成員變量只有一份。2. 用static聲明的方法為靜態(tài)方法,在調用該方法時,不會將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員。- -靜態(tài)方法不再是針對某個對象調用,所以不能訪問非靜態(tài)成員3. 可以通過對象引用或者類名(不需實例化)訪問靜態(tài)成員。 如 類名.靜態(tài)成員變量 System.out out
43、就是靜態(tài)的4. 靜態(tài)變量可以用來計數。(main方法可以直接調用)5. 我覺得就是在使用內部類時使用, 如果不需要內部類隊形想與其外圍類之間有聯(lián)系,那么可以將內部類聲明為 static,這通常叫 嵌套類. 嵌套類意味著: 1 要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象. 2 不能從嵌套類的對象中訪問非靜態(tài)類的外圍類對象! 用Static聲明的叫屬性(特點)用處位置訪問變量(成員變量)靜態(tài)成員變量該類的公用變量,在第一次使用時被初始化,對該類的所有對象來說,static成員變量只有一份計數數據區(qū)(data seg)類名.靜態(tài)成員變量方法靜態(tài)方法在調用該方法時,不會將對象的引用傳遞給它,所以在st
44、atic方法中不可訪問非static的成員。6. 例子 源碼:Cat.java 視頻:18_static關鍵字_1.avi 19_static_關鍵字_2.avipublic class Cat private static int sid = 0; private String name; int id; Cat(String name) = name; id = sid+; public void info() System.out.println ("My name is "+name+" No."+id); public st
45、atic void main(String arg) Cat.sid = 100; Cat mimi = new Cat("mimi"); mimi.sid = 2000; Cat pipi = new Cat("pipi"); (); (); 十八、 package和import 2009-12-11 15:00:211. java引入包(package)機制提供類的多重類命名空間。2. package語句作為java源文件第一句,指明該文件定義的類所在包。package pkg1.pkg2.pkg3 .; 約定俗成的命名:com.域名.xxx3. java編譯器把語句對應于文件系統(tǒng)的目錄管理,package語句中使用” . ”點值指明包(目錄)層次 如 .sxt; 指的是該文件中所有類位于.comsxt目錄下4. Java引入import機制簡化包的引入總結:1聲明包:package.pkg.xxx 而編譯好的文件xx.class必須位于正確目錄下 pkgxx. 2 使用包,在另一個類中使用包中的類,必須寫全名稱, 3 可以用import關鍵詞,在文件開頭引入要使用的類,如import com.bjsxt.java.* 4 可以不需要用impo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園戶外活動的教研探討計劃
- 第19課 探索宇宙(教學設計)-2023-2024學年六年級科學下冊同步備課(青島版)
- 加強倉庫流程管理的實施方案計劃
- 《貴州創(chuàng)泰礦業(yè)有限公司修文縣龍場鎮(zhèn)高倉老二洞鋁鐵礦山礦產資源綠色開發(fā)利用方案(三合一)》評審意見
- (高清版)DB3715∕T 7-2022 黑水虻飼養(yǎng)技術規(guī)程
- 統(tǒng)編版小學語文二年級下冊第3課《開滿鮮花的小路》精美課件
- Unit 7 Days and Months Lesson 5 colorful seasons 教學設計 2024-2025學年冀教版(2024)七年級英語上冊
- 固態(tài)電池知識培訓課件
- 能源行業(yè):石油工程師簡歷
- 初中體育與健康 初二上 水平四 八年級(第一學期)籃球大單元教學設計+體前變向換手運球突破投籃教學設計
- 2024年03月中國工商銀行湖南分行2024年度春季校園招考筆試歷年參考題庫附帶答案詳解
- 員工離職面談記錄表范本
- 2025年青島市技師學院招考聘用48人高頻重點提升(共500題)附帶答案詳解
- 2024年08月澳門2024年中國銀行澳門分行校園招考筆試歷年參考題庫附帶答案詳解
- 110KV-GIS設備技術要求
- 《從外觀看豬病診治》課件
- 2024年度城市規(guī)劃與交通設計院深度合作框架協(xié)議3篇
- 李四光《看看我們的地球》原文閱讀
- GA/T 1740.2-2024旅游景區(qū)安全防范要求第2部分:湖泊型
- 2025屆高考數學專項復習:阿基米德三角形【六大題型】含答案
評論
0/150
提交評論