-
面向?qū)ο蠛兔嫦蜻^程區(qū)別:
- 從語言出發(fā):
- C:完全面向過程
- C++:一半面向過程,一半面向?qū)ο?/li>
- Java:完全面向?qū)ο?/li>
- 開發(fā)方式:
- 面向過程
- 注重實現(xiàn)功能步驟戚揭,注重實現(xiàn)功能的因果關(guān)系聘殖。
- 第一步干什么芹关,第二步干什么续挟。
- 缺點:耦合度高,擴展能力差侥衬。
- 優(yōu)點:對于小型項目诗祸,效率高
- 采用面向過程開發(fā)一臺計算機:一體機
- 采用面向?qū)ο箝_發(fā)一臺計算機:組合機
- 面向?qū)ο?
- 將現(xiàn)實世界分隔成不同的單元跑芳,然后每一個單元實現(xiàn)成對象,然后給一個環(huán)境驅(qū)動一下直颅,讓各個對象之間寫作起來形成博个。(更符合人類思維方式)
- 優(yōu)點:耦合度低,擴展性高
- 面向過程
- 面向過程主要關(guān)注的是:實現(xiàn)步驟以及整個過程
- 面向?qū)ο笾饕P(guān)注的是:對象A功偿,對象B盆佣,對象C。械荷。共耍。然后進行組合。
- OOA:面向?qū)ο蠓治?/li>
- OOD:面向?qū)ο笤O(shè)計
- OOP:面向?qū)ο缶幊?/li>
- 實現(xiàn)軟件過程:分析(A)->設(shè)計(D)->編程(P)吨瞎。
- leader 領(lǐng)導(dǎo)痹兜、組長
- team 團隊
- PM 項目經(jīng)理 Project Manager
- 面向?qū)ο笕筇卣鳎悍庋b、繼承颤诀、多態(tài)
- 從語言出發(fā):
-
類和對象
主要一詞:對象
類:是一個抽象的概念薪鹦,一個模板汰蓉,是思考、總結(jié)麻献、抽象的一個結(jié)果雅潭。本質(zhì)是現(xiàn)實世界中的某些食物的共同特征灯节,提取出來的一個概念猾警,一個模板妨蛹。
對象(實例):實際存在的實體。
要想得到對象剧包,必須先定義類恐锦,對象是通過類這個模板創(chuàng)造出來的。
類是一個模板:類中描述所以對象的共同特征信息疆液。
對象是通過類創(chuàng)建出的個體。
通過類創(chuàng)建對象的過程叫實例化陕贮。
抽象:多個對象具有共同特征堕油,進行思考總結(jié)抽取特征的過程。
類:包括:狀態(tài)特征(屬性)肮之、動態(tài)特征(方法)
public class Student{ //屬性: 姓名 性別 身高 //方法 sing dance study }
要求具備:觀察+抽象能力掉缺,把現(xiàn)實世界中的對象手中的共同特征抽象成類,然后通過類實例化對象戈擒,讓對象之間互相寫作形成系統(tǒng)眶明,模擬現(xiàn)實世界。
-
類的定義
[修飾符列表] class 類名{ //類體=屬性+方法 //屬性在代碼中以變量形式存在(描述狀態(tài))筐高。 //方法描述動作行為搜囱。 }
因為屬性是數(shù)據(jù)丑瞧,數(shù)據(jù)在程序中存在變量中。
變量:在方法體內(nèi)聲明:局部變量蜀肘;類內(nèi)方法體外聲明變量:成員變量(屬性)绊汹。
成員變量可以不手動賦值。
public class Student{ int id; String name; int age; boolean gender; String addr; }
public class StudentTest{ public static void main(String[] args){ //new 類名()扮宠; 創(chuàng)建對象西乖。 //new是一個運算符,專門負(fù)責(zé)對象的創(chuàng)建坛增。 //類型 變量名 = new 類名(); //s1叫引用 Student s1 = new Student(); //類型:基本數(shù)據(jù)類型+引用數(shù)據(jù)類型获雕。 //Java中所有的類都屬于引用數(shù)據(jù)類型。 } }
創(chuàng)建對象的個數(shù)沒有限制收捣,只要有模板類就行届案。
關(guān)于編譯的過程:按說先編譯Student.java ,再編譯StudentTest.java。
但是對于編譯器來說坏晦,編譯StudentTest.java時萝玷,會自動找Student.class文件,如果沒有昆婿,會自動編譯Student.java文件球碉,生成Student.class文件。
第一種方式:javac Student.java javac StudentTest.java
第二種方式:javac StudentTest.java
第三種方式:javac *.java
在語法上實現(xiàn)對象創(chuàng)建:類名 變量名 = new 類名();
-
成員變量沒有手動賦值都默認(rèn)賦值仓蛆。
- 類型 默認(rèn)值
- byte 0
- short 0
- int 0
- long 0L
- float 0.0F
- double 0.0
- boolean false
- char \u0000
- 引用數(shù)據(jù)類型 null
實例變量(屬性):對象級別的變量睁冬。
實例變量訪問時,必須先實例化看疙。不能通過類名直接訪問豆拨。
對象和引用的區(qū)別:對象是通過new出來的,在堆內(nèi)存中存儲能庆。引用 是但凡是變量并且變量中保存了堆內(nèi)存中對象的變量施禾。
//訪問實例變量: 引用.實例變量名
public class 學(xué)生{ int 學(xué)號; String 姓名; }
public clss 學(xué)生測試{ public static void main(String[] args){ 學(xué)生 張三 = new 學(xué)生(); System.out.println(張三.學(xué)號); System.out.println(張三.姓名); 張三.學(xué)號 = 111; 張三.姓名 = "這里"; System.out.println(張三.學(xué)號); System.out.println(張三.姓名); } }
public class User{
int id;
String user;
}
public class UserTest{
public static void main(String[] args){
User u1 = new User();
u1.id = 111;
u1.user = "張三";
System.out.println(u1.id);
System.out.println(u1.user);
}
}
-
借鑒:
public class Addr{
String city;
String jd;
}
public class User{
String username;
int id;
Addr addr;
}
public class Test{
public static void main(String[] args){
User u = new User();
System.out.println(u.id);
System.out.println(u.username);
System.out.println(u.addr);
Addr c = new Addr();
c.city = "beij";
c.jd = "daxing";
u.addr = c;
System.out.println(u.addr.city);
}
}
- 畫內(nèi)存圖注意事項:
- 不要體現(xiàn)代碼在內(nèi)存圖中,主要體現(xiàn)數(shù)據(jù)
- 圖形搁胆,有先后順序弥搞。
- 為什么畫內(nèi)存圖
- 有了內(nèi)存圖,程序不允許渠旁,也知道結(jié)果
- 有了內(nèi)存圖攀例,有助于調(diào)試程序
- 引用是存儲對象內(nèi)存地址的一個變量
- 對象是堆里new出來的。
- 引用一定是局部變量嗎顾腊? 不一定粤铭。可以是成員變量
public class T{
A a;
public static void main(String[] args){
D d = new D();
C c = new C();
B b = new B();
A a = new A();
T t = new T();
//以下賦值不寫會出現(xiàn)空指針異常杂靶。
c.d = d;
b.c = c;
a.b = b;
t.a = a;
//通過t訪問d中的i
System.out.println(t.a.b.c.d.i);
}
}
class A{
B b;
}
class B{
C c;
}
class C{
D d;
}
class D{
int i;
}
public class NullPointerTest{
public static void main(String[] args){
Customer c = new Customer();
System.out.println(c.id);
c.id = 9876;
System.out.println(c.id);
c = null;//編譯器只檢查語法梆惯。語法沒錯酱鸭。
System.out.println(c.id);
}
}
class Customer{
int id;
}
關(guān)于垃圾回收器GC:在Java中,垃圾回收期主要針對的是堆內(nèi)存加袋。當(dāng)一個Java對象沒有任何引用指向該對象時凛辣,GC會考慮將該垃圾數(shù)據(jù)釋放回收掉。
空引用訪問實例(對象相關(guān))相關(guān)的數(shù)據(jù)時都會出現(xiàn)空指針異常职烧。
public class Test{
public static void main(String[] args){
int i = 10;
add(i);
System.out.println("main-->"+i);
}
public static void add(int i){
i++;
System.out.println("add->"+i);
}
}
- 無論是基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型傳值都是值傳遞
public class Test{
public static void main(String[] args){
Person p = new Person();
p.age = 10;
add(p);
System.out.println("main->"+p.age);
}
public static void add(Person p){
p.age++
System.out.println("add->"+p.age);
}
}
class Person{
int age;
}
值傳遞傳遞的是變量中保存的值復(fù)制一份傳遞過去扁誓。
構(gòu)造方法:通過構(gòu)造方法可以完成對象的創(chuàng)建以及實例變量初始化。也就是說蚀之,構(gòu)造方法是用來創(chuàng)建對象并且同時給對象的屬性賦值蝗敢。
當(dāng)一個類沒有提供任何構(gòu)造方法,系統(tǒng)默認(rèn)提供一個無參構(gòu)造方法足删。
建議將無參構(gòu)造寫出來寿谴。
調(diào)用構(gòu)造方法使用new運算符
// 構(gòu)造方法語法: [修飾符列表]構(gòu)造方法名(形式參數(shù)列表){ 構(gòu)造方法體; } 修飾符目前統(tǒng)一寫public 構(gòu)造方法與類名必須一致。 構(gòu)造方法不需要指定返回值類型失受,也不能寫void讶泰。寫void表示普通方法。 //普通方法語法: [修飾符列表]返回值類型 方法名(形式參數(shù)列表){ 方法體; } //構(gòu)造對象 new 構(gòu)造方法名(參數(shù)列表);
-
public class ConstructorTest{ public static void main(String[] args){ Student s1 = new Student(); //如果定義了一個有參構(gòu)造拂到,則系統(tǒng)不會提供無參構(gòu)造方法痪署。 System.out.println(s1); Student s2 = new Student(2); Student s3 = new Student(1,"11",12); System.out.println(s3.id); System.out.println(s3.name); System.out.println(s3.age); } public static void doSome(){ System.out.println("111"); } }
public class Student{ int id; string name; int age; public Student(){ System.out.println("do some!"); } public Student(int i){ } public Student(String name){ } public Student(int id,String name,int age){ id = id; name = name; age = age; } }
成員變量默認(rèn)賦值的時機:在構(gòu)造方法執(zhí)行的過程中完成的初始化。
構(gòu)造方法:用于對象的創(chuàng)建
封裝作用:保證內(nèi)部結(jié)構(gòu)的安全兄旬;屏蔽復(fù)雜狼犯,暴露簡單。
-
在代碼級別上领铐,封裝有什么用悯森?
一個類中的數(shù)據(jù),假設(shè)封裝之后绪撵,對于代碼的調(diào)用人員來說瓢姻,不需要關(guān)心代碼的復(fù)雜實現(xiàn),只需要通過一個簡單的入口就可以訪問了音诈,另外汹来,類體重安全級別較高的數(shù)據(jù)封裝起來,外部人員不能隨意訪問改艇,來保證數(shù)據(jù)的安全性。
public class Person{ int age; }
public class PersonTest{ public static void main(String[] args){ Person p1 = new Person(); System.out.println(p1.age); p1.age = 50; System.out.println(p1.age); p1.age = -100;//age是一個負(fù)數(shù)坟岔,但是通過了谒兄。 System.out.println(p1.age); } }
//不使用封裝Person類的age暴露,隨意修改社付。
//封裝起來承疲,數(shù)據(jù)安全邻耕,調(diào)用方便 //屬性私有化,對外提供簡單的操作 public class PersonTest{ public static void main(String[] args){ Person p1 = new Person(); System.out.println(p1.age); p1.age = 50; System.out.println(p1.age); p1.age = -100;//age是一個負(fù)數(shù)燕鸽,但是通過了兄世。 System.out.println(p1.age); } }
public class Person{ private int age;//只能在本類中訪問,出來就不能訪問了啊研。 //外部訪問入口 }
構(gòu)造方法作用:創(chuàng)建對象御滩,給屬性賦值。
public class MethodTest{
public static void main(String[] args){
//調(diào)用static的調(diào)用方法
MethodTest.doSome();
doSome();
//不帶static的調(diào)用方法
MethocTest mt = new MethodTest();
mt.doOther();
}
//帶static方法
public static void doSome(){
System.out.println("wss");
}
//無static方法,實例方法党远,必須通過對象調(diào)用
public void doOther(){
}
}
//空指針異常本質(zhì)是空引用訪問實例相關(guān)數(shù)據(jù)削解。
public class NullPointerTest{
public static void main(String[] args){
User u = new User();
System.out.println(u.id);
u.doSome();
u = null;
System.out.println(u.id);//需要對象存在,空指針異常
u.doSome();//一個實例方法調(diào)用必須有對象的存在沟娱,所以空指針異常氛驮。
}
}
class User{
int id;
public void doSome(){
System.out.println("dosome");
}
public void exam(){
}
}
public class Person{ private int age;//只能在本類中訪問,出來就不能訪問了济似。 //外部訪問入口 //提供對外公開的入口矫废,都是類的實例操作入口,因此非static類型的砰蠢。 //set和get的格式: //public 返回值類型 get+屬性首字母大寫(無參){ return xxx; //} //public void set+屬性首字母大寫(參數(shù)){ xxx = 參數(shù); //} public int getAge(){ return age; } public void setAge(int nianLing){ if(nianLing < 0 || nianLing > 150){ System.out.println("年齡值不合法"); return; } age = nianLing; } }
public class PersonTest{
public static void main(String[] args){
Person p = new Person();
int nianLing = p1.getAge();
System.out.println(nianLing);
p1.setAge(100);
System.out.println(p1.getAge());
p1.setAge(-100);
System.out.println(p1.getAge());
}
}
- 封裝的代碼實現(xiàn):屬性私有化蓖扑;對外提供set和get方法。
- set和get都是實例方法娩脾,不帶static赵誓,實例方法必須先new對象。