# JAVA之旅(四)——面向對象思想,成員/局部變量,匿名對象,封裝 , private,構造方法,構造代碼塊
* * *
> 加油吧,節奏得快點了
### 1.概述
> 上篇幅也是講了這點,這篇幅就著重的講一下思想和案例
>
> 就拿買電腦來說吧,首先,你不懂電腦,你去電腦城買電腦,和大象裝冰箱里一樣,是什么步驟?咨詢 砍價 ,談妥了就那電腦走人,對吧,這就是面向過程的思想,而面向對象是:你有一個哥們,他懂電腦,什么都會,你只要帶他去,就行,你這個哥們就是對象,在JAVA中,我們就是操作一個對象去完成各種各樣的操作的,這就是面向對象的思想
### 2.成員變量
> 面向對象有三大特征
* 封裝
* 繼承
> 那具體是什么意思呢??
> 我們開發的話,就是就是在找對象,沒有對象的話,就new 一個對象,對象和類,對象和對象都是有關系的,我們需要去維護
>
> 類就是生活中對事物的描述?
> 對象就是這類事物實實在在存在的個體
>
> 需求:描述汽車(顏色,輪胎個數),描述事物就是在描述事物的屬性和行為?
> 我們可以直接定義一個class
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Car car = new Car();
// 輸出顏色
System.out.println(car.color + "的小汽車");
// 輸出輪胎個數
System.out.println(car.num + "個輪子");
// 輸出行為
car.run();
}
}
/**
* 汽車類
*
* @author LGL
*
*/
class Car {
// 顏色
String color = "紅色";
// 輪胎個數
int num = 4;
// 行為
void run() {
System.out.println("我是" + color + "的小汽車,我有" + num + "個輪子");
}
}
~~~
> 這樣大家看的懂嗎,我們猴子姐new一個Car就可以

> 其實定義類,就是描述事物。就是在定義屬性和行為,屬性和行為共同成為類中的成員(**成員變量**)
### 3.局部變量
> 其實局部變量我們一直在寫,他和成員變量的區別在于作用的范圍不一樣
>
> 我們以上述的例子
* 成員變量:作用在全局中
* 局部變量:作用在Car類里
> 在內存中的存儲和位置
* 成員變量在堆內存中,因為對象的存在才在內存中存在
* 局部變量在棧內存中
### 4.匿名對象
> 這是一個小知識點,匿名換句話其實就是沒有名字的意思
* 匿名對象是對象的簡化版
* 匿名對象兩種使用情況?
* 當對對象方法僅進行一次調用的時候
* 匿名對象可以作為實際參數進行傳遞
> 我們用簡單的例子
~~~
//正常的寫法
Car c = new Car();
c.num = 5;
//匿名對象
new Car().num = 5;
~~~
> 可以看到我不起名字直接去更改num的值了,這就是匿名對象
>
> 第二種使用方式實際參數去傳遞,其實在上面我用到了
~~~
// 輸出顏色
System.out.println(new Car().color + "的小汽車");
~~~
> 這樣就OK了
### 5.封裝
> OK,終于說道我們的核心思想了Encapsulation
>
> 封裝的含義:是指隱藏的對象的屬性和實現細節,僅對外提供訪問方式
>
> 好處
* 將變化隔開
* 便于使用
* 提高復用性
* 提高安全性
> 封裝原則
>
> 將不需要對外提供的內容都隱藏起來;?
> 把屬性都隱藏,提供對外訪問方式
>
> 我們寫例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
showString("我是封裝");
}
/**
* 封裝
*
* @param str
*/
public static void showString(String str) {
System.out.println(str);
}
}
~~~
> 這個就是最簡單的封裝了,你給我個字符串我就打印,過程你不必知道,函數本身就是一個最小的封裝體
### 6.private
> 私有的,怎么使用?
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
p.age = 20;
p.speak();
}
}
class Person {
int age;
// 說話方法
void speak() {
System.out.println("我今年" + age + "歲");
}
}
~~~
> 我們現在的代碼是這樣寫的,輸出的結果

> 這里我們直接訪問了arg,這里就存在了一個安全隱患,這里也就是用到private修飾符去修飾arg了

> 在這里,就看到一個錯誤提示了,因為我們用private修飾了之后,你就不能拿到了
>
> private:私有,權限修飾符:用于修飾類中的成員(成員變量,成員函數)?
> 注意的是,私有只在本類中有效
>
> 那我們怎么去訪問呢?你既然私有了,就需要對外提供一個方法
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
// p.age = 20;
p.setAges(20);
p.speak();
}
}
class Person {
// 私有
private int age;
/**
* 對外提供方法
*
* @param a
*/
public void setAges(int a) {
age = a;
}
// 說話方法
void speak() {
System.out.println("我今年" + age + "歲");
}
}
~~~
> 我們這樣做,也是可以的

