新手初學(xué)Java面向?qū)ο?/h1>
更新時(shí)間:2021年07月07日 11:53:30 作者:群臨天下
這篇文章主要介紹了Java語言面向?qū)ο缶幊趟枷胫惻c對(duì)象實(shí)例詳解,還是十分不錯(cuò)的,這里給大家分享下,需要的朋友可以參考,希望能幫到你
java面向?qū)ο?/h2>
面向?qū)ο蟆綣ava語言的核心機(jī)制,最重要的內(nèi)容,Java語言的特色】
* 面向過程和面向?qū)ο蟮膮^(qū)別
- 面向過程:主要關(guān)注點(diǎn)是:實(shí)現(xiàn)的具體過程,因果關(guān)系【集成顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):對(duì)于業(yè)務(wù)邏輯比較簡(jiǎn)單的程序,可以達(dá)到快速開發(fā),前期投入成本較低。
* 缺點(diǎn):采用面向過程的方式開發(fā)很難解決非常復(fù)雜的業(yè)務(wù)邏輯,另外面向過程的
方式導(dǎo)致軟件元素之間的“耦合度”非常高,只要其中一環(huán)出問題,整個(gè)系統(tǒng)受到影響,
導(dǎo)致最終的軟件“擴(kuò)展力”差。另外,由于沒有獨(dú)立體的概念,所以無法達(dá)到組件復(fù)用。
- 面向?qū)ο螅褐饕P(guān)注點(diǎn)是:主要關(guān)注對(duì)象【獨(dú)立體】能完成哪些功能?!惊?dú)立顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):耦合度低,擴(kuò)展力強(qiáng)。更容易解決現(xiàn)實(shí)世界當(dāng)中更復(fù)雜的業(yè)務(wù)邏輯。組件復(fù)用性強(qiáng)。
* 缺點(diǎn):前期投入成本較高,需要進(jìn)行獨(dú)立體的抽取,大量的系統(tǒng)分析與設(shè)計(jì)。
- C語言是純面向過程的、C++半面向?qū)ο?、Java純面向?qū)ο?
- 現(xiàn)在出現(xiàn)的一些新的編程語言多數(shù)都是面向?qū)ο蟮摹H嗽谡J(rèn)識(shí)現(xiàn)實(shí)世界的時(shí)候以面向?qū)ο蟮姆绞健?
- 面向?qū)ο蟾先说乃季S方式。
* 面向?qū)ο蟮娜筇卣鳌鞠缺硶?huì)】
- 封裝
- 繼承
- 多態(tài)
所有面向?qū)ο蟮木幊陶Z言都有這三大特征。
采用面向?qū)ο蟮姆绞介_發(fā)一個(gè)軟件,生命周期當(dāng)中:【整個(gè)生命周期中貫穿使用OO面向?qū)ο蠓绞健?
* 面向?qū)ο蟮姆治觯篛OA
* 面向?qū)ο蟮脑O(shè)計(jì):OOD
* 面向?qū)ο蟮木幊蹋篛OP
* 類和對(duì)象的概念
* 什么是類?
- 類在現(xiàn)實(shí)世界當(dāng)中是不存在的,是一個(gè)模板,是一個(gè)概念。是人類大腦思考抽象的結(jié)果。
- 類代表了一類事物。
- 在現(xiàn)實(shí)世界當(dāng)中,對(duì)象A與對(duì)象B之間具有共同特征,進(jìn)行抽象總結(jié)出一個(gè)模板,這個(gè)模板被稱為類。
* 什么是對(duì)象?
- 對(duì)象是實(shí)際存在的個(gè)體?,F(xiàn)實(shí)世界當(dāng)中實(shí)際存在。
* 描述一下整個(gè)軟件開發(fā)的過程:
* 程序員先觀察現(xiàn)實(shí)世界,從現(xiàn)實(shí)世界當(dāng)中尋找對(duì)象
* 尋找了N多個(gè)對(duì)象之后,發(fā)現(xiàn)所有的對(duì)象都有共同特征
* 程序員在大腦中形成了一個(gè)模板【類】
* Java程序員可以通過java代碼來表述一個(gè)類
* Java程序中有了類的定義
* 然后通過類就可以創(chuàng)建對(duì)象
* 有了對(duì)象之后,可以讓對(duì)象直接協(xié)作起來形成一個(gè)系統(tǒng)。
* 類--【實(shí)例化】->對(duì)象
* 對(duì)象又被稱為實(shí)例/instance
* 對(duì)象--【抽象】-->類
* 重點(diǎn):
類描述的是對(duì)象的共同特征。
共同特征例如:身高特征
這個(gè)身高特征在訪問的時(shí)候,必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問這個(gè)特征。
因?yàn)檫@個(gè)特征具體的某個(gè)對(duì)象上之后,值不同。有的對(duì)象身高1.80,有的
對(duì)象身高2.80。
* 一個(gè)類主要描述什么信息呢?
一個(gè)類主要描述的是 狀態(tài) + 動(dòng)作。
狀態(tài)信息:名字、身高、性別、年齡
動(dòng)作信息:吃、唱歌、跳舞、學(xué)習(xí)
狀態(tài)--> 一個(gè)類的屬性
動(dòng)作--> 一個(gè)類的方法
*
類{
屬性; //描述對(duì)象的狀態(tài)信息
方法; //描述對(duì)象的動(dòng)作信息
}
注意:
狀態(tài)和動(dòng)作當(dāng)具體到某個(gè)對(duì)象上之后,發(fā)現(xiàn)最終的結(jié)果可能不一樣。
對(duì)象和對(duì)象之間有共同特征,但是具體到對(duì)象之后有數(shù)據(jù)的差異。
* 類的定義【從這里開始編寫代碼】
語法結(jié)構(gòu):
[修飾符列表] class 類名{
屬性;
方法;
}
學(xué)生類,描述所有學(xué)生對(duì)象的共同特征:
學(xué)生對(duì)象有哪些狀態(tài)信息:
* 學(xué)號(hào)【int】
* 名字【String】
* 性別【boolean】
* 年齡【int】【年齡是一個(gè)屬性,年齡是一個(gè)數(shù)據(jù),是數(shù)據(jù)就應(yīng)該有數(shù)據(jù)類型】
* 住址【String】
.....
學(xué)生對(duì)象有哪些動(dòng)作信息:
* 吃飯
* 睡覺
* 學(xué)習(xí)
* 玩
* 唱歌
* 跳舞
....
重點(diǎn):屬性通常是采用一個(gè)變量的形式來完成定義的。
int no;
int age;
String name;
String address;
boolean sex;
* java語言中包括兩種數(shù)據(jù)類型:
- 基本數(shù)據(jù)類型
byte
short
int
long
float
double
boolean
char
- 引用數(shù)據(jù)類型
String.class SUN提供的
System.class SUN提供的
Student.class 程序員自定義的
User.class 程序員自定義的
Product.class 程序員自定義的
Customer.class 程序員自定義的
......
- java語言中所有的class都屬于引用數(shù)據(jù)類型。
// 定義一個(gè)類,類名Student
// Student是一個(gè)類,代表了所有的學(xué)生對(duì)象,是一個(gè)學(xué)生的模板。
public class Student{ // 定義一個(gè)公開的類,起名Student
// 屬性【描述的是對(duì)象的狀態(tài)信息】
// 熟悉通常采用變量的方式來定義
// 在類體當(dāng)中,方法體之外定義的變量被稱為“成員變量”
// 成員變量沒有賦值,系統(tǒng)賦默認(rèn)值:一切箱0看齊。
// 學(xué)號(hào)
int no;
// 姓名
String name;
// 性別
boolean sex;
// 年齡
int age;
// 住址
String address;
// 方法
// 方法描述的是對(duì)象的動(dòng)作信息
// 當(dāng)前例子就只描述屬性了
}
// 學(xué)生類
// 學(xué)生類是一個(gè)模板
// 描述了所有學(xué)生的共同特征【狀態(tài)+行為】
// 當(dāng)前類只描述學(xué)生的狀態(tài)信息【屬性】
// Student是類,屬于引用數(shù)據(jù)類型,這個(gè)類型名就是:Student
public class Student{
// 類體-屬性+方法
// 屬性【存儲(chǔ)數(shù)據(jù)采用變量的形式】
// 由于變量定義在類體當(dāng)中,方法體之外,這種變量稱為成員變量
// 所有學(xué)生都有學(xué)好信息
// 但是每一個(gè)學(xué)生的學(xué)號(hào)都是不同的
// 所以要訪問這個(gè)學(xué)號(hào)必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問學(xué)號(hào)信息
// 學(xué)號(hào)信息不能直接通過“類”去訪問,所以這種成員變量又被叫做:實(shí)例變量
// 對(duì)象又被稱為實(shí)例,實(shí)例變量又成為對(duì)象變量?!緦?duì)象級(jí)別的變量】
// 不創(chuàng)建對(duì)象,這個(gè)no變量的內(nèi)存空間是不存在的,只有創(chuàng)建了對(duì)象,這個(gè)no變量?jī)?nèi)存空間才會(huì)創(chuàng)建
int no;
// 姓名
String name;
// 年齡
int age;
// 性別
boolean sex;
// 住址
String addr;
}
// 成員變量沒有手動(dòng)賦值的話,系統(tǒng)賦默認(rèn)值
// 默認(rèn)值
/*
數(shù)據(jù)類型 默認(rèn)值
---------------------------------
byte,short,int,long 0
float,double 0.0
boolean false
char \u0000
引用數(shù)據(jù)類型 null 空值
*/
// -----------------------------------------------------------------------------------------------------
/*
對(duì)象的創(chuàng)建和使用
*/
public class OOTest01
{
public static void main(String[] args){
// int 是基本數(shù)據(jù)類型
// i 是一個(gè)變量名
// 10是一個(gè)int類型的字面值
int i = 10;
// 通過一個(gè)類可以實(shí)例化N個(gè)對(duì)象
// 實(shí)例化對(duì)象的語法:new 類名();
// new是java語言當(dāng)中的一個(gè)運(yùn)算符
// new運(yùn)算符的作用是創(chuàng)建對(duì)象,在JVM堆內(nèi)存當(dāng)中開辟新的內(nèi)存空間
// 方法區(qū)內(nèi)存:在類加載的時(shí)候,class字節(jié)碼片段被加載到該內(nèi)存空間當(dāng)中
// 棧內(nèi)存(局部變量):方法代碼片段執(zhí)行的時(shí)候,會(huì)給該方法分配內(nèi)存空間,在棧內(nèi)存中壓棧
// 堆內(nèi)存:new的對(duì)象在堆內(nèi)存中存儲(chǔ)
// Student是一個(gè)應(yīng)用數(shù)據(jù)類型
// s 是一個(gè)變量名
// new Student()是一個(gè)學(xué)生對(duì)象
// s是一個(gè)局部變量【在棧內(nèi)存中存儲(chǔ)】
// 什么是對(duì)象?new運(yùn)算符在堆內(nèi)存中開辟的內(nèi)存空間稱為對(duì)象
// 什么是引用?引用是一個(gè)變量,只不過這個(gè)變量保存了另一個(gè)java對(duì)象的內(nèi)存地址
// java語言當(dāng)中,程序員不能直接操作堆內(nèi)存,java中沒有指針,不像c語言
// java語言當(dāng)中,程序員只能通過“引用”去訪問堆內(nèi)存當(dāng)中對(duì)象內(nèi)部的示例變量
Student s = new Student();
// 訪問實(shí)例變量的語法格式:
// 讀取數(shù)據(jù):引用.變量名
// 修改數(shù)據(jù):引用.變量名 = 值
/*
int stuNo = s.no;
String stuName = s.name;
int stuAge = s.age;
boolean stuSex = s.sex;
String stuAddr = s.addr;
System.out.println("學(xué)號(hào) = " + stuNo);
System.out.println("姓名 = " + stuName);
System.out.println("年齡 = " + stuAge);
System.out.println("性別 = " + stuSex);
System.out.println("地址 = " + stuAddr);
*/
s.no = 10;
s.name = "jack";
s.age = 20;
s.sex = true;
s.addr = "深圳";
System.out.println("學(xué)號(hào) = " + s.no); // 10
System.out.println("姓名 = " + s.name); // jack
System.out.println("年齡 = " + s.age); // 20
System.out.println("性別 = " + s.sex); // true
System.out.println("地址 = " + s.addr); // 深圳
// 編譯報(bào)錯(cuò),no這個(gè)實(shí)例變量不能直接采用”類名“的方式訪問
// 因?yàn)閚o是實(shí)例變量,對(duì)象級(jí)別的變量,變量存儲(chǔ)在java對(duì)象的內(nèi)部,必須先有對(duì)象
// 通過對(duì)象才能訪問no這個(gè)實(shí)例變量,不能直接通過"類名"訪問
// System.out.println(Student.no);
// 在通過類實(shí)例化一個(gè)全新的對(duì)象
// stu是一個(gè)引用類型
// stu同時(shí)也是一個(gè)局部變量
// Student是變量的數(shù)據(jù)類型
Student stu = new Student();
System.out.println("學(xué)號(hào) = " + stu.no); // 0
System.out.println("姓名 = " + stu.name); // null
System.out.println("年齡 = " + stu.age); // false
System.out.println("性別 = " + stu.sex); // 0
System.out.println("地址 = " + stu.addr); // null
}
}
/*
局部變量在棧內(nèi)存中存儲(chǔ)
成員變量中的實(shí)例變量在堆內(nèi)存的java對(duì)象內(nèi)存存儲(chǔ)
實(shí)例變量是一個(gè)對(duì)象一份,100個(gè)對(duì)象有100份。
*/

