一:對象的概念:
我們都說萬物皆對象,客觀存在的事物都是對象。
二:什麼是面向對象?
把數據及對數據的操作方法放在一起,作爲一個相互依存的整體——對象。對同類對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部接口與外界發生關係,對象與對象之間通過消息進行通信。程序流程由用戶在使用中決定。
既然在這裏提到了類,那麼類究竟是什麼呢?接下來我們就來說什麼是類。
三:什麼是類?
簡單點來說,類就是模子,確定對象將會擁有的特徵(屬性)和行爲(方法)。
類的特點:1):類是對象的類型
2):具有相同屬性和方法的一組對象的集合
類中具有屬性和方法,那麼接下來我們就來說一說類的屬性和方法。
四:對象的屬性--對象具有的各種特徵。
就比如說手機有屏幕大小,CPU內存大小,內核等特徵,也就是手機的屬性
五:對象的方法--對象執行的操作
比如說手機又發短信,打電話的功能。那麼發短信和打電話就是手機的方法
六:類和對象有什麼區別?
類是抽象的概念,僅僅是一個模板,對象是一個實體。比如"手機"對象是一個你能夠看得着,摸得到的實體。
下面,我們就看如何用代碼來創建對象和類以及對象的屬性和方法。
---------------------------------------------------------------------------------------------------------------------------------
1:定義類
主要包括三個步驟: 定義類名,編寫類的屬性,編寫類的方法
public class Telphone{//定義類名
//屬性
float screen;
float cpu;
float memory;
//方法
void call(){
System.out.println("有打電話的功能");
}
void sendMessage(){
System.out.println("screen:"+screen+",cpu:"+cpu+",memory"+memory+",並且有發短信的功能");
}
}
2:使用對象
使用對象有兩個步驟:
創建對象: 類名 對象名=new 類名();
使用對象 :對象名.屬性/方法
public class InintTelpone{
public static void main(String[] args){
//創建對象
Telphone phone=new Telphone();
//給實例變量賦值
phone.screen=254.2f;
phone.cpu=1.4f;
phone.memory=2.0f;
//調用實例變量的方法
phone.sendMessage();
}
}
七: 成員變量和局部變量的區別
1:作用域的不同:
1): 局部變量的作用域僅限於用在定義他的方法中
2): 成員變量的作用域在整個類內部都是可見的。
:2:初始值不同:
1): java會給成員變量一個初始值
2):java不會給局部變量一個初始值
在同一個方法中不允許有同名的局部變量,但是在不同的方法中可以允許有同名的局部變量。並且如果局部變量跟成員變量重名,則局部變量的優先級更高。
public class Telphone {
float screen;
float cpu;
float mem;
float var;
void call(){
int localVar=2;
System.out.println(var);
System.out.println(localVar);
System.out.println("telephone 可以用來打電話");
}
void sendMessage(){
int localVar=3;
System.out.println(localVar);
System.out.println(var);
System.out.println("screen:"+screen+",cpu:"+cpu+",mem:"+mem+"Tel可以用來發短信");
}
}
public class InitTelphone {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone phone=new Telphone();
phone.screen=2.0f;
phone.cpu=1.4f;
phone.mem=8.0f;
phone.call();
phone.sendMessage();
}
}
運行結果爲:
八:靜態變量
我們知道,我們可以基於一個類創建多個對象,每個對象的屬性都是獨立的。然而,在有的時候,我們希望該類的所有對象都能夠共用一個成員,此時就需要定義靜態變量,用static修飾。
靜態的東西在對象產生之前就已經存在了,所以靜態的東西與對象無關,靜態變量在類被加載時就執行了,在編譯實現時靜態變量只有一份備份。
靜態變量可以用類名來訪問,也可以用對象名來訪問。
public class HelloWorld {
//設置靜態變量
static String className = "高二一班";
public static void main(String[] args) {
//通過類名來訪問
System.out.println(HelloWorld.className);
//創建新的對象
HelloWorld hello=new HelloWorld();
//使用對象名來訪問
System.out.println(hello.className);
//使用對象名的形式來修改靜態變量的值
hello.className="高二二班";
//再次使用類名來訪問靜態變量,值已經被改變
System.out.println(HelloWorld.className);
}
}
運行結果:
九:實例變量
實例變量是類聲明中沒有使用static修飾聲明的一個字段,實例變量是在類實例化時纔會分配內存,因此同一個實例變量在類的不同實例化而產生的對象中是不同的。
十:構造方法
構造方法是定義在java類中的一個用來初始化對象的方法。並且構造方法的名稱跟類名相同沒有返回值。
構造方法的幾個特點:
1:當沒有指定構造方法的時候,系統會默認的調用構造方法。
2:當有指定構造方法,無論是有參的還是無參的,都不會自動添加無參的構造方法
3:構造方法的重載跟普通方法的重載一樣。
4:構造方法不但可以給對象的屬性賦值,還可以保證給對象的屬性賦一個合理的值。
無參的構造方法:
public class Telphone {
public Telphone(){
System.out.println("無參的構造方法");
}
}
public static void main(String[] args) {
Telphone phone=new Telphone();
}
}
有參的構造方法:
public class Telphone {
float cpu;
float screen;
public Telphone(float newScreen,float newCpu){
screen=newScreen;
cpu=newCpu;
System.out.println("有參的構造方法");
}
}
public static void main(String[] args) {
Telphone phone=new Telphone(2.0f,1.4f);
}
}
十一:靜態方法
靜態方法的使用需要注意以下幾點:
1:靜態方法中可以直接調用同類中的靜態變量,但是不可以直接調用非靜態成員。
2:如果希望能夠調用非靜態成員,可以通過創建類的對象,然後通過對象來訪問非靜態成員。
3:在普通方法中,可以直接訪問同類中的靜態和非靜態成員
4:靜態方法中不可以直接調用非靜態方法,需要通過類創建的對象來訪問。
總結起來就是,在靜態方法中不可以使用非靜態的成員和方法,因爲非靜態的成員和方法是在實例化的時候纔會分配空間,所以要通過類創建的對象來訪問
public class HelloWorld {
// 定義靜態變量score1
static int score1 = 86;
// 定義靜態變量score2
static int score2 = 92;
// 定義靜態方法sum,計算成績總分,並返回總分
public static int sum() {
return score1+score2;
}
public static void main(String[] args) {
// 調用靜態方法sum並接收返回值
int allScore = HelloWorld.sum();
System.out.println("總分:" + allScore);
}
}
十二:靜態初始化塊
靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。
public class HelloWorld {
int num1;
int num2;
static int num3;
//通過構造方法初始化num1;
public HelloWorld(){
num1=1;
System.out.println("通過構造方法給num1賦值");
}
//通過代碼塊給num2賦值
{
num2=2;
System.out.println("通過代碼塊給num2賦值");
}
//通過靜態代碼塊給num3賦值
static {
num3=3;
System.out.println("通過靜態代碼塊給num3賦值");
}
void show(){
System.out.println("num1:"+num1+",num2:"+num2+",num3:"+num3);
}
public static void main(String[] args) {
HelloWorld hello=new HelloWorld();
hello.show();
}
}
運行結果爲: