Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基礎(chǔ)-初識面向?qū)ο缶幊?#xff08;Object-Oriented-Programming)
作者:尹正杰
版權(quán)聲明:原創(chuàng)作品,謝絕轉(zhuǎn)載!否則將追究法律責任。
?
?
Java是一門面向?qū)ο蟮某绦蛟O(shè)計語言。那么什么是面向?qū)ο缶幊棠?#xff1f;本篇博客會帶你了解到如何定義一個類,以及對自定義的類進行實例化操作。讓我們一起目睹Java語言的編程風格吧。
?
一.類和對象的概念
1>.對象的概念
現(xiàn)實世界中客觀存在的事物就是對象。
2>.類的概念
把一組對象相同的屬性和相同的行為抽象出來就形成了類。類是對一組對象相同屬性和相同行為的描述。
3>.類和對象的關(guān)系
對象是具體的,類是抽象的,類是對象的模板,對象是類的實例。
?
二. 引用數(shù)據(jù)類型分類
提到引用數(shù)據(jù)類型(類),其實我們對它并不模式,如我們使用過的Scanner類,Random類以及Math類。我們可以把類分為兩種:
1>.第一種是Java為我們提供好的,如Scanner,Random,Math類等等,這些以及存在的類中包含了很多的方法與屬性,可供我們使用。
2>.第二種是我們自己創(chuàng)建的類,按照類的定義標準,可以在類中包含多個方法與屬性,來供我們使用,本篇博客以及后面更新的關(guān)于面向?qū)ο缶幊痰膬?nèi)容基本上都是在介紹第二種的簡單使用。
注意,引用類型不僅僅只包含類,在Java編程語言中,引用數(shù)據(jù)類型大致分三種,即數(shù)組,類和借口。本篇博客只是介紹其中的類。
?
三.自定義數(shù)據(jù)類型概述
我們在Java中,將現(xiàn)實生活中的事物抽象了代碼。這時,我們可以使用自定義的數(shù)據(jù)類型(類)來描述(映射)現(xiàn)實生活中的事物。
類,他是引用數(shù)據(jù)類型,與之前學習的(一維數(shù)組,二維數(shù)組)所有引用數(shù)據(jù)類型相同,自定義類也是一種數(shù)據(jù)類型。只是自定義類型并非Java為我們預先提供好的類型。而是我們自定定義的一種引用數(shù)據(jù)類型用來描述的一個事物。
?
四.類與對象的定義
1>.定義類
在Java中,先定義類,再通過類來創(chuàng)建對象。定義類的格式如下:
/* @author :yinzhengjie Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ EMAIL:y1053419035@qq.com */[修飾符] class 類名{//屬性;//行為; }1>.類的修飾符可以有:public,abstract,final等; 2>.class是一個關(guān)鍵字,用來定義類; 3>.類名是程序員起的名字; 4>.類體需要使用一對大括號括起來; 5>.在類體中一般描述所有對象共同的屬性和共同的行為; 6>.屬性用變量來保存,行為用方法來表示;接下來,我們一起來定義一個Person類如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Person{ 8 String name; 9 String gender; //性別 10 int height; 11 String personID; //身份證號碼 12 13 public void eat(Person p){ 14 System.out.printf("%s需要吃飯!\n",p.name); 15 } 16 17 public void drink(Person p){ 18 System.out.format("%s需要喝水!\n",p.name); 19 } 20 21 }2>.創(chuàng)建對象
如何創(chuàng)建對象呢?其實很簡單,格式為:“類名 對象名 = new 類名();”。我們上面一定定義了一個Person類,那么我們就可以把定義的類拿來創(chuàng)建一個Person對象。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class PersonDemo{ 8 public static void main(String[] args){ 9 //第一步,創(chuàng)建對象 10 Person p1 = new Person(); 11 /** 12 * 1>.Person是一個類名,在Java中,類是一種引用數(shù)據(jù)類型,Person是一個數(shù)據(jù)類型 13 * 2>.P1是對象名,實際上就是Person這個類型定義的變量名; 14 * 3>.給p1這個對象進行賦值時,"new Person()"的返回值賦值給P1變量; 15 * 4>.new 運算符會在堆區(qū)中分配一塊存儲空間,把這塊存儲空間的起始地址賦值給變量p1; 16 * 5>.p1 變量中保存的是堆中內(nèi)存的一個地址(引用) 17 */ 18 19 //第二步,類創(chuàng)建了對象之后,對象就可以通過成員運算符(.)訪問它的屬性和方法 20 p1.name = "尹正杰"; 21 p1.gender = "男"; 22 p1.height = 175; 23 p1.personID = "1100201804085280"; 24 System.out.printf("姓名:%s,年齡:%s,身高:%d,身份證號碼:%s\n",p1.name,p1.gender,p1.height,p1.personID); 25 p1.eat(p1); 26 p1.drink(p1); 27 } 28 }3>.案例展示
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Dog{ 8 String nickname; 9 String gender; 10 int age; 11 String varieties; //品種 12 13 public void showInfo(){ 14 System.out.println("以下是狗狗的信息:"); 15 System.out.printf("狗狗的名字是:%s\n",nickname); 16 System.out.printf("狗狗的性別是:%s\n",gender); 17 System.out.printf("狗狗的年齡是:%s\n",age); 18 System.out.printf("狗狗的品種是:%s\n",varieties); 19 } 20 21 public void bark(){ 22 System.out.println("汪汪汪~"); 23 } 24 25 public void eat(){ 26 System.out.println("狗狗喜歡吃肉肉~"); 27 shake(); //在類的一個成員方法中,可以調(diào)用另外的成員方法。 28 } 29 30 public void guard(){ 31 System.out.println("狗狗在看門,生人勿進!"); 32 shake(); 33 } 34 35 public void shake(){ 36 System.out.println("狗狗在搖尾巴"); 37 } 38 }上面我們定義了一個Dog類,我們接下來我們可以調(diào)用一下我們定義的類,代碼如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class DogDemo{ 8 public static void main(String[] args){ 9 Dog myDog = new Dog(); 10 myDog.age = 3; 11 myDog.gender = "公的"; 12 myDog.nickname = "二狗子"; 13 myDog.varieties = "哈士奇"; 14 15 myDog.showInfo(); 16 myDog.guard(); 17 myDog.eat(); 18 } 19 }?
五.類定義成員變量默認初始化
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Person{ 8 /** 9 * 在定義類時,可以給成員變量賦初值,類創(chuàng)建了對象,如果沒有給對 10 *象的這個成員變量賦值,這個成員變量的值就是在定義時賦的初始值。 11 */ 12 String name; 13 String gender; //性別 14 int age; 15 String country = "中國"; //定義變量時,可以賦初值。 16 boolean isMarried; //是都已婚 17 18 public void showInfo(){ 19 System.out.printf("姓名:%s\n",name); 20 System.out.printf("性別:%s\n",gender); 21 System.out.printf("年齡:%s\n",age); 22 System.out.printf("國籍:%s\n",country); 23 System.out.printf("婚否:%s\n",isMarried); 24 } 25 }通過類定義了對象,如果不給對象的各個變量賦值,對象的各個成員變量會進行默認的初始化,如:
1>.數(shù)值性,數(shù)據(jù)默認初始化為0;
2>.字符類型默認初始化為碼值為0的字符;
3>.布爾類型默認初始化為false;
4>.引用數(shù)據(jù)類型默認初始化為null;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class PersonDemo{ 8 public static void main(String[] args){ 9 Person p1 = new Person(); 10 p1.showInfo(); 11 12 Person p2 = new Person(); 13 p2.country = "美國"; 14 p2.showInfo(); 15 } 16 }?
六.自定義類的內(nèi)存圖?
1>.Phone.java文件內(nèi)容
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Phone{ 8 /* 9 要求: 10 使用Java中的類,描述生活中的手機這個事物。 11 */ 12 String color; 13 String brand; 14 double size; 15 }2>.PhoneDemo.java文件內(nèi)容
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class PhoneDemo{ 8 public static void main(String[] args){ 9 Phone p = new Phone(); 10 11 p.color = "土豪金"; 12 13 p.brand = "IPhone 8 puls"; 14 15 p.size = 5.5; 16 17 System.out.println("顏色:" + p.color+ "品牌: " + p.brand + "尺寸大小:" + p.size ); 18 19 } 20 }3>.自定義類型內(nèi)存圖
別看上面就幾行代碼,但是運行機制我們還是得了解的,下面我簡要畫一下圖,以便記憶:
?
七.類定義使用自定義類型定義成員變量
? 其實,我們可以模擬生產(chǎn)小汽車為例,來說明一下用自定義類型定義成員變量,分為三個文件:Engine.java,Car.java以及CarDemo.java文件。
1>.Engine.java文件內(nèi)容如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Engine{ 8 double displacement; //排量 9 int powerSize; //功率 10 11 public void start(){ 12 System.out.println("發(fā)動機點火"); 13 } 14 15 public void stop(){ 16 System.out.println("發(fā)動機熄火"); 17 } 18 }2>.Car.java文件內(nèi)容如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Car{ 8 String carBrand; //汽車品牌 9 int price; //汽車價格 10 String color; //汽車顏色 11 String motorcycleType; //車型 12 double oilConsumption; //油耗 13 14 Engine carEngine; //發(fā)動機 15 /** 16 * 注意,Engine是我們定義的類,也就是說我們可以使用自定義的類型來定義成員變量。 17 */ 18 19 public void start(){ 20 System.out.println("小汽車啟動,實際上是發(fā)動機點火!"); 21 carEngine.start(); 22 } 23 24 public void stop(){ 25 System.out.println("小汽車停止,實際上是發(fā)動機熄火!"); 26 carEngine.stop(); 27 } 28 29 public void showInfo(){ 30 System.out.println("汽車信息如下:"); 31 System.out.format("汽車品牌:%s\n",carBrand); 32 System.out.format("汽車價格:%s\n",price); 33 System.out.format("汽車顏色:%s\n",color); 34 System.out.format("車型:%s\n",motorcycleType); 35 System.out.format("油耗:%s\n",oilConsumption); 36 //排量和功率是發(fā)動機的排量和功率。 37 System.out.format("排量:%s\n",carEngine.displacement); 38 System.out.format("功率:%s\n",carEngine.powerSize); 39 } 40 }3>.CarDemo.java文件內(nèi)容如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class CarDemo{ 8 public static void main(String[] args){ 9 //創(chuàng)建小汽車對象,也可以說是生成了一臺小汽車 10 Car car1 = new Car(); 11 12 car1.carBrand = "Benz"; //相當于貼標簽 13 car1.price = 130; //噴漆 14 car1.color = "red"; //相當于噴漆 15 car1.motorcycleType = "SUV"; //設(shè)置類型 16 car1.oilConsumption = 15; //標注油耗 17 18 Engine engine1 = new Engine(); //先生成一臺發(fā)動機 19 engine1.displacement = 6.0; 20 engine1.powerSize = 480; 21 car1.carEngine = engine1; //相當于把發(fā)動機裝配到小汽車上 22 car1.showInfo(); 23 24 car1.start(); 25 car1.stop(); 26 } 27 }?
八.匿名對象(Anonymous Object)
1 匿名對象是對象的簡化形式 2 匿名對象兩種使用情況 3 1.對象方法僅進行一次調(diào)用時,多次調(diào)用不適合 4 2.匿名對象可以作為實際參數(shù)進行傳遞 5 使用匿名對象的好處 6 1.簡化寫法,不必定義變量接住對象引用 7 2.對象用完之后就變成垃圾內(nèi)存,可以被垃圾回收器回收?
轉(zhuǎn)載于:https://www.cnblogs.com/yinzhengjie/p/8746919.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Java基础-初识面向对象编程(Object-Oriented-Programming)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仿探探卡片滑动vue封装并发布到npm
- 下一篇: swscanf_s和sscanf_s的使