【Java學習筆記一】類和對象

面向對象程序設計的一個一個重要特點是:封裝性
這里的封裝性有兩方面含義:一是將有關的數據和操作代碼封裝在一個對象中形成一個基本單位,各個對象之間相互獨立互不干擾,二是將對象中某些部分對外隱蔽,即隱蔽其內部細節只留下少量接口以便與外界聯系,接收外界的信息。這種隱蔽的做法稱為信息隱蔽

程序設計者的任務包括兩個方面:一是設計所需要的各種類和 對象,即決定把哪些數據和操作封裝在一起,二是考慮怎樣向有關對象發送消息,已完成所需要的任務。

對象=算法+數據結構
程序=(對象+對象+對象+……)+消息,消息的作用就是對對象的控制。

類的定義形式為

[public][final][abstract]class<類名>[extends<父類名>][implements<接口名列表>]
{<成員名>}

[]中的內容都不是必需的,<>中的內容是必需的。
public表示該類可以為所有類使用,還有一種是默認訪問權限,只對同一個包中的類可見。(修飾外部類的就只有這兩種訪問權限)

final表示該類為終結類,即不允許被其他任何類繼承而派生出子類。即不能成為父類。
abstract表示該類是一個抽象類。在抽象類中,允許所定義的方法只有聲明沒有定義,抽象類一定是作為一個父類使用,被其他相關的類繼承,然后在子類中實現沒有實現的方法。一般類中的方法必須是有定義的。

extends<父類名>

給出所定義的類需要繼承的父類,父類名是一個已經存在的一個類的標識符。

implements<接口名列表>

給出所定義的類需要實現的接口列表,若接口列表中超過一個接口名,則前后接口名之間必須要用逗號隔開。

類體(花括號內的部分)包含成員和方法。成員用來反映類的屬性,方法用來反映類的行為。

類中成員的定義格式:

[<訪問權限>][static][final]<數據類型><變量名列表>;//同樣<>內是必選項

數據成員有四種可選擇的訪問權限(訪問屬性),其中三種分別用關鍵字public,protected,private表示,剩余一種訪問權限不需要關鍵字,為默認(缺省,隱含)的訪問權限。不同的訪問權限對應著不同的訪問范圍。

public數據成員為共有訪問權限,能被所有的類訪問

protected數據成員為保護訪問權限,能夠被同一包中的類和繼承于本類的派生類(無論是否在同一個包中)所訪問

privated數據成員為私有訪問權限,只能被本類成員所訪問,不能被其他任何類中的成員所訪問

缺省數據成員能夠被本類和同一包中的其他任何類中的成員所訪問
包類似文件夾

總結:無論是何種訪問屬性都能被本類中的任何成員訪問,默認權限還能夠被同一包中的任何類所訪問,保護訪問權限時更進一步能夠被不同包中的任何子類所訪問,公有訪問權限時可以被所有的類訪問。

訪問范圍從小到大的順序為:私有<默認<保護<共有

需要注意的是保護修飾的數據不僅不同包中的子類可以訪問,同一個包中的所有類都是可以訪問的。

如果想要了解更多可以移步去看大佬的博客,有更加詳細的解釋:傳送門

