㈠ java語言如何訪問數據成員及成員方法
分兩種情況:
1、數據成員或成員方法是靜態的
通過類名.數據成員名或類名.成員方法名訪問。
2、數據成員或成員方法是實例的
先創建對象,再通過對象.數據成員名或對象.成員方法名訪問。
如:
class A
{
static int sa;
static void sf()
{}
int a;
void f()
{}
}
訪問靜態成員:
A.sa=1;
A.sf();
訪問實例成員
A o=new A();
o.a=2;
o.f();
㈡ 什麼是類,什麼是對象,Java中類的聲明格式是什麼,簡單舉例說明。
2.Java中的類和對象【第一部分草案】 收藏
(本章的學習量相對比較大,我把整體分為三個部分講解,第一個部分和第二個部分為Java關於類和對象以及OO的基礎,第三個部分為在OO設計技巧中針對Java程序的一些性能提升的小技巧,因為盡量保證Java關於類和對象的基本概念以及關鍵知識點都能夠涉及到,一是為了方便查詢,二是按照常用的關鍵點來進行的整理,其中的關鍵點都是在開發過程中的一些相關內容涉及,所以本文特意提供了一個目錄進行檢索。類和對象屬於面向對象的基本概念,在開發過程中,需要掌握了對象和類的基本思想過後才明白如何進行OO設計,Java本身是純面向對象的語言,這篇文章的主要目的是針對Java裡面一些關於類和對象的基本操作進行簡單的講解,若有筆誤,請來Email提點,謝謝:[email protected])
本文目錄:【藍色部分為本章的目錄】
1.基本概念
2.Java變數相關
1)Java變數分類
2)Java中變數的初始化
3)Java變數修飾符和訪問域
4)Java類修飾符[不包含內部類]
3.Java涉及OO的關鍵知識點【主體】
1)繼承的基本概念
2)抽象類、介面、final類:
3)重載和重寫:
4)對象的拷貝[深拷貝和淺拷貝]:
5)關鍵字this、super
6)Java中的inlining[內聯]
7)帶繼承的構造函數以及構造順序
8)談談Object中的方法:equals、hashCode、toString
9)帶繼承的類型轉換以及轉換中關於成員變數和成員函數的調用
10)Java語言中的反射
11)按引用傳遞和值傳遞原理
12)Java中的包和導入
13)匿名類和內部類
4.Java編程OO設計技巧
1)對象創建以及周期
2)對象屬性設置
3)垃圾回收
4)繼承、介面、抽象類
5.總結
1.基本概念:
類和對象:OO裡面什麼稱為類,類一般性我們定義為創建對象的一個藍圖,當我們根據某個類創建了一個對象的時候,我們就說該對象是這個類的一個實例(instance),類描述了某些對象的基本結構,是對對象的相關屬性的一種定義,它定義了對象所具有的屬性、方法、事件等各種基本點。
類設計的關鍵概念:封裝是對象在工作的時候的一個關鍵概念,也是我們在進行OO設計的時候的一個需要掌握的點,封裝簡單講就是將對象內部的一些細節實現隱藏起來不對外公布,僅僅對外公布某個對象能夠提供的操作結果,從而實現信息隱藏的目的。在封裝過程,對象內的數據我們一般稱為成員變數(instance fields),對象內針對這些數據執行的操作我們可以叫做操作方法(成員函數)(methods),一個對象這些屬性的集合所反映出來的就是該對象的狀態。
在Java裡面,所有的復合數據都是從Object類繼承而來的,這一點可以通過使用Java反射去獲取父類的名稱來獲得。
對象:在OO設計裡面,對象有幾個需要掌握的基本點:
對象的行為:對象的行為指代的是這個對象能夠做什麼,不能做什麼,包括這個對象有哪些介面是對外提供了我們可以直接進行使用等相關概念。
對象的狀態:對象的狀態指代的是在程序運行過程,某個對象實例的一些屬性發生了相關的變化過後產生的一個對象狀態,在ORM設計中我們經常會遇到對象狀態的操作。
對象的標識:對象的標識指代的是這個對象如何區別於其他對象,即是是同一個類產生的新實例,其本質上講它們屬於兩個不同的對象,而不應該是同一個對象。
類與類的關系:
依賴(Dependence):依賴關系簡單講就是users-a的關系,兩個類創建的對象實例本身沒有任何關系,在編程過程反映出來的就是兩個對象在相互之間的調用關系,比如某個對象在執行它自己的行為的時候調用了其他對象的方法這些相關操作都屬於users-a的基本關系,或者說在某個Class裡面使用了其他Class來定義成員變數。
組合(Aggregation):組合關系可以認為是has-a的關系,這種關系的兩個類存在一個包含關系,很容易理解就是比如某個類包含了另外一個類,這種概念嚴格上講不在操作,主要是成員變數,比如一個用戶有個姓名屬性成為NameInfo,然後這個NameInfo定義為一個包含了兩個String的對象,一個是FirstName,另外一個是LastName,這種情況可以認為該對象本身和NameInfo之間的關系是has-a的關系。
繼承(Inheritance):繼承關系屬於is-a的關系,這種關系意味著兩個類存在父類(superclass)和子類(subclass)的概念,Java裡面使用extends和implements兩個關鍵字來體現兩個類的集成關系。
(上邊這些概念基本上在各種OO語言學習的開篇都會遇到,沒什麼特殊的,所以熟悉的人可以不用去了解)
Java中的Class:
預定義Class:在Java裡面,什麼稱為預定義Class,學過Java的人都知道,JVM會在我們編寫java程序的時候默認載入包java.lang,而java.lang裡面已經存在了很多Class,這種Class就屬於預定義的Class;不僅僅如此,以及Java API裡面提供的Network相關類、IO相關類、XML相關類,這些可以不需要我們自定義,只需要import過後就可以直接使用的類就屬於預定義的類。預定義類的各種使用方法可以參考JDK的API文檔,裡面針對目前存在的很多類都有詳細的描述信息,有些類還提供了我們所需要的相關使用Demo可做參考。
一些代碼的使用例子。
自定義Class:如果我們要使用自己的Class就需要在Java中自己定義Class,定義語法如下:
class UserInfo{
……
}
使用該語法我們就可以定義一個屬於自己的Class,而在Class裡面我們就可以根據自己的需求來設計相關成員變數和成員函數以及其他相關信息。
2.Java變數:
1)Java中的變數分為四種:類變數(又稱為靜態變數)、實例變數、局部變數、塊變數
類變數——類變數只能在一個class域裡面進行定義,同樣只能在類裡面使用,使用關鍵字為static關鍵字,這種變數可以直接通過Class.VAR的方式來調用,而且不需要對象實例存在就可以調用,它的執行原理在於當JVM的類載入器將類載入進來的時候,這個變數就已經存在的,而且可以使用了。定義方式和調用方式如下,下邊的A就屬於類變數:
class UserInfo{
static int A;
public static void main(String args[])
{
System.out.println(UserInfo.A);
}
}
㈢ C++新手求教!對象指針訪問數據成員問題。
max_phy的參數類型寫錯了,聲明的是student,但是你實現的時候寫的是double。double類型不是類類型,因此就會報錯誤。
錯誤的:
void max_phy(double *p)
正確的:
void max_phy(student *p)
修改一下就可以編譯通過了。
㈣ AA為一個類,a()為該類公有的函數成員,x為該類的一個對象,則訪問x對象中函數成員a()的格式
如果是靜態成員,直接AA::a,對象為 x.a,指針訪問為 x->a
㈤ 1.如何實現對類的對象成員的私有數據的訪問
在類里寫個protected的可讀寫屬性,或者是讀寫函數提供對私寫數據的訪問。
類外面的就調用屬性或者函數就行了。
㈥ 對象指針的對象指針的格式
指向數據成員的指針格式如下:
<類型說明符><類名>::*<指針名>
指向成員函數的指針格式如下:
<類型說明符>(<類名>::*<指針名>)(<參數表>)
例如,設有如下一個類A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定義一個指向類A的數據成員c的指針pc,其格式如下:
int A:: *pc = &A::c;
再定義一個指向類A的成員函數fun的指針pfun,其格式如下:
int (A:: *pfun)(int) = &A::fun;
由於類不是運行時存在的對象。因此,在使用這類指針時,需要首先指定A類的一個對象,然後,通過對象來引用指針所指向的成員。例如,給pc指針所指向的數據成員c賦值8,可以表示如下:
A a;
a.*pc = 8;
其中,運算符.*是用來對指向類成員的指針來操作該類的對象的。
如果使用指向對象的指針來對指向類成員的指針進行操作時,使用運算符->*。例如:
A *p = &a; //a是類A的一個對象,p是指向對象a的指針。
p ->* pc = 8;
讓我們再看看指向一般函數的指針的定義格式:
<類型說明符>*<指向函數指針名>(<參數表>)
關於給指向函數的指針賦值的格式如下:
<指向函數的指針名>=<函數名>
關於在程序中,使用指向函數的指針調用函數的格式如下:
(*<指向函數的指針名>)(<實參表>)
㈦ C語言中static是做什麼用的
有兩種用法:
1、static修飾局部變數,成為一個局部靜態變數。
static修飾局部變數(靜態局部變數)與普通局部變數相比,它的優勢在於:
①靜態局部變數作用域與連接屬性與普通局部變數一樣;
②存儲類:靜態局部變數分配在data/bss段,普通局部變數在棧上;
③生命周期:因為存儲類的不同,靜態局部變數的生命周期得到延長了,直到程序結束。
2、static修飾全局變數與函數,成為靜態全局變數與靜態函數。
static修飾全局變數函數 與 普通全局變數普通函數相比,它的優勢在於:
①存儲類、生命周期、作用域都一樣;
②差別在於static修飾全局變數函數連接屬性是內連接,普通全局變數普通函數是外鏈接;
③就是說static修飾全局變數函數不能跨文件訪問調用。
(7)對象成員的訪問數據格式擴展閱讀:
在類內數據成員的聲明前加上static關鍵字,該數據成員就是類內的靜態數據成員。其特點如下:
靜態數據成員存儲在全局數據區,靜態數據成員在定義時分配存儲空間,所以不能在類聲明中定義
靜態數據成員是類的成員,無論定義了多少個類的對象,靜態數據成員的拷貝只有一個,且對該類的所有對象可見。也就是說任一對象都可以對靜態數據成員進行操作。而對於非靜態數據成員,每個對象都有自己的一份拷貝。
由於上面的原因,靜態數據成員不屬於任何對象,在沒有類的實例時其作用域就可見,在沒有任何對象時,就可以進行操作
和普通數據成員一樣,靜態數據成員也遵從public, protected, private訪問規則
靜態數據成員的初始化格式:<數據類型><類名>::<靜態數據成員名>=<值>
類的靜態數據成員有兩種訪問方式:<類對象名>.<靜態數據成員名> 或 <類類型名>::<靜態數據成員名>