// 用戶類
public class User{
// 屬性【以下都是成員變量之實(shí)例變量】
// 用戶編號(hào)
// int 是一種基本數(shù)據(jù)類型:整數(shù)型
// no是一個(gè)實(shí)例變量
int no;
// 用戶名
// String 是一種引用數(shù)據(jù)類型:代表字符串
// name是一個(gè)實(shí)例變量
// name是一個(gè)引用
String name;
// 家庭住址
// Adddress是一種引用數(shù)據(jù)類型:代表家庭住址
// addr是一個(gè)實(shí)例變量
// addr是一個(gè)引用
Address addr;
}
// ----------------------------------------------------------------------
// 家庭住址類
public class Address{
// 屬性成員變量之實(shí)例變量】
// 城市
// String是一種引用數(shù)據(jù)類型,city是一個(gè)變量名,屬于實(shí)例變量
// oity是一個(gè)引用:保存內(nèi)存地址的一個(gè)變量,該變量保存內(nèi)存地址指向了堆內(nèi)存當(dāng)中的對(duì)象
String city;
// 街道
String street;
// 郵編
String zipcode;
}
// ----------------------------------------------------------------------
// 測(cè)試類
public class OOTest02{
public static void main(String[] args){
// 創(chuàng)建User對(duì)象
// u是局部變量
// u是一個(gè)應(yīng)用
// u保存內(nèi)存地址指向堆內(nèi)存的User對(duì)象
User u = new User();
// 輸出User對(duì)象內(nèi)部實(shí)例變量的值
System.out.println(u.no); // 0
System.out.println(u.name); // null
System.out.println(u.addr); // null
// 修改User對(duì)象內(nèi)部實(shí)例變量的值
u.no = 110;
u.name = "jack"; // "jack" 是一個(gè)java對(duì)象,屬于String對(duì)象
u.addr = new Address();
// 在main方法當(dāng)中目前只能看到一個(gè)引用“u”
// 一切都是只能通過u來進(jìn)行訪問
System.out.println(u.name + "居住在那個(gè)城市:" + u.addr.oity);
System.out.println(u.name + "居住在那個(gè)街道:" + u.addr.street);
System.out.println(u.name + "居住在那個(gè)郵編:" + u.addr.zipcode);
u.addr.oity = "深圳";
u.addr.street = "福田";
u.addr.zipcode = "516600";
System.out.println(u.name + "居住在那個(gè)城市:" + u.addr.oity);
System.out.println(u.name + "居住在那個(gè)街道:" + u.addr.street);
System.out.println(u.name + "居住在那個(gè)郵編:" + u.addr.zipcode);
}
}

public class OOTest03{
public static void main(String[] args){
// u是引用
// u是局部變量
User u = new User();
// 上一個(gè)版本中編寫的
// u.addr = new Address();
// a是引用
// a是局部變量
Address a = new Address();
u.addr = a;
System.out.println(u.addr.city); // null
a.city = "天津";
System.out.println(u.addr.city); // 天津
u.addr.city = "深圳";
System.out.println(u.addr.city); // 深圳
}
}

// 丈夫類
public class Husband{
// 姓名
String name;
// 丈夫?qū)ο螽?dāng)中含有妻子引用
Wife w;
}
// -----------------------------------------------------------------
// 妻子類
public class Wife{
// 姓名
String name;
// 妻子對(duì)象當(dāng)中含有丈夫引用
Husband h;
}
// -------------------------------------------------------------------
public class OOTest04{
public static void main(String[] args){
// 創(chuàng)建一個(gè)丈夫?qū)ο?
Husband huangXiaoMing = new Husband();
huangXiaoMing.name = "黃曉明";
// 創(chuàng)建一個(gè)妻子對(duì)象
Wife baby = new Wife();
baby.name = "baby";
// 結(jié)婚【能通過丈夫找到妻子,通過妻子也可以找到丈夫】
huangXiaoMing.w = baby;
baby.h = huangXiaoMing;
// 得到以上“黃曉明”的妻子的名字
System.out.println(huangXiaoMing.name + "的妻子名字叫:" + baby.name);
System.out.println(huangXiaoMing.name + "的妻子名字叫:" + huangXiaoMing.w.name);
}
}

知識(shí)點(diǎn)

// 顧客類
public class Customer
{
// id
int id;
}
// ------------------------------------------------------------------------
// 測(cè)試程序
public class OOTest05
{
public static void main(String[] args){
Customer c = new Customer();
System.out.println(c.id); // 0
c = null;
// 以下程序編譯可以通過,因?yàn)榉险Z法
// 運(yùn)行出現(xiàn)空指針異常
// 空應(yīng)用訪問“實(shí)例”相關(guān)的數(shù)據(jù)一定會(huì)出現(xiàn)空指針異常
// java.lang.NullPointerException
System.out.println(c.id);
}
}
// “實(shí)例”相關(guān)的數(shù)據(jù)表示:這個(gè)數(shù)據(jù)訪問的時(shí)候必須有對(duì)象的參與,這種數(shù)據(jù)就是實(shí)例相關(guān)的數(shù)據(jù)