如果被final修飾,則必須對該成員進行初始化(包含在構造函數中賦值),并且之后不能再被修改(相當于C++中的const

若一個數據成員帶有關鍵字static修飾,則表示他是類的靜態成員類中的靜態成員對所有對象都是公共的,共享一個存儲空間。而實例成員變量則是互相獨立的。

類中函數成員的定義格式為

[<訪問權限>][abstract][static][final]<返回類型><函數名>(<參數列表>){<函數體>}

函數成員的訪問權限與數據成員相同:public為公有訪問權限,能夠被所有的類訪問。protected為保護訪問權限,能夠被本包中的類和子類訪問。private為私有訪問權限,只能夠被本類訪問。缺省:此函數成員能夠被本包中的類訪問。

abstract表示為抽象成員函數,這樣的函數只有函數頭沒有函數體,在函數頭末尾使用分號表示結束定義。抽象成員函數只能出現在抽象類的定義中。

static表示靜態成員函數,可以直接通過類名進行訪問而不用進行實例化。在靜態成員函數中只能訪問靜態成員變量和調用靜態成員函數,不允許訪問實例成員變量和函數。

final表示終結性成員函數,該函數不允許被繼承類中的成員函數所覆蓋,也就是說不能被繼承類重新定義,不允許有多態性。

類中的構造函數是特殊的成員函數,作用是為創建的對象初始化,該函數名與類名相同,不帶返回值類型,只允許使用訪問權限的修飾符,不允許使用其他任何修飾符。

當類中沒有定義任何構造函數時,系統將隱含定義個一個默認的構造函數,函數體將初始化成員變量為默認值,具體的講,將數值和字符變量初始化為0,邏輯變量初始化為false,對類對象成員初始化為null。如果有自己定義的構造函數系統將不會再自動定義一個構造函數。

如果類的訪問權限是public,則默認構造函數的訪問權限是public,如果沒有采用public修飾,則默認構造函數的訪問權限是friendly

可以有多個成員函數名字相同,但是參數列表必須不同,這種現象叫做函數的重載

我們可以用類來定義和創建對象,具體格式為:

<類名標識符><對象標識符>[=<初值表達式>];//需要通過new操作符得到地址

new運算符為一元運算符,操作數是調用該類的構造函數,在內存中生成一個存儲對象并進行初始化,以返回該存儲對象的首地址作為運算結果。

沒有被new的對象是沒有意義的。相當于一個空指針。

創建對象以后就可以通過點運算符訪問成員變量和成員函數。點運算符具有最高的優先級。

對于靜態成員整個類對應同一個存儲空間,所以允許通過類名來直接訪問。(當然也可以通過對象訪問),對于實例成員只能通過對象進行訪問。

Java類中的程序是由類所構成的,每個類可以是一個獨立的編譯單元。也可以把及各類的定義保存在同一個程序文件中共同成為一個編譯單元,編譯后每個類都有對應各自的字節碼文件,即拓展名為.class的文件

當一個Java程序中包含多個類的定義時,只允許包含主方法main的類被指定為公有類,即在類定義的開始用public修飾,其他的類必須是缺省訪問權限的類,也就是說一個Java程序文件中不管包含多少個類的定義,不能同時出現兩個及以上的類為public類

對于成員變量其作用域為整個類,所以變量具有類作用域,成員函數中形參變量作用域為整個函數。對于成員函數中頂一個局部變量,其作用域為從定義點開始到所在的語句塊結束。在同一個作用域中不能出現重名,作用域范圍小的變量一般不能與包含他的作用域大的變量重名。(否則小范圍的會覆蓋大范圍的)允許函數參數和函數體中的變量與成員變量重名,但是在訪問成員變量時應該加上this.前綴表示是類的成員變量。

函數的形參和實參必須對應,或者實參的類型可以被系統自動轉換成形參的類型。特殊的,對于類中的構造函數是通過new操作符進行調用而不是通過點運算符進行調用。當形參為數組類型或者類(對象)類型時對形參的改變也會改變實參(很顯然,因為實際傳遞的是指針)。

封裝可被理解為一種改用做保護的包裝器,以防止代碼和數據被包裝器外部所定義的其他代碼任意訪問。Java使用訪問權限控制來實現封裝。

讓可訪問性盡可能的低是促成封裝的原則之一,即盡可能采用可行狀態下最高的訪問權限(最小的訪問范圍)。

final在Java中并不常用,但是他給我們提供了定義常量的功能。而且final還可以控制成員、方法或者類不可以被覆寫或者繼承。

在定義變量時在前面加上final關鍵字,對于基本類型來講就是其值不可改變,對于對象來講就是引用不可改變,即一直指向同一個對象。只能在定義或者構造函數中進行賦值,而且只能任選其一。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入研究socket編程(3)——使用select函數編寫客戶端和服務器

http://blog.csdn.net/chenxun_2010/article/details/50488394 首先看原先《UNIX網絡編程——并發服務器&#xff08;TCP&#xff09;》的代碼&#xff0c;服務器代碼serv.c&#xff1a; [cpp] view plaincopy #include<stdio.h> #include<sys/types.h> #inclu…

Java簡單輸入輸出

不同于面向過程中有直接的輸入輸出函數&#xff0c;Java中的輸入輸出只能通過類來實現。 比較常見的一種是使用Scanner類 需要引入java.util包&#xff0c;即在文件開始加上語句import java.util.*;創建Scanner類對象&#xff0c;屬于標準輸入流。 例如Scanner snew Scanner(S…

Ubuntu安裝搭建Clion環境

嗚嗚嗚&#xff0c;太辛苦了&#xff0c;我終于安裝好這個了。 大概過程就是先在官網下載安裝包&#xff0c;然后解壓以后用終端移動到對應文件夾下運行clin.sh 運行完以后會有一些窗口&#xff0c;第一個選擇don’t~~&#xff0c;然后點擊ok 接受&#xff08;你可以不接受…

UNIX網絡編程——select函數的并發限制和 poll 函數應用舉例

http://blog.csdn.net/chenxun_2010/article/details/50489577 一、用select實現的并發服務器&#xff0c;能達到的并發數&#xff0c;受兩方面限制 1、一個進程能打開的最大文件描述符限制。這可以通過調整內核參數。可以通過ulimit -n來調整或者使用setrlimit函數設置&#x…

【Java學習筆記二】繼承和多態

與C不同的是&#xff0c;在Java中&#xff0c;一個類只能直接繼承另一個類&#xff0c;而不允許繼承多個類&#xff0c;這個新類稱為繼承類、派生類或者子類&#xff0c;而被繼承的類稱為基類或者父類。 繼承類能夠繼承基類的群不屬性和行為。 面向對象程序設計的三大特點為&…

使用poll實現的io多路復用服務端和客戶端

http://blog.csdn.net/robertkun/article/details/52269313 參考&#xff1a;http://www.cnblogs.com/Anker/p/3261006.html 使用poll實現的io多路復用服務端和客戶端。 客戶端通過子進程創建多個客戶端連接。 客戶端每隔1秒向服務端發送一個時間戳&#xff0c; 服務端接收到時…

【Java學習筆記三】抽象類與接口

對象的類型轉換分為自動轉換和強制轉換兩種 派生類向基類轉換是自動轉換&#xff0c;因為派生類中包含基類基類向派生類的轉換是強制轉換 強制類型轉換是通過在轉換對象前面使用圓括號運算符來實現&#xff0c;圓括號內為要轉換的目標類型&#xff0c;格式為&#xff1a; (&…

Epoll 的tcp通信代碼(服務器+客戶端)

http://blog.csdn.net/libinbin_1014/article/details/50096187 Epoll 的tcp通信代碼&#xff08;服務器客戶端&#xff09; /* gcc -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS64 -I${ORACLE_HOME}/rdbms/public -I${ORACLE_HOME}/rdbms/demo -L${ORACLE_HOME}/lib -lclntsh …

【Java學習筆記四】Java中的包

包的聲明和引入&#xff1a;在Java語言系統中&#xff0c;Java編譯器為每一個類生成一個字節碼文件&#xff08;.class&#xff09;&#xff0c;為了對類文件進行分層和按用途分類管理&#xff0c;同時也為了解決相同類名的文件沖突的問題&#xff0c;Java提供了包機制來管理類…

Linux系統編程——線程池

http://blog.csdn.net/tennysonsky/article/details/46490099# 線程池基本原理 在傳統服務器結構中&#xff0c;常是有一個總的監聽線程監聽有沒有新的用戶連接服務器&#xff0c;每當有一個新的用戶進入&#xff0c;服務器就開啟一個新的線程用戶處理這 個用戶的數據包。這個線…

【Java學習筆記五】Java異常處理

異常通常分為三類&#xff1a; 程序可控制的異常&#xff1a;一般是可預見的錯誤&#xff0c;不是致命的。例如&#xff1a;除數為0&#xff0c;數組下標越界。程序不可控制的的異常&#xff1a;這種異常往往是致命的&#xff0c;但是系統可以預見的。例如&#xff1a;系統棧溢…

【C++學習筆記一】C++類和對象詳解

類定義是以關鍵字class開頭&#xff0c;后面跟類的名稱。主體是包含在一對花括號中。類定義后必須跟著一個分號或一個聲明列表。 類的對象的公共數據成員可以使用直接成員訪問運算符.來訪問。需要注意的是&#xff0c;私有的成員和受保護的成員不能直接使用成員訪問運算符來訪…

C語言實現的簡單的線程池

http://www.linuxidc.com/Linux/2013-01/77619.htm 有時我們會需要大量線程來處理一些相互獨立的任務&#xff0c;為了避免頻繁的申請釋放線程所帶來的開銷&#xff0c;我們可以使用線程池。下面是一個C語言實現的簡單的線程池。 頭文件&#xff1a; 1: #ifndef THREAD_POOL_H_…

C++獲取當前時間

可以使用windowsAPI直接獲取。 例如&#xff1a; #include<windows.h> #include<cstdio>using namespace std;int main() {SYSTEMTIME now;GetLocalTime(&now);printf("現在是%02d時%02d分%02d秒\n",now.wHour,now.wMinute,now.wSecond);printf(&…

成員函數后面加上const的作用

const表示成員函數不會修改類中的數據成員。 規則&#xff1a; 在類中被const 聲明的函數只能訪問const 函數&#xff0c;而非const 函數可以訪問任意成員函數。在成員函數中不管數據是否具有const 屬性&#xff0c;編譯器檢查的的是是否有修改&#xff08;賦值&#xff0c;自…

簡單Linux C線程池

http://www.cnblogs.com/venow/archive/2012/11/22/2779667.html 大多數的網絡服務器&#xff0c;包括Web服務器都具有一個特點&#xff0c;就是單位時間內必須處理數目巨大的連接請求&#xff0c;但是處理時間卻是比較短的。在傳統的多線程服務器模型中是這樣實現的&#xff1…

C++創建對象:棧和堆的區別

首先我們應該了解棧和堆的差別&#xff1a; 詳細信息&#xff1a;傳送門 棧相當于函數自帶的存儲空間&#xff0c;在windows下一般為2M,在Linux下一般為8M&#xff0c;存取速度稍微快一點。堆是系統的空間&#xff0c;相對較大&#xff0c;一般為2G&#xff0c;效率稍微慢一點…

IO多路復用之poll總結

http://www.cnblogs.com/Anker/p/3261006.html 1、基本知識 poll的機制與select類似&#xff0c;與select在本質上沒有多大差別&#xff0c;管理多個描述符也是進行輪詢&#xff0c;根據描述符的狀態進行處理&#xff0c;但是poll沒有最大文件描述符數量的限制。poll和select同…

【C++學習筆記二】C++繼承

繼承 繼承允許我們一句另一個類來定義一個類&#xff0c;這使得繼承和維護一個程序變得更加容易&#xff0c;也達到了重用代碼功能和提高執行效率的效果。 一般格式為&#xff1a; class 派生類名 :訪問修飾符 基類名{};其中訪問修飾符是public protected private中的一個&a…

處理大并發之二 對epoll的理解,epoll客戶端服務端代碼

http://blog.csdn.net/wzjking0929/article/details/51838370 序言&#xff1a; 該博客是一系列的博客&#xff0c;首先從最基礎的epoll說起&#xff0c;然后研究libevent源碼及使用方法&#xff0c;最后研究nginx和node.js&#xff0c;關于select,poll這里不做說明&#xff0c…