> 但是我們一般也不會這樣做,我們有規范
~~~
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
~~~
> 所以我們的完整代碼應該是這樣寫
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
// p.age = 20;
// p.setAges(20);
p.setAge(20);
p.speak();
}
}
class Person {
// 私有
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 說話方法
void speak() {
System.out.println("我今年" + age + "歲");
}
}
~~~
> 輸出的結果

> 但是你要切記,注意,私有僅僅是封裝的一種表現形式;
>
> 我們之所以對外提供訪問方式就是為了方便我們加入邏輯判斷語句,對訪問的數據進行操作,提高代碼的健壯性
### 7.構造方法
> 特點
* 函數名和類名相同
* 不用定義返回值類型
* 不可以寫return語句
> 作用
* 給對象進行初始化
> 注意
* 默認構造函數的特點
* 多個構造函數是以重載的形式存在的
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
}
}
class Person {
//構造方法
public Person() {
System.out.println("我是構造方法");
}
}
~~~
> 我們只要new了,就執行了構造方法

> 對象一建立就會調用與之對應的構造函數?
> 構造函數的作用:可以用于對對象的初始化?
> 構造函數的小細節,當一個類中沒有定義構造函數時,系統默認給該類加入一個空參數構造方法?
> 當該類定義了構造方法,那就默認的沒有了,構造方法用了重載
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
Person p1 = new Person("我是小米");
Person p2 = new Person("我是小王", 20);
}
}
class Person {
// 構造方法
public Person() {
System.out.println("我是構造方法");
}
// 構造方法
public Person(String str) {
System.out.println(str);
}
// 構造方法
public Person(String str, int age) {
System.out.println("我是構造方法" + age);
}
}
~~~
> 就是這樣,我們輸出

### 8.構造代碼塊
> 這里提個小知識點來完結本篇幅?
> 我們看一段代碼
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
Person p = new Person();
}
}
class Person {
{
System.out.println("我是構造方法");
}
}
~~~
> 想知道他的運行結果是什么嗎