/*
Java語言是面向?qū)ο?
要想創(chuàng)建對(duì)象必須先定義類
定義類的語法:
[修飾符列表] class 類名{
屬性:
方法:
}
屬性通常采用變量來表示,既然是變量那么變量肯定有數(shù)據(jù)類型?!緮?shù)據(jù)類型包括:基本數(shù)據(jù)類型 + 引用數(shù)據(jù)類型】
屬性對(duì)應(yīng)的是狀態(tài)信息。
觀察現(xiàn)實(shí)世界當(dāng)中超市中的商品,發(fā)現(xiàn)這所有的商品都有一些共同的特征,例如,每一個(gè)商品都有編號(hào),每一個(gè)商品都有單價(jià),所以定義以下的類,來代表所有的商品
*/
public class Product{
// 編號(hào) 【通常是一個(gè)數(shù)字,而且該數(shù)字通常是整數(shù)型的】
// productNo 是基本數(shù)據(jù)類型
// 實(shí)例變量
int productNo;
// 單價(jià) 【通常是一個(gè)數(shù)字,但是數(shù)字可能帶有小數(shù),所以采用浮點(diǎn)型數(shù)據(jù)double表示】
// price 是基本數(shù)據(jù)類型
// 實(shí)例變量
double price;
// ----------------------------------------------------------------------
/*
每一個(gè)類中都可以編寫主方法,但是一般情況下
一個(gè)系統(tǒng)只有一個(gè)入口,所以主方法一般寫一個(gè)
*/
public class ProductTest{ // 商品測(cè)試類
// 程序入口
public static void main(String[] args){
// 創(chuàng)建對(duì)象,商品對(duì)象
// iphone7 局部變量
// iphone7 應(yīng)用
// iphone7 變量中保存內(nèi)存地址的指向堆內(nèi)存當(dāng)中的商品對(duì)象
Product iphone7 = new Product();
// 訪問實(shí)例變量的語法:引用.變量
// 讀?。阂?變量名
System.out.println("商品的編號(hào):" + iphone7.productNo);
System.out.println("商品的單價(jià):" + iphone7.price);
// 修改:引用.變量名 = 值;
iphone7.productNo = 111;
iphone7.price = 68000;
System.out.println("商品的編號(hào):" + iphone7.productNo);
System.out.println("商品的單價(jià):" + iphone7.price);
}
}
// 人類
public class Ren{
// 身份證號(hào)
String id;
// 名字
String name;
// 性別
boolean sex;
// 年齡
int age;
}
// -------------------------------------------------------------------------
/*
別墅類
* 面積
* 主人
*/
public class BieShu{
// 面積
double mianJi;
// 主人【人類】
// 變量/應(yīng)引用
// 變量怎么聲明:數(shù)據(jù)類型 變量名;
// 關(guān)聯(lián)關(guān)系: A has a B 關(guān)系【A對(duì)象中含有B對(duì)象的引用】
// BieShu對(duì)象含有Ren對(duì)象的引用
Ren zhuRen;
}
// ----------------------------------------------------------------------
public class Test{
public static void main(String[] args){
// 思路:先創(chuàng)造人物對(duì)象,再創(chuàng)造別墅對(duì)象,讓別墅有主人
Ren zhangsan = new Ren(); // 初始化
// 不采用系統(tǒng)默認(rèn)值
// 手動(dòng)賦值
zhangsan.id = "45682110";
zhangsan.name = "張三";
zhangsan.sex = true;
zhangsan.age = 100;
// 創(chuàng)建別墅對(duì)象
BieShu fangzi = new BieShu();
fangzi.mianJi = 150.0;
fangzi.zhuRen = zhangsan;
// 想知道房子主人的名字是什么?
System.out.println(fangzi.zhuRen.name);
// 房子換主人
// 創(chuàng)建一個(gè)新的主人對(duì)象
Ren lisi = new Ren();
lisi.name = "李四";
// 換主人
fangzi.zhuRen = lisi;
System.out.println(fangzi.zhuRen.name);
}
}
// 學(xué)生類
class Student{
String name;
int no;
// 筆記本
Notebook book;
}
// ----------------------------------------------------------------------
// 筆記本類
class Notebook{
// 品牌
String brand;
// 型號(hào)
String model;
// 顏色
String color;
}
// ----------------------------------------------------------------------
/*
需求:
定義一個(gè)計(jì)算機(jī)類【電腦/筆記本】,計(jì)算機(jī)類有那些屬性
* 品牌 * 型號(hào) * 顏色
定義一個(gè)學(xué)生類,學(xué)生類有那些屬性:
* 姓名 * 學(xué)號(hào) * 學(xué)生有一臺(tái)筆記本電腦
請(qǐng)編寫程序來表示以上的類,然后分別將類創(chuàng)建為對(duì)象,對(duì)象數(shù)量不限,然后讓其中的一個(gè)學(xué)生去使用其中的一臺(tái)筆記本電腦
然后編譯并運(yùn)行,并且將整個(gè)執(zhí)行過程采用圖形的方式描述出來。
*/
// 測(cè)試類
public class OOTest06{
public static void main(String[] args){
// 創(chuàng)建筆記本對(duì)象
Notebook BiJiBen = new Notebook();
// 手動(dòng)賦值
BiJiBen.brand = "華為";
BiJiBen.model = "KX100";
BiJiBen.color = "黑色";
// 創(chuàng)建學(xué)生對(duì)象
Student s = new Student();
// 手動(dòng)賦值
s.no = 111;
s.name = "jack";
s.book = BiJiBen;
System.out.println(s.name);
System.out.println(s.no);
System.out.println(s.book.brand);
// 讓這個(gè)學(xué)生和筆記本對(duì)象產(chǎn)生關(guān)系【通過學(xué)生能找到他的筆記本】
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.brand);
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.model);
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.color);
// 修改品牌
s.book.brand = "蘋果";
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.brand);
}
}
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
-
Druid連接池的自定義過濾功能實(shí)現(xiàn)方法
在數(shù)據(jù)密集型應(yīng)用中,監(jiān)控和分析數(shù)據(jù)庫操作對(duì)于確保性能和穩(wěn)定性至關(guān)重要,本文將探討如何實(shí)現(xiàn)一個(gè)自定義的Druid過濾器來捕獲數(shù)據(jù)庫請(qǐng)求并進(jìn)行日志記錄,以輔助開發(fā)和維護(hù)工作,需要的朋友可以參考下 2023-11-11
-
Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例
這篇文章主要介紹了Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。 2018-01-01
-
Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決
這篇文章主要介紹了Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下 2021-08-08
-
java?freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件
這篇文章主要為大家詳細(xì)介紹了java如何通過freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下 2023-12-12
-
在spring?boot3中使用native?image的最新方法
這篇文章主要介紹了在spring?boot3中使用native?image?,今天我們用具體的例子來給大家演示一下如何正確的將spring boot3的應(yīng)用編譯成為native image,需要的朋友可以參考下 2023-01-01
最新評(píng)論
java面向?qū)ο?/h2>
面向?qū)ο蟆綣ava語言的核心機(jī)制,最重要的內(nèi)容,Java語言的特色】
* 面向過程和面向?qū)ο蟮膮^(qū)別
- 面向過程:主要關(guān)注點(diǎn)是:實(shí)現(xiàn)的具體過程,因果關(guān)系【集成顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):對(duì)于業(yè)務(wù)邏輯比較簡(jiǎn)單的程序,可以達(dá)到快速開發(fā),前期投入成本較低。
* 缺點(diǎn):采用面向過程的方式開發(fā)很難解決非常復(fù)雜的業(yè)務(wù)邏輯,另外面向過程的
方式導(dǎo)致軟件元素之間的“耦合度”非常高,只要其中一環(huán)出問題,整個(gè)系統(tǒng)受到影響,
導(dǎo)致最終的軟件“擴(kuò)展力”差。另外,由于沒有獨(dú)立體的概念,所以無法達(dá)到組件復(fù)用。
- 面向?qū)ο螅褐饕P(guān)注點(diǎn)是:主要關(guān)注對(duì)象【獨(dú)立體】能完成哪些功能?!惊?dú)立顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):耦合度低,擴(kuò)展力強(qiáng)。更容易解決現(xiàn)實(shí)世界當(dāng)中更復(fù)雜的業(yè)務(wù)邏輯。組件復(fù)用性強(qiáng)。
* 缺點(diǎn):前期投入成本較高,需要進(jìn)行獨(dú)立體的抽取,大量的系統(tǒng)分析與設(shè)計(jì)。
- C語言是純面向過程的、C++半面向?qū)ο?、Java純面向?qū)ο?
- 現(xiàn)在出現(xiàn)的一些新的編程語言多數(shù)都是面向?qū)ο蟮摹H嗽谡J(rèn)識(shí)現(xiàn)實(shí)世界的時(shí)候以面向?qū)ο蟮姆绞健?
- 面向?qū)ο蟾先说乃季S方式。
* 面向?qū)ο蟮娜筇卣鳌鞠缺硶?huì)】
- 封裝
- 繼承
- 多態(tài)
所有面向?qū)ο蟮木幊陶Z言都有這三大特征。
采用面向?qū)ο蟮姆绞介_發(fā)一個(gè)軟件,生命周期當(dāng)中:【整個(gè)生命周期中貫穿使用OO面向?qū)ο蠓绞健?
* 面向?qū)ο蟮姆治觯篛OA
* 面向?qū)ο蟮脑O(shè)計(jì):OOD
* 面向?qū)ο蟮木幊蹋篛OP
* 類和對(duì)象的概念
* 什么是類?
- 類在現(xiàn)實(shí)世界當(dāng)中是不存在的,是一個(gè)模板,是一個(gè)概念。是人類大腦思考抽象的結(jié)果。
- 類代表了一類事物。
- 在現(xiàn)實(shí)世界當(dāng)中,對(duì)象A與對(duì)象B之間具有共同特征,進(jìn)行抽象總結(jié)出一個(gè)模板,這個(gè)模板被稱為類。
* 什么是對(duì)象?
- 對(duì)象是實(shí)際存在的個(gè)體?,F(xiàn)實(shí)世界當(dāng)中實(shí)際存在。
* 描述一下整個(gè)軟件開發(fā)的過程:
* 程序員先觀察現(xiàn)實(shí)世界,從現(xiàn)實(shí)世界當(dāng)中尋找對(duì)象
* 尋找了N多個(gè)對(duì)象之后,發(fā)現(xiàn)所有的對(duì)象都有共同特征
* 程序員在大腦中形成了一個(gè)模板【類】
* Java程序員可以通過java代碼來表述一個(gè)類
* Java程序中有了類的定義
* 然后通過類就可以創(chuàng)建對(duì)象
* 有了對(duì)象之后,可以讓對(duì)象直接協(xié)作起來形成一個(gè)系統(tǒng)。
* 類--【實(shí)例化】->對(duì)象
* 對(duì)象又被稱為實(shí)例/instance
* 對(duì)象--【抽象】-->類
* 重點(diǎn):
類描述的是對(duì)象的共同特征。
共同特征例如:身高特征
這個(gè)身高特征在訪問的時(shí)候,必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問這個(gè)特征。
因?yàn)檫@個(gè)特征具體的某個(gè)對(duì)象上之后,值不同。有的對(duì)象身高1.80,有的
對(duì)象身高2.80。
* 一個(gè)類主要描述什么信息呢?
一個(gè)類主要描述的是 狀態(tài) + 動(dòng)作。
狀態(tài)信息:名字、身高、性別、年齡
動(dòng)作信息:吃、唱歌、跳舞、學(xué)習(xí)
狀態(tài)--> 一個(gè)類的屬性
動(dòng)作--> 一個(gè)類的方法
*
類{
屬性; //描述對(duì)象的狀態(tài)信息
方法; //描述對(duì)象的動(dòng)作信息
}
注意:
狀態(tài)和動(dòng)作當(dāng)具體到某個(gè)對(duì)象上之后,發(fā)現(xiàn)最終的結(jié)果可能不一樣。
對(duì)象和對(duì)象之間有共同特征,但是具體到對(duì)象之后有數(shù)據(jù)的差異。
* 類的定義【從這里開始編寫代碼】
語法結(jié)構(gòu):
[修飾符列表] class 類名{
屬性;
方法;
}
學(xué)生類,描述所有學(xué)生對(duì)象的共同特征:
學(xué)生對(duì)象有哪些狀態(tài)信息:
* 學(xué)號(hào)【int】
* 名字【String】
* 性別【boolean】
* 年齡【int】【年齡是一個(gè)屬性,年齡是一個(gè)數(shù)據(jù),是數(shù)據(jù)就應(yīng)該有數(shù)據(jù)類型】
* 住址【String】
.....
學(xué)生對(duì)象有哪些動(dòng)作信息:
* 吃飯
* 睡覺
* 學(xué)習(xí)
* 玩
* 唱歌
* 跳舞
....
重點(diǎn):屬性通常是采用一個(gè)變量的形式來完成定義的。
int no;
int age;
String name;
String address;
boolean sex;
* java語言中包括兩種數(shù)據(jù)類型:
- 基本數(shù)據(jù)類型
byte
short
int
long
float
double
boolean
char
- 引用數(shù)據(jù)類型
String.class SUN提供的
System.class SUN提供的
Student.class 程序員自定義的
User.class 程序員自定義的
Product.class 程序員自定義的
Customer.class 程序員自定義的
......
- java語言中所有的class都屬于引用數(shù)據(jù)類型。
// 定義一個(gè)類,類名Student
// Student是一個(gè)類,代表了所有的學(xué)生對(duì)象,是一個(gè)學(xué)生的模板。
public class Student{ // 定義一個(gè)公開的類,起名Student
// 屬性【描述的是對(duì)象的狀態(tài)信息】
// 熟悉通常采用變量的方式來定義
// 在類體當(dāng)中,方法體之外定義的變量被稱為“成員變量”
// 成員變量沒有賦值,系統(tǒng)賦默認(rèn)值:一切箱0看齊。
// 學(xué)號(hào)
int no;
// 姓名
String name;
// 性別
boolean sex;
// 年齡
int age;
// 住址
String address;
// 方法
// 方法描述的是對(duì)象的動(dòng)作信息
// 當(dāng)前例子就只描述屬性了
}
// 學(xué)生類
// 學(xué)生類是一個(gè)模板
// 描述了所有學(xué)生的共同特征【狀態(tài)+行為】
// 當(dāng)前類只描述學(xué)生的狀態(tài)信息【屬性】
// Student是類,屬于引用數(shù)據(jù)類型,這個(gè)類型名就是:Student
public class Student{
// 類體-屬性+方法
// 屬性【存儲(chǔ)數(shù)據(jù)采用變量的形式】
// 由于變量定義在類體當(dāng)中,方法體之外,這種變量稱為成員變量
// 所有學(xué)生都有學(xué)好信息
// 但是每一個(gè)學(xué)生的學(xué)號(hào)都是不同的
// 所以要訪問這個(gè)學(xué)號(hào)必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問學(xué)號(hào)信息
// 學(xué)號(hào)信息不能直接通過“類”去訪問,所以這種成員變量又被叫做:實(shí)例變量
// 對(duì)象又被稱為實(shí)例,實(shí)例變量又成為對(duì)象變量?!緦?duì)象級(jí)別的變量】
// 不創(chuàng)建對(duì)象,這個(gè)no變量的內(nèi)存空間是不存在的,只有創(chuàng)建了對(duì)象,這個(gè)no變量?jī)?nèi)存空間才會(huì)創(chuàng)建
int no;
// 姓名
String name;
// 年齡
int age;
// 性別
boolean sex;
// 住址
String addr;
}
// 成員變量沒有手動(dòng)賦值的話,系統(tǒng)賦默認(rèn)值
// 默認(rèn)值
/*
數(shù)據(jù)類型 默認(rèn)值
---------------------------------
byte,short,int,long 0
float,double 0.0
boolean false
char \u0000
引用數(shù)據(jù)類型 null 空值
*/
// -----------------------------------------------------------------------------------------------------
/*
對(duì)象的創(chuàng)建和使用
*/
public class OOTest01
{
public static void main(String[] args){
// int 是基本數(shù)據(jù)類型
// i 是一個(gè)變量名
// 10是一個(gè)int類型的字面值
int i = 10;
// 通過一個(gè)類可以實(shí)例化N個(gè)對(duì)象
// 實(shí)例化對(duì)象的語法:new 類名();
// new是java語言當(dāng)中的一個(gè)運(yùn)算符
// new運(yùn)算符的作用是創(chuàng)建對(duì)象,在JVM堆內(nèi)存當(dāng)中開辟新的內(nèi)存空間
// 方法區(qū)內(nèi)存:在類加載的時(shí)候,class字節(jié)碼片段被加載到該內(nèi)存空間當(dāng)中
// 棧內(nèi)存(局部變量):方法代碼片段執(zhí)行的時(shí)候,會(huì)給該方法分配內(nèi)存空間,在棧內(nèi)存中壓棧
// 堆內(nèi)存:new的對(duì)象在堆內(nèi)存中存儲(chǔ)
// Student是一個(gè)應(yīng)用數(shù)據(jù)類型
// s 是一個(gè)變量名
// new Student()是一個(gè)學(xué)生對(duì)象
// s是一個(gè)局部變量【在棧內(nèi)存中存儲(chǔ)】
// 什么是對(duì)象?new運(yùn)算符在堆內(nèi)存中開辟的內(nèi)存空間稱為對(duì)象
// 什么是引用?引用是一個(gè)變量,只不過這個(gè)變量保存了另一個(gè)java對(duì)象的內(nèi)存地址
// java語言當(dāng)中,程序員不能直接操作堆內(nèi)存,java中沒有指針,不像c語言
// java語言當(dāng)中,程序員只能通過“引用”去訪問堆內(nèi)存當(dāng)中對(duì)象內(nèi)部的示例變量
Student s = new Student();
// 訪問實(shí)例變量的語法格式:
// 讀取數(shù)據(jù):引用.變量名
// 修改數(shù)據(jù):引用.變量名 = 值
/*
int stuNo = s.no;
String stuName = s.name;
int stuAge = s.age;
boolean stuSex = s.sex;
String stuAddr = s.addr;
System.out.println("學(xué)號(hào) = " + stuNo);
System.out.println("姓名 = " + stuName);
System.out.println("年齡 = " + stuAge);
System.out.println("性別 = " + stuSex);
System.out.println("地址 = " + stuAddr);
*/
s.no = 10;
s.name = "jack";
s.age = 20;
s.sex = true;
s.addr = "深圳";
System.out.println("學(xué)號(hào) = " + s.no); // 10
System.out.println("姓名 = " + s.name); // jack
System.out.println("年齡 = " + s.age); // 20
System.out.println("性別 = " + s.sex); // true
System.out.println("地址 = " + s.addr); // 深圳
// 編譯報(bào)錯(cuò),no這個(gè)實(shí)例變量不能直接采用”類名“的方式訪問
// 因?yàn)閚o是實(shí)例變量,對(duì)象級(jí)別的變量,變量存儲(chǔ)在java對(duì)象的內(nèi)部,必須先有對(duì)象
// 通過對(duì)象才能訪問no這個(gè)實(shí)例變量,不能直接通過"類名"訪問
// System.out.println(Student.no);
// 在通過類實(shí)例化一個(gè)全新的對(duì)象
// stu是一個(gè)引用類型
// stu同時(shí)也是一個(gè)局部變量
// Student是變量的數(shù)據(jù)類型
Student stu = new Student();
System.out.println("學(xué)號(hào) = " + stu.no); // 0
System.out.println("姓名 = " + stu.name); // null
System.out.println("年齡 = " + stu.age); // false
System.out.println("性別 = " + stu.sex); // 0
System.out.println("地址 = " + stu.addr); // null
}
}
/*
局部變量在棧內(nèi)存中存儲(chǔ)
成員變量中的實(shí)例變量在堆內(nèi)存的java對(duì)象內(nèi)存存儲(chǔ)
實(shí)例變量是一個(gè)對(duì)象一份,100個(gè)對(duì)象有100份。
*/
面向?qū)ο蟆綣ava語言的核心機(jī)制,最重要的內(nèi)容,Java語言的特色】
* 面向過程和面向?qū)ο蟮膮^(qū)別
- 面向過程:主要關(guān)注點(diǎn)是:實(shí)現(xiàn)的具體過程,因果關(guān)系【集成顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):對(duì)于業(yè)務(wù)邏輯比較簡(jiǎn)單的程序,可以達(dá)到快速開發(fā),前期投入成本較低。
* 缺點(diǎn):采用面向過程的方式開發(fā)很難解決非常復(fù)雜的業(yè)務(wù)邏輯,另外面向過程的
方式導(dǎo)致軟件元素之間的“耦合度”非常高,只要其中一環(huán)出問題,整個(gè)系統(tǒng)受到影響,
導(dǎo)致最終的軟件“擴(kuò)展力”差。另外,由于沒有獨(dú)立體的概念,所以無法達(dá)到組件復(fù)用。
- 面向?qū)ο螅褐饕P(guān)注點(diǎn)是:主要關(guān)注對(duì)象【獨(dú)立體】能完成哪些功能?!惊?dú)立顯卡的開發(fā)思路】
* 優(yōu)點(diǎn):耦合度低,擴(kuò)展力強(qiáng)。更容易解決現(xiàn)實(shí)世界當(dāng)中更復(fù)雜的業(yè)務(wù)邏輯。組件復(fù)用性強(qiáng)。
* 缺點(diǎn):前期投入成本較高,需要進(jìn)行獨(dú)立體的抽取,大量的系統(tǒng)分析與設(shè)計(jì)。
- C語言是純面向過程的、C++半面向?qū)ο?、Java純面向?qū)ο?
- 現(xiàn)在出現(xiàn)的一些新的編程語言多數(shù)都是面向?qū)ο蟮摹H嗽谡J(rèn)識(shí)現(xiàn)實(shí)世界的時(shí)候以面向?qū)ο蟮姆绞健?
- 面向?qū)ο蟾先说乃季S方式。
* 面向?qū)ο蟮娜筇卣鳌鞠缺硶?huì)】
- 封裝
- 繼承
- 多態(tài)
所有面向?qū)ο蟮木幊陶Z言都有這三大特征。
采用面向?qū)ο蟮姆绞介_發(fā)一個(gè)軟件,生命周期當(dāng)中:【整個(gè)生命周期中貫穿使用OO面向?qū)ο蠓绞健?
* 面向?qū)ο蟮姆治觯篛OA
* 面向?qū)ο蟮脑O(shè)計(jì):OOD
* 面向?qū)ο蟮木幊蹋篛OP
* 類和對(duì)象的概念
* 什么是類?
- 類在現(xiàn)實(shí)世界當(dāng)中是不存在的,是一個(gè)模板,是一個(gè)概念。是人類大腦思考抽象的結(jié)果。
- 類代表了一類事物。
- 在現(xiàn)實(shí)世界當(dāng)中,對(duì)象A與對(duì)象B之間具有共同特征,進(jìn)行抽象總結(jié)出一個(gè)模板,這個(gè)模板被稱為類。
* 什么是對(duì)象?
- 對(duì)象是實(shí)際存在的個(gè)體?,F(xiàn)實(shí)世界當(dāng)中實(shí)際存在。
* 描述一下整個(gè)軟件開發(fā)的過程:
* 程序員先觀察現(xiàn)實(shí)世界,從現(xiàn)實(shí)世界當(dāng)中尋找對(duì)象
* 尋找了N多個(gè)對(duì)象之后,發(fā)現(xiàn)所有的對(duì)象都有共同特征
* 程序員在大腦中形成了一個(gè)模板【類】
* Java程序員可以通過java代碼來表述一個(gè)類
* Java程序中有了類的定義
* 然后通過類就可以創(chuàng)建對(duì)象
* 有了對(duì)象之后,可以讓對(duì)象直接協(xié)作起來形成一個(gè)系統(tǒng)。
* 類--【實(shí)例化】->對(duì)象
* 對(duì)象又被稱為實(shí)例/instance
* 對(duì)象--【抽象】-->類
* 重點(diǎn):
類描述的是對(duì)象的共同特征。
共同特征例如:身高特征
這個(gè)身高特征在訪問的時(shí)候,必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問這個(gè)特征。
因?yàn)檫@個(gè)特征具體的某個(gè)對(duì)象上之后,值不同。有的對(duì)象身高1.80,有的
對(duì)象身高2.80。
* 一個(gè)類主要描述什么信息呢?
一個(gè)類主要描述的是 狀態(tài) + 動(dòng)作。
狀態(tài)信息:名字、身高、性別、年齡
動(dòng)作信息:吃、唱歌、跳舞、學(xué)習(xí)
狀態(tài)--> 一個(gè)類的屬性
動(dòng)作--> 一個(gè)類的方法
*
類{
屬性; //描述對(duì)象的狀態(tài)信息
方法; //描述對(duì)象的動(dòng)作信息
}
注意:
狀態(tài)和動(dòng)作當(dāng)具體到某個(gè)對(duì)象上之后,發(fā)現(xiàn)最終的結(jié)果可能不一樣。
對(duì)象和對(duì)象之間有共同特征,但是具體到對(duì)象之后有數(shù)據(jù)的差異。
* 類的定義【從這里開始編寫代碼】
語法結(jié)構(gòu):
[修飾符列表] class 類名{
屬性;
方法;
}
學(xué)生類,描述所有學(xué)生對(duì)象的共同特征:
學(xué)生對(duì)象有哪些狀態(tài)信息:
* 學(xué)號(hào)【int】
* 名字【String】
* 性別【boolean】
* 年齡【int】【年齡是一個(gè)屬性,年齡是一個(gè)數(shù)據(jù),是數(shù)據(jù)就應(yīng)該有數(shù)據(jù)類型】
* 住址【String】
.....
學(xué)生對(duì)象有哪些動(dòng)作信息:
* 吃飯
* 睡覺
* 學(xué)習(xí)
* 玩
* 唱歌
* 跳舞
....
重點(diǎn):屬性通常是采用一個(gè)變量的形式來完成定義的。
int no;
int age;
String name;
String address;
boolean sex;
* java語言中包括兩種數(shù)據(jù)類型:
- 基本數(shù)據(jù)類型
byte
short
int
long
float
double
boolean
char
- 引用數(shù)據(jù)類型
String.class SUN提供的
System.class SUN提供的
Student.class 程序員自定義的
User.class 程序員自定義的
Product.class 程序員自定義的
Customer.class 程序員自定義的
......
- java語言中所有的class都屬于引用數(shù)據(jù)類型。
// 定義一個(gè)類,類名Student
// Student是一個(gè)類,代表了所有的學(xué)生對(duì)象,是一個(gè)學(xué)生的模板。
public class Student{ // 定義一個(gè)公開的類,起名Student
// 屬性【描述的是對(duì)象的狀態(tài)信息】
// 熟悉通常采用變量的方式來定義
// 在類體當(dāng)中,方法體之外定義的變量被稱為“成員變量”
// 成員變量沒有賦值,系統(tǒng)賦默認(rèn)值:一切箱0看齊。
// 學(xué)號(hào)
int no;
// 姓名
String name;
// 性別
boolean sex;
// 年齡
int age;
// 住址
String address;
// 方法
// 方法描述的是對(duì)象的動(dòng)作信息
// 當(dāng)前例子就只描述屬性了
}
// 學(xué)生類
// 學(xué)生類是一個(gè)模板
// 描述了所有學(xué)生的共同特征【狀態(tài)+行為】
// 當(dāng)前類只描述學(xué)生的狀態(tài)信息【屬性】
// Student是類,屬于引用數(shù)據(jù)類型,這個(gè)類型名就是:Student
public class Student{
// 類體-屬性+方法
// 屬性【存儲(chǔ)數(shù)據(jù)采用變量的形式】
// 由于變量定義在類體當(dāng)中,方法體之外,這種變量稱為成員變量
// 所有學(xué)生都有學(xué)好信息
// 但是每一個(gè)學(xué)生的學(xué)號(hào)都是不同的
// 所以要訪問這個(gè)學(xué)號(hào)必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問學(xué)號(hào)信息
// 學(xué)號(hào)信息不能直接通過“類”去訪問,所以這種成員變量又被叫做:實(shí)例變量
// 對(duì)象又被稱為實(shí)例,實(shí)例變量又成為對(duì)象變量?!緦?duì)象級(jí)別的變量】
// 不創(chuàng)建對(duì)象,這個(gè)no變量的內(nèi)存空間是不存在的,只有創(chuàng)建了對(duì)象,這個(gè)no變量?jī)?nèi)存空間才會(huì)創(chuàng)建
int no;
// 姓名
String name;
// 年齡
int age;
// 性別
boolean sex;
// 住址
String addr;
}
// 成員變量沒有手動(dòng)賦值的話,系統(tǒng)賦默認(rèn)值
// 默認(rèn)值
/*
數(shù)據(jù)類型 默認(rèn)值
---------------------------------
byte,short,int,long 0
float,double 0.0
boolean false
char \u0000
引用數(shù)據(jù)類型 null 空值
*/
// -----------------------------------------------------------------------------------------------------
/*
對(duì)象的創(chuàng)建和使用
*/
public class OOTest01
{
public static void main(String[] args){
// int 是基本數(shù)據(jù)類型
// i 是一個(gè)變量名
// 10是一個(gè)int類型的字面值
int i = 10;
// 通過一個(gè)類可以實(shí)例化N個(gè)對(duì)象
// 實(shí)例化對(duì)象的語法:new 類名();
// new是java語言當(dāng)中的一個(gè)運(yùn)算符
// new運(yùn)算符的作用是創(chuàng)建對(duì)象,在JVM堆內(nèi)存當(dāng)中開辟新的內(nèi)存空間
// 方法區(qū)內(nèi)存:在類加載的時(shí)候,class字節(jié)碼片段被加載到該內(nèi)存空間當(dāng)中
// 棧內(nèi)存(局部變量):方法代碼片段執(zhí)行的時(shí)候,會(huì)給該方法分配內(nèi)存空間,在棧內(nèi)存中壓棧
// 堆內(nèi)存:new的對(duì)象在堆內(nèi)存中存儲(chǔ)
// Student是一個(gè)應(yīng)用數(shù)據(jù)類型
// s 是一個(gè)變量名
// new Student()是一個(gè)學(xué)生對(duì)象
// s是一個(gè)局部變量【在棧內(nèi)存中存儲(chǔ)】
// 什么是對(duì)象?new運(yùn)算符在堆內(nèi)存中開辟的內(nèi)存空間稱為對(duì)象
// 什么是引用?引用是一個(gè)變量,只不過這個(gè)變量保存了另一個(gè)java對(duì)象的內(nèi)存地址
// java語言當(dāng)中,程序員不能直接操作堆內(nèi)存,java中沒有指針,不像c語言
// java語言當(dāng)中,程序員只能通過“引用”去訪問堆內(nèi)存當(dāng)中對(duì)象內(nèi)部的示例變量
Student s = new Student();
// 訪問實(shí)例變量的語法格式:
// 讀取數(shù)據(jù):引用.變量名
// 修改數(shù)據(jù):引用.變量名 = 值
/*
int stuNo = s.no;
String stuName = s.name;
int stuAge = s.age;
boolean stuSex = s.sex;
String stuAddr = s.addr;
System.out.println("學(xué)號(hào) = " + stuNo);
System.out.println("姓名 = " + stuName);
System.out.println("年齡 = " + stuAge);
System.out.println("性別 = " + stuSex);
System.out.println("地址 = " + stuAddr);
*/
s.no = 10;
s.name = "jack";
s.age = 20;
s.sex = true;
s.addr = "深圳";
System.out.println("學(xué)號(hào) = " + s.no); // 10
System.out.println("姓名 = " + s.name); // jack
System.out.println("年齡 = " + s.age); // 20
System.out.println("性別 = " + s.sex); // true
System.out.println("地址 = " + s.addr); // 深圳
// 編譯報(bào)錯(cuò),no這個(gè)實(shí)例變量不能直接采用”類名“的方式訪問
// 因?yàn)閚o是實(shí)例變量,對(duì)象級(jí)別的變量,變量存儲(chǔ)在java對(duì)象的內(nèi)部,必須先有對(duì)象
// 通過對(duì)象才能訪問no這個(gè)實(shí)例變量,不能直接通過"類名"訪問
// System.out.println(Student.no);
// 在通過類實(shí)例化一個(gè)全新的對(duì)象
// stu是一個(gè)引用類型
// stu同時(shí)也是一個(gè)局部變量
// Student是變量的數(shù)據(jù)類型
Student stu = new Student();
System.out.println("學(xué)號(hào) = " + stu.no); // 0
System.out.println("姓名 = " + stu.name); // null
System.out.println("年齡 = " + stu.age); // false
System.out.println("性別 = " + stu.sex); // 0
System.out.println("地址 = " + stu.addr); // null
}
}
/*
局部變量在棧內(nèi)存中存儲(chǔ)
成員變量中的實(shí)例變量在堆內(nèi)存的java對(duì)象內(nèi)存存儲(chǔ)
實(shí)例變量是一個(gè)對(duì)象一份,100個(gè)對(duì)象有100份。
*/

