面向對象更增強調運用人類在平常的是爲邏輯中採用的思想方法與原則java
抽象、分類、繼承、聚合、多態數據庫
面向過程:強調的是功能行爲 面向過程:將功能封裝進對象,強調具有了功能的對象
**封裝、繼承、多態**
類 :對現實世界事物的抽象定義apache
對象:類的實體(實例)數組
![類與對象](E:\MyWork\個人筆記\Picture\類與對象.png) `ps. 類就像汽車設計圖 對象就像實際的汽車` 類(class)和對象(object)是面向對象的核心概念。類是對現實世界事物的描述,類是抽象、概念上的定義。 面向對象的開發方式:
定義類實際上是定義類中的成員(成員變量、成員方法)oracle
public class Teacher{ String name; int age; String gende; public void teach(){ System.out.println("老師上課"); } public void eat(){ System.out.println("老師吃飯"); } public void introduce(){ System.out.println("姓名:"+name+「年齡」) System.out.println("年齡:"+age); } }
描述事物的特徵oop
屬性用來描述事物的特徵,用屬性變量來保存數據,屬性也叫作成員變量,分爲兩類:
類屬性(類變量):類中的靜態屬性測試
類中定義的成員變量。this
示例: public class Student{ public int source; private String name; private int age; private char sex; //成員變量、對象屬性、類屬性 ... }
方法也叫作成員方法,分爲兩類:
類方法:隸屬於類,經過該類便可訪問設計
類中定義的方法。指針
示例: public class Teacher{ String name; int age; String gende; //如下爲類中定義的方法 public void teach(){ System.out.println("老師上課"); } public void eat(){ System.out.println("老師吃飯"); } public void introduce(){ System.out.println("姓名:"+name+「年齡」) System.out.println("年齡:"+age); } }
經過對象訪問屬性和方法,使用對象加`.`的方式。
經過new關鍵字能夠將一個類進行實例化,實例化即建立某個類的對象,類的實例便是一個對象。
// Techer類型 對象的引用 new關鍵字 構造方法 Teacher teacher = new Teacher();
經過對象加上`.`的方式訪問對象的方法或屬性`非private屬性`
示例: public class TeacherTest{ public static void main(String[] args){ //建立對象teacher Teacher teacher = new Teacher(); //給teacher對象的屬性賦值 teacher.name = "王歡"; teacher。age = "24"; //調用teacher對象的 teach() 方法 teacher.teach(); } }
建立文件MyDate.java
public class MyDate{ int year; int month; int day; public String getMyDate(){ return year+"年"+month+「月」+day+"日"; } }
建立測試類 MyDateTest.java
public class MyDateTest{ public static void main(String[] args){ MyDate myBirthDay = new MyDate(); myBirthDay.year = 1995; myBirthDay.month = 8; myBirthDay.day = 17; MyDate today = new MyDate(); today.year = 2019; today.month = 4; today.day = 16; System.out.println("生日:"+myBirthday.getMyDate()); System.out.println("今天:"+today.getMyDate()); } }
將類的成員變量私有化,使用get、set方法讀取和設置成員變量的值,體現了類的封裝性,保護數據。
//示例:getter、setter方法 public class Dog{ private String color; private String name; private int age; public void cry(){ System.out.println("狗狗叫呢!"); } public String eat(String something){ return "狗吃了"+something; } public void say(){ System.out.println("狗會說話了?"); } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if(age<20&&age>0) this.age = age; else return; } }
實例化對象後直接使用,沒有使用對應的引用變量進行接收。適用於對象實例化只須要進行一次調用的請狀況下,調用完成對象將由GC垃圾回收進行處理。 `new Teacher().eat();`
建立對象 初始化對象
對象的構造器用於建立對象,在建立對象時完成對象的初始化工做。構造器(構造方法)在建立對象時由JVM執行。
static、final、synchronized、abstract、native
修飾return
語句返回值public class Dog{ private String color; private String name; private int age; public Dog(){}//無參構造器 //當類中未編寫構造器時默認有一個 無參構造器 //當編寫了有參構造器時,默認沒有 無參構造器 按需自行編寫它 //帶參數構造 public Dog(String color, String name, int age){ this.color = color; this.name = name; this.age = age; } //構造器也是類方法 能夠重載 public Dog(String color,String name){ this.color = color; ths.name = name; } ... }
public class Dog{ private String color; private String name; private int age; public Dog(){ this("白色","小白"); //必須放在首行! } //無參構造器 //當類中未編寫構造器時默認有一個 無參構造器 //當編寫了有參構造器時,默認沒有 無參構造器 按需自行編寫它 //帶參數構造 public Dog(String color, String name, int age){ this.color = color; this.name = name; this.age = age; } //構造器也是類方法 能夠重載 public Dog(String color,String name){ this.color = color; ths.name = name; } ... }
`ps. 通常類中保留兩個構造器,一個無參構造器和一個全參數構造器。` ![](https://img2018.cnblogs.com/blog/1481652/201904/1481652-20190418141018794-831460446.png)
JavaBean是一個普通的Java類
JavaBean是一種Java語言寫成的可重用組件。用戶可使用JavaBean將功能、處理、值、數據庫訪問和其餘人戶能夠用java代碼創造的對象進行打包,並由其餘開發者在其餘功能中使用這些對象。 JavaBean提供了一種隨時隨地的複製和粘貼的功能,不用關心任何改變。 JavaBean標準
示例: //Computer.java public class Computer { private double cpu; private int memory; public Computer() { } public double getCpu() { return cpu; } public void setCpu(double cpu) { this.cpu = cpu; } public int getMemory() { return memory; } public void setMemory(int memory) { this.memory = memory; } }
package語句規範類的整理 解決類名衝突問題
package語句應放在java源文件的第一行。
//package 包名.子包名.子子包名.子子子包名 // 組織.機構名稱.項目名稱.模塊名稱 // org、com、edu package org.apache.oracle.JdbcDriver
package關鍵字使用後編譯java文件時命令須要使用java -d . *.java
其餘類中使用須要使用類全限定名稱org.apache.orcle.JdbcDriver
import語句告訴編譯器到哪裏去尋找類
爲使用定義在不一樣包中的Java類,需用·`import`語句來引入指定包層次下所須要的類或所有類。
//import 包名.子包名.子子包名.子子子包包.類名(或 [表示所有]) import org.apache.oracle.JdbcDriver; import org.apache.oracle.*;
數組是一組相同類型的數據的集合,數組是對象。元素是數組中的一個數據,任意類型的數據均可以建立數組。
示例: int[] intArray; //聲明瞭一個int數組 intArray = new int[5]; //建立數組:使用new關鍵字 中括號內數字表示元素個數 //數組一旦建立長度和數據類型將沒法再被修改 intArray[0] = 11; intArray[1] = 22; intArray[2] = 33; intArray[3] = 44; intArray[4] = 55; //如下語句編譯無報錯但運行時會報錯IndexOoutOfBoundsException //intArray[5] = 666;
`ps.數組在內存中時是連續 數組長度過大可能會建立失敗`
示例: int[] intArrays = new int[5]; //循環賦值 for(int i=0; i<5; i++){ intArrays[i] = i; } //循環遍歷 for(int i=0; i<intArrays.length; i++){ //intArrays.length是數組的長度 length是常量不可修改 System.out.println(intArrays[i]); } //加強for循環遍歷 // 局部變量 待遍歷數組 for(int intArray:intArrays){ System.out.println(intArray); }
示例: //動態初始化 int[] intArrays = new int[3]; intArrays[0] = 1; intArrays[1] = 11; intArrays[2] = 111; //靜態初始化 int[] intArrays = new int[]{1,11,111}; int[] intArrays; intArrays = new int[]{1,11,111}; int[] intArrays = {1,11,111}; //int[] intArrays; //編譯報錯intArrays = {1,11,111}; × //如下寫法編譯報錯 //int[] intArrays = new int[6]{1,11,111}; ×
示例: Cat[] cats = new Cat[3]; cats[0] = new cat("灰灰"); //cats[1] = new Cat("靚靚"); cats[2] = new Cat("花花"); for(Cat cat:cats){ cat.say(); } //cats[2] 未實例化運行時報錯空指針異常 //NullPointerException