Java入門教程八(面向對象)

對象概念

一切皆是對象。把現實世界中的對象抽象地體如今編程世界中,一個對象表明了某個具體的操做。一個個對象最終組成了完整的程序設計,這些對象能夠是獨立存在的,也能夠是從別的對象繼承過來的。對象之間經過相互做用傳遞信息,實現程序開發。對象有如下特色:對象具備屬性和行爲。對象具備變化的狀態。對象具備惟一性。對象都是某個類別的實例。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的做用範圍,超過這個範圍對象將被視爲垃圾
}

對象被賦值爲 null

{
    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("對象銷燬");
    }
}

包(package)

在編寫 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;
相關文章
相關標籤/搜索