// 用戶類
public class User{
// 屬性【以下都是成員變量之實(shí)例變量】
// 用戶編號(hào)
// int 是一種基本數(shù)據(jù)類型:整數(shù)型
// no是一個(gè)實(shí)例變量
int no;
// 用戶名
// String 是一種引用數(shù)據(jù)類型:代表字符串
// name是一個(gè)實(shí)例變量
// name是一個(gè)引用
String name;
// 家庭住址
// Adddress是一種引用數(shù)據(jù)類型:代表家庭住址
// addr是一個(gè)實(shí)例變量
// addr是一個(gè)引用
Address addr;
}
// ----------------------------------------------------------------------
// 家庭住址類
public class Address{
// 屬性成員變量之實(shí)例變量】
// 城市
// String是一種引用數(shù)據(jù)類型,city是一個(gè)變量名,屬于實(shí)例變量
// oity是一個(gè)引用:保存內(nèi)存地址的一個(gè)變量,該變量保存內(nèi)存地址指向了堆內(nèi)存當(dāng)中的對(duì)象
String city;
// 街道
String street;
// 郵編
String zipcode;
}
// ----------------------------------------------------------------------
// 測(cè)試類
public class OOTest02{
public static void main(String[] args){
// 創(chuàng)建User對(duì)象
// u是局部變量
// u是一個(gè)應(yīng)用
// u保存內(nèi)存地址指向堆內(nèi)存的User對(duì)象
User u = new User();
// 輸出User對(duì)象內(nèi)部實(shí)例變量的值
System.out.println(u.no); // 0
System.out.println(u.name); // null
System.out.println(u.addr); // null
// 修改User對(duì)象內(nèi)部實(shí)例變量的值
u.no = 110;
u.name = "jack"; // "jack" 是一個(gè)java對(duì)象,屬于String對(duì)象
u.addr = new Address();
// 在main方法當(dāng)中目前只能看到一個(gè)引用“u”
// 一切都是只能通過u來進(jìn)行訪問
System.out.println(u.name + "居住在那個(gè)城市:" + u.addr.oity);
System.out.println(u.name + "居住在那個(gè)街道:" + u.addr.street);
System.out.println(u.name + "居住在那個(gè)郵編:" + u.addr.zipcode);
u.addr.oity = "深圳";
u.addr.street = "福田";
u.addr.zipcode = "516600";
System.out.println(u.name + "居住在那個(gè)城市:" + u.addr.oity);
System.out.println(u.name + "居住在那個(gè)街道:" + u.addr.street);
System.out.println(u.name + "居住在那個(gè)郵編:" + u.addr.zipcode);
}
}

