一切皆是對象。把現實世界中的對象抽象地體如今編程世界中,一個對象表明了某個具體的操做。一個個對象最終組成了完整的程序設計,這些對象能夠是獨立存在的,也能夠是從別的對象繼承過來的。對象之間經過相互做用傳遞信息,實現程序開發。對象有如下特色:對象具備屬性和行爲。對象具備變化的狀態。對象具備惟一性。對象都是某個類別的實例。java
封裝是將代碼及其處理的數據綁定在一塊兒的一種編程機制,該機制保證了程序和數據都不受外部干擾且不被誤用。
Java 語言的基本封裝單位是類。因爲類的用途是封裝複雜性,因此類的內部有隱藏實現複雜性的機制。Java 提供了私有和公有的訪問模式,類的公有接口表明外部的用戶應該知道或能夠知道的每件東西,私有的方法數據只能經過該類的成員代碼來訪問。sql
如同生活中的子女繼承父母擁有的全部財產,程序中的繼承性是指子類擁有父類數據結構的方法和機制,這是類之間的一種關係;繼承只能是單繼承編程
面向對象的多態性,即「一個接口,多個方法」。多態性體如今父類中定義的屬性和方法被子類繼承後,能夠具備不一樣的屬性或表現方式。多態性容許一個接口被多個同類使用,彌補了單繼承的不足。數組
具備相同特性(數據元素)和行爲(功能)的對象的抽象就是類,所以對象的抽象是類,類的具體化就是對象,也能夠說類的實例是對象。例如:人是一個類,你我就是對象。人類具備身高、體重等屬性和說話、走路等方法。安全
人類:對象你我他
類是構造面向對象程序的基本單位,是抽取了同類對象的共同屬性和方法所造成的對象或實體的「模板」。而對象是現實世界中實體的描述,對象要建立才存在,有了對象才能對對象進行操做。類是對象的模板,對象是類的實例網絡
在 Java 中定義一個類,須要使用 class 關鍵字、一個自定義的類名和一對錶示程序體的大括號,類名應該如下劃線()或字母開頭,最好以字母開頭;第一個字母最好大寫,若是類名由多個單詞組成,則每一個單詞的首字母最好都大寫;類名不能爲 Java 中的關鍵字,例如 boolean、this、int 等;類名不能包含任何嵌入的空格或點號以及除了下劃線()和美圓符號($)字符以外的特殊字符數據結構
public class Person{ private int age;//年齡屬性 private String name;//姓名屬性 public void speak(){//說話方法 } }
public:表示「共有」的意思。若是使用 public 修飾,則能夠被其餘類和程序訪問。每一個 Java 程序的主類都必須是 public 類,做爲公共工具供其餘類和程序使用的類應定義爲 public 類。
abstract:若是類被 abstract 修飾,則該類爲抽象類,抽象類不能被實例化,但抽象類中能夠有抽象方法(使用 abstract 修飾的方法)和具體方法(沒有使用 abstract 修飾的方法)。繼承該抽象類的全部子類都必須實現該抽象 類中的全部抽象方法(除非子類也是 抽象類)。
final:若是類被 final 修飾,則不容許被繼承。
extends:表示繼承其餘類。
implements:表示實現某些接口。架構
對象是對類的實例化。對象具備狀態和行爲,變量用來代表對象的狀態,方法代表對象所具備的行爲,使用 new 關鍵字建立對象函數
類名 對象名=new 類名();
//人類 public class Person{ public int age;//年齡屬性 public String name;//姓名屬性 public void speak(){//說話方法 } } //建立類的對象 Person person = new Person(); person.age=20; person.name="Hello World";
對象使用完以後須要對其進行清除。對象的清除是指釋放對象佔用的內存。在建立對象時,用戶必須使用 new 操做符爲對象分配內存。不過,在清除對象時,由系統自動進行內存回收,Java 語言的內存自動回收稱爲垃圾回收(Garbage Collection)機制,簡稱 GC。垃圾回收機制是指 JVM 用於釋放那些再也不使用的對象所佔用的內存。
一個對象被看成垃圾回收的狀況主要以下兩種:工具
{ Object o=new Object(); //對象o的做用範圍,超過這個範圍對象將被視爲垃圾 }
{ Object o=new Object(); o=null; //對象被賦值爲null將被視爲垃圾 }
在 Java 的 Object 類中還提供了一個 protected 類型的 finalize() 方法,所以任何 Java 類均可以覆蓋這個方法,在這個方法中進行釋放對象所佔有的相關資源的操做
在 Java 虛擬機的堆區,每一個對象均可能處於如下三種狀態之一。
可觸及狀態:當一個對象被建立後,只要程序中還有引用變量引用它,那麼它就始終處於可觸及狀態。
可復活狀態:當程序再也不有任何引用變量引用該對象時,該對象就進入可復活狀態。在這個狀態下,垃圾回收器會準備釋放它所佔用的內存,在釋放以前,會調用它及其餘處於可復活狀態的對象的 finalize() 方法,這些 finalize() 方法有可能使該對象從新轉到可觸及狀態。
不可觸及狀態:當 Java 虛擬機執行完全部可復活對象的 finalize() 方法後,若是這些方法都沒有使該對象轉到可觸及狀態,垃圾回收器纔會真正回收它佔用的內存。
構造方法是類的一種特殊方法,用來初始化類的一個新的對象。Java 中的每一個類都有一個默認的構造方法,它必須具備和類名相同的名稱,並且沒有返回類型。構造方法的默認返回類型就是對象類型自己,而且構造方法不能被 static、final、synchronized、abstract 和 native 修飾
class class_name { public class_name(){} //默認無參構造方法 public ciass_name([paramList]){} //定義構造方法 … //類主體 } public class MyClass { private int m; //定義私有變量 MyClass() { //定義無參的構造方法 m=0; } MyCiass(int m) { //定義有參的構造方法 this.m=m; } }
類的構造方法不是要求必須定義的。若是在類中沒有定義任何一個構造方法,則 Java 會自動爲該類生成一個默認的構造方法。默認的構造方法不包含任何參數,而且方法體爲空。若是類中顯式地定義了一個或多個構造方法,則 Java 再也不提供默認構造方法。
析構方法與構造方法相反,當對象脫離其做用域時(例如對象所在的方法已調用完畢),系統自動執行析構方法。析構方法每每用來作清理垃圾碎片的工做,例如在創建對象時用 new 開闢了一片內存空間,應退出前在析構方法中將其釋放。在 Java 的 Object 類中還提供了一個 protected 類型的 finalize() 方法,所以任何 Java 類均可以覆蓋這個方法,在這個方法中進行釋放對象所佔有的相關資源的操做
對象的 finalize() 方法具備以下特色:
垃圾回收器是否會執行該方法以及什麼時候執行該方法,都是不肯定的。
finalize() 方法有可能使用對象復活,使對象恢復到可觸及狀態。
垃圾回收器在執行 finalize() 方法時,若是出現異常,垃圾回收器不會報告異常,程序繼續正常運行。
protected void finalize() { //對象的清理工做 } public class Counter { private static int count=0; //計數器變量 public Counter()//構造方法 { this.count++; //建立實例時增長值 } public int getCount() //獲取計數器的值 { return this.count; } protected void finalize()//析構方法 { this.count--; //實例銷燬時減小值 System.out.println("對象銷燬"); } }
在編寫 Java 程序時,隨着程序架構愈來愈大,類的個數也愈來愈多,這時就會發現管理程序中維護類名稱也是一件很麻煩的事,尤爲是一些同名問題的發生。有時,開發人員還可能須要將處理同一方面的問題的類放在同一個目錄下,以便於管理。Java 爲了解決上述問題,提供了包機制
包容許將類組合成較小的單元(相似文件夾),它基本上隱藏了類,並避免了名稱上的衝突。包容許在更普遍的範圍內保護類、數據和方法,能夠在包內定義類,而在包外的代碼不能訪問該類,經常使用系統包:
Java.lang Java 的核心類庫,包含運行 Java 程序必不可少的系統類,如基本數據類型、基本數學函數、 字符串處理、異常處理和線程類等,系統默認加載這個包 java.io Java 語言的標準輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出、過濾輸入/輸出流等 java.util 包含如處理時間的 Date 類,處理動態數組的 Vector 類,以及 Stack 和 HashTable 類 java.awt 構建圖形用戶界面(GUI)的類庫,低級繪圖操做 Graphics 類、圖形界面組件和佈局管理 (如 Checkbox 類、Container 類、LayoutManger 接口等),以及用 戶界面交互控制和事 件響應(如 Event 類) java.awt.image 處理和操縱來自網上的圖片的 java 工具類庫 java.wat.peer 不多在程序中直接用到,使得同一個 Java 程序在不一樣的軟硬件平臺上運行 java.net 實現網絡功能的類庫有 Socket 類、ServerSocket 類 java.lang.reflect 提供用於反射對象的工具 java.util.zip 實現文件壓縮功能 java.awt.datatransfer 處理數據傳輸的工具類,包括剪貼板、字符串發送器等 java.sql 實現 JDBC 的類庫 java.rmi 提供遠程鏈接與載入的支持 java. security 提供安全性方面的有關支持
Java 的系統包無須定義能夠直接調用,也能夠自定義包
package 包名;
在要引用的類名前帶上包名做爲修飾符,bookexample 是包名,Test 是包中的類名,test 是類的對象
bookexample.Test test = new bookexampie.Test();
在文件開頭使用 import 引用包中的類
import bookexample.Test;