> 咦,為什么方法都沒有名字,就運行了,這個{}就是構造方法嗎??
> 如果你代用多個構造方法的話你會發現他掉歐勇多次,這個現象,我們可以這樣解釋
>
> 構造代碼塊:
* 作用就是給對象初始化
* 而且優先于構造方法
> 和構造方法的區別:
* 構造代碼塊是給所有對象進行統一初始化
* 而構造函數是給對應的對象初始化
> 構造方法中定義的是不同對象共性的初始化內容(抽取)
#### OK,我們下篇繼續,JAVA的思想概念性的東西需要吃透才行,所有博客就慢慢的更新
#### 熱愛Android可以加群:555974449
版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
- 0-發現
- AndroidInterview-Q-A
- Android能讓你少走彎路的干貨整理
- LearningNotes
- temp
- temp11
- 部分地址
- 0-待辦任務
- 待補充列表
- 0-未分類
- AndroidView事件分發與滑動沖突處理
- Spannable
- 事件分發機制詳解
- 1-Java
- 1-Java-01基礎
- 未歸檔
- 你應該知道的JDK知識
- 集合框架
- 1-Java-04合集
- Java之旅0
- Java之旅
- JAVA之旅01
- JAVA之旅02
- JAVA之旅03
- JAVA之旅04
- JAVA之旅05
- JAVA之旅06
- JAVA之旅07
- JAVA之旅08
- JAVA之旅09
- java之旅1
- JAVA之旅10
- JAVA之旅11
- JAVA之旅12
- JAVA之旅13
- JAVA之旅14
- JAVA之旅15
- JAVA之旅16
- JAVA之旅17
- JAVA之旅18
- JAVA之旅19
- java之旅2
- JAVA之旅20
- JAVA之旅21
- JAVA之旅22
- JAVA之旅23
- JAVA之旅24
- JAVA之旅25
- JAVA之旅26
- JAVA之旅27
- JAVA之旅28
- JAVA之旅29
- java之旅3
- JAVA之旅30
- JAVA之旅31
- JAVA之旅32
- JAVA之旅33
- JAVA之旅34
- JAVA之旅35
- 1-Java-05辨析
- HashMapArrayMap
- Java8新特性
- Java8接口默認方法
- 圖解HashMap(1)
- 圖解HashMap(2)
- 2-Android
- 2-Android-1-基礎
- View繪制流程
- 事件分發
- AndroidView的事件分發機制和滑動沖突解決
- 自定義View基礎
- 1-安卓自定義View基礎-坐標系
- 2-安卓自定義View基礎-角度弧度
- 3-安卓自定義View基礎-顏色
- 自定義View進階
- 1-安卓自定義View進階-分類和流程
- 10-安卓自定義View進階-Matrix詳解
- 11-安卓自定義View進階-MatrixCamera
- 12-安卓自定義View進階-事件分發機制原理
- 13-安卓自定義View進階-事件分發機制詳解
- 14-安卓自定義View進階-MotionEvent詳解
- 15-安卓自定義View進階-特殊形狀控件事件處理方案
- 16-安卓自定義View進階-多點觸控詳解
- 17-安卓自定義View進階-手勢檢測GestureDetector
- 2-安卓自定義View進階-繪制基本圖形
- 3-安卓自定義View進階-畫布操作
- 4-安卓自定義View進階-圖片文字
- 5-安卓自定義View進階-Path基本操作
- 6-安卓自定義View進階-貝塞爾曲線
- 7-安卓自定義View進階-Path完結篇偽
- 8-安卓自定義View進階-Path玩出花樣PathMeasure
- 9-安卓自定義View進階-Matrix原理
- 通用類介紹
- Application
- 2-Android-2-使用
- 2-Android-02控件
- ViewGroup
- ConstraintLayout
- CoordinatorLayout
- 2-Android-03三方使用
- Dagger2
- Dagger2圖文完全教程
- Dagger2最清晰的使用教程
- Dagger2讓你愛不釋手-終結篇
- Dagger2讓你愛不釋手-重點概念講解、融合篇
- dagger2讓你愛不釋手:基礎依賴注入框架篇
- 閱讀筆記
- Glide
- Google推薦的圖片加載庫Glide:最新版使用指南(含新特性)
- rxjava
- 這可能是最好的RxJava2.x入門教程完結版
- 這可能是最好的RxJava2.x入門教程(一)
- 這可能是最好的RxJava2.x入門教程(三)
- 這可能是最好的RxJava2.x入門教程(二)
- 這可能是最好的RxJava2.x入門教程(五)
- 這可能是最好的RxJava2.x入門教程(四)
- 2-Android-3-優化
- 優化概況
- 各種優化
- Android端秒開優化
- apk大小優化
- 內存分析
- 混淆
- 2-Android-4-工具
- adb命令
- 一鍵分析Android的BugReport
- 版本控制
- git
- git章節簡述
- 2-Android-5-源碼
- HandlerThread 源碼分析
- IntentService的使用和源碼分析
- 2-Android-9-辨析
- LRU算法
- 什么是Bitmap
- 常見圖片壓縮方式
- 3-Kotlin
- Kotlin使用筆記1-草稿
- Kotlin使用筆記2
- kotlin特性草稿
- Kotlin草稿-Delegation
- Kotlin草稿-Field
- Kotlin草稿-object
- 4-JavaScript
- 5-Python
- 6-Other
- Git
- Gradle
- Android中ProGuard配置和總結
- gradle使用筆記
- Nexus私服搭建
- 編譯提速最佳實踐
- 7-設計模式與架構
- 組件化
- 組件化探索(OKR)
- 1-參考列表
- 2-1-組件化概述
- 2-2-gradle配置
- 2-3-代碼編寫
- 2-4-常見問題
- 2-9-值得一讀
- 8-數據結構與算法
- 0臨時文件
- 漢諾塔
- 8-數據-1數據結構
- HashMap
- HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比較
- 遲到一年HashMap解讀
- 8-數據-2算法
- 1個就夠了
- Java常用排序算法(必須掌握的8大排序算法)
- 常用排序算法總結(性能+代碼)
- 必須知道的八大種排序算法(java實現)
- 9-職業
- 閱讀
- 書單
- 面試
- 面試-01-java
- Java面試題全集駱昊(上)
- Java面試題全集駱昊(下)
- Java面試題全集駱昊(中)
- 面試-02-android
- 40道Android面試題
- 面試-03-開源源碼
- Android圖片加載框架最全解析(二),從源碼的角度理解Glide的執行流程
- 面試-07-設計模式
- 面試-08-算法
- 面試-09-其他
- SUMMARY
- 版權說明
- temp111