public class OOTest03{
public static void main(String[] args){
// u是引用
// u是局部變量
User u = new User();
// 上一個(gè)版本中編寫的
// u.addr = new Address();
// a是引用
// a是局部變量
Address a = new Address();
u.addr = a;
System.out.println(u.addr.city); // null
a.city = "天津";
System.out.println(u.addr.city); // 天津
u.addr.city = "深圳";
System.out.println(u.addr.city); // 深圳
}
}

// 丈夫類
public class Husband{
// 姓名
String name;
// 丈夫?qū)ο螽?dāng)中含有妻子引用
Wife w;
}
// -----------------------------------------------------------------
// 妻子類
public class Wife{
// 姓名
String name;
// 妻子對(duì)象當(dāng)中含有丈夫引用
Husband h;
}
// -------------------------------------------------------------------
public class OOTest04{
public static void main(String[] args){
// 創(chuàng)建一個(gè)丈夫?qū)ο?
Husband huangXiaoMing = new Husband();
huangXiaoMing.name = "黃曉明";
// 創(chuàng)建一個(gè)妻子對(duì)象
Wife baby = new Wife();
baby.name = "baby";
// 結(jié)婚【能通過丈夫找到妻子,通過妻子也可以找到丈夫】
huangXiaoMing.w = baby;
baby.h = huangXiaoMing;
// 得到以上“黃曉明”的妻子的名字
System.out.println(huangXiaoMing.name + "的妻子名字叫:" + baby.name);
System.out.println(huangXiaoMing.name + "的妻子名字叫:" + huangXiaoMing.w.name);
}
}

知識(shí)點(diǎn)

// 顧客類
public class Customer
{
// id
int id;
}
// ------------------------------------------------------------------------
// 測(cè)試程序
public class OOTest05
{
public static void main(String[] args){
Customer c = new Customer();
System.out.println(c.id); // 0
c = null;
// 以下程序編譯可以通過,因?yàn)榉险Z法
// 運(yùn)行出現(xiàn)空指針異常
// 空應(yīng)用訪問“實(shí)例”相關(guān)的數(shù)據(jù)一定會(huì)出現(xiàn)空指針異常
// java.lang.NullPointerException
System.out.println(c.id);
}
}
// “實(shí)例”相關(guān)的數(shù)據(jù)表示:這個(gè)數(shù)據(jù)訪問的時(shí)候必須有對(duì)象的參與,這種數(shù)據(jù)就是實(shí)例相關(guān)的數(shù)據(jù)

/*
Java語言是面向?qū)ο?
要想創(chuàng)建對(duì)象必須先定義類
定義類的語法:
[修飾符列表] class 類名{
屬性:
方法:
}
屬性通常采用變量來表示,既然是變量那么變量肯定有數(shù)據(jù)類型?!緮?shù)據(jù)類型包括:基本數(shù)據(jù)類型 + 引用數(shù)據(jù)類型】
屬性對(duì)應(yīng)的是狀態(tài)信息。
觀察現(xiàn)實(shí)世界當(dāng)中超市中的商品,發(fā)現(xiàn)這所有的商品都有一些共同的特征,例如,每一個(gè)商品都有編號(hào),每一個(gè)商品都有單價(jià),所以定義以下的類,來代表所有的商品
*/
public class Product{
// 編號(hào) 【通常是一個(gè)數(shù)字,而且該數(shù)字通常是整數(shù)型的】
// productNo 是基本數(shù)據(jù)類型
// 實(shí)例變量
int productNo;
// 單價(jià) 【通常是一個(gè)數(shù)字,但是數(shù)字可能帶有小數(shù),所以采用浮點(diǎn)型數(shù)據(jù)double表示】
// price 是基本數(shù)據(jù)類型
// 實(shí)例變量
double price;
// ----------------------------------------------------------------------
/*
每一個(gè)類中都可以編寫主方法,但是一般情況下
一個(gè)系統(tǒng)只有一個(gè)入口,所以主方法一般寫一個(gè)
*/
public class ProductTest{ // 商品測(cè)試類
// 程序入口
public static void main(String[] args){
// 創(chuàng)建對(duì)象,商品對(duì)象
// iphone7 局部變量
// iphone7 應(yīng)用
// iphone7 變量中保存內(nèi)存地址的指向堆內(nèi)存當(dāng)中的商品對(duì)象
Product iphone7 = new Product();
// 訪問實(shí)例變量的語法:引用.變量
// 讀?。阂?變量名
System.out.println("商品的編號(hào):" + iphone7.productNo);
System.out.println("商品的單價(jià):" + iphone7.price);
// 修改:引用.變量名 = 值;
iphone7.productNo = 111;
iphone7.price = 68000;
System.out.println("商品的編號(hào):" + iphone7.productNo);
System.out.println("商品的單價(jià):" + iphone7.price);
}
}
// 人類
public class Ren{
// 身份證號(hào)
String id;
// 名字
String name;
// 性別
boolean sex;
// 年齡
int age;
}
// -------------------------------------------------------------------------
/*
別墅類
* 面積
* 主人
*/
public class BieShu{
// 面積
double mianJi;
// 主人【人類】
// 變量/應(yīng)引用
// 變量怎么聲明:數(shù)據(jù)類型 變量名;
// 關(guān)聯(lián)關(guān)系: A has a B 關(guān)系【A對(duì)象中含有B對(duì)象的引用】
// BieShu對(duì)象含有Ren對(duì)象的引用
Ren zhuRen;
}
// ----------------------------------------------------------------------
public class Test{
public static void main(String[] args){
// 思路:先創(chuàng)造人物對(duì)象,再創(chuàng)造別墅對(duì)象,讓別墅有主人
Ren zhangsan = new Ren(); // 初始化
// 不采用系統(tǒng)默認(rèn)值
// 手動(dòng)賦值
zhangsan.id = "45682110";
zhangsan.name = "張三";
zhangsan.sex = true;
zhangsan.age = 100;
// 創(chuàng)建別墅對(duì)象
BieShu fangzi = new BieShu();
fangzi.mianJi = 150.0;
fangzi.zhuRen = zhangsan;
// 想知道房子主人的名字是什么?
System.out.println(fangzi.zhuRen.name);
// 房子換主人
// 創(chuàng)建一個(gè)新的主人對(duì)象
Ren lisi = new Ren();
lisi.name = "李四";
// 換主人
fangzi.zhuRen = lisi;
System.out.println(fangzi.zhuRen.name);
}
}
// 學(xué)生類
class Student{
String name;
int no;
// 筆記本
Notebook book;
}
// ----------------------------------------------------------------------
// 筆記本類
class Notebook{
// 品牌
String brand;
// 型號(hào)
String model;
// 顏色
String color;
}
// ----------------------------------------------------------------------
/*
需求:
定義一個(gè)計(jì)算機(jī)類【電腦/筆記本】,計(jì)算機(jī)類有那些屬性
* 品牌 * 型號(hào) * 顏色
定義一個(gè)學(xué)生類,學(xué)生類有那些屬性:
* 姓名 * 學(xué)號(hào) * 學(xué)生有一臺(tái)筆記本電腦
請(qǐng)編寫程序來表示以上的類,然后分別將類創(chuàng)建為對(duì)象,對(duì)象數(shù)量不限,然后讓其中的一個(gè)學(xué)生去使用其中的一臺(tái)筆記本電腦
然后編譯并運(yùn)行,并且將整個(gè)執(zhí)行過程采用圖形的方式描述出來。
*/
// 測(cè)試類
public class OOTest06{
public static void main(String[] args){
// 創(chuàng)建筆記本對(duì)象
Notebook BiJiBen = new Notebook();
// 手動(dòng)賦值
BiJiBen.brand = "華為";
BiJiBen.model = "KX100";
BiJiBen.color = "黑色";
// 創(chuàng)建學(xué)生對(duì)象
Student s = new Student();
// 手動(dòng)賦值
s.no = 111;
s.name = "jack";
s.book = BiJiBen;
System.out.println(s.name);
System.out.println(s.no);
System.out.println(s.book.brand);
// 讓這個(gè)學(xué)生和筆記本對(duì)象產(chǎn)生關(guān)系【通過學(xué)生能找到他的筆記本】
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.brand);
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.model);
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.color);
// 修改品牌
s.book.brand = "蘋果";
System.out.println("學(xué)號(hào):" + s.no + " 名字叫 " + s.name + " 的電腦品牌是:" + s.book.brand);
}
}
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Druid連接池的自定義過濾功能實(shí)現(xiàn)方法
在數(shù)據(jù)密集型應(yīng)用中,監(jiān)控和分析數(shù)據(jù)庫操作對(duì)于確保性能和穩(wěn)定性至關(guān)重要,本文將探討如何實(shí)現(xiàn)一個(gè)自定義的Druid過濾器來捕獲數(shù)據(jù)庫請(qǐng)求并進(jìn)行日志記錄,以輔助開發(fā)和維護(hù)工作,需要的朋友可以參考下2023-11-11
Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例
這篇文章主要介紹了Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2018-01-01
Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決
這篇文章主要介紹了Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
java?freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件
這篇文章主要為大家詳細(xì)介紹了java如何通過freemarker實(shí)現(xiàn)動(dòng)態(tài)生成excel文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
在spring?boot3中使用native?image的最新方法
這篇文章主要介紹了在spring?boot3中使用native?image?,今天我們用具體的例子來給大家演示一下如何正確的將spring boot3的應(yīng)用編譯成為native image,需要的朋友可以參考下2023-01-01

