java面向對象:關鍵字 —(16)

static:靜態的

1.可以用來修飾的結構:主要用來修飾類的內部結構

屬性、方法、代碼塊、內部類

2.static修飾屬性:靜態變量(或類變量)

	2.1 屬性,是否使用static修飾,又分為:靜態屬性  vs 非靜態屬性(實例變量)
  •     實例變量:我們創建了類的多個對象,每個對象都獨立的擁一套類中的非靜態屬性。當修改其中一個對象中的非靜態屬性時,不會導致其他對象中同樣的屬性值的修改。
    
  •       靜態變量:我們創建了類的多個對象,多個對象共享同一個靜態變量。當通過某一個對象修改靜態變量時,會導致其他對象調用此靜態變量時,是修改過了的。
    
  •  2.2 static修飾屬性的其他說明:
    
  •   ① 靜態變量隨著類的加載而加載。可以通過"類.靜態變量"的方式進行調用
    
  •      ② 靜態變量的加載要早于對象的創建。
    
  •      ③ 由于類只會加載一次,則靜態變量在內存中也只會存在一份:存在方法區的靜態域中。
    
  •      ④		類變量	實例變量
    
  •      類		yes		no
    
  •      對象	yes		yes
    
  •     2.3 靜態屬性舉例:System.out; Math.PI;
    

3.靜態變量內存解析:

在這里插入圖片描述

4.static修飾方法:靜態方法、類方法

① 隨著類的加載而加載,可以通過"類.靜態方法"的方式進行調用
② 靜態方法 非靜態方法

  •      類		    yes		no
    
  •      對象		yes		yes
    

③ 靜態方法中,只能調用靜態的方法或屬性
非靜態方法中,既可以調用非靜態的方法或屬性,也可以調用靜態的方法或屬性

5. static的注意點:

5.1 在靜態的方法內,不能使用this關鍵字、super關鍵字
5.2 關于靜態屬性和靜態方法的使用,大家都從生命周期的角度去理解。

6.如何判定屬性和方法應該使用static關鍵字:

6.1 關于屬性

屬性是可以被多個對象所共享的,不會隨著對象的不同而不同的。
類中的常量也常常聲明為static

6.2 關于方法

操作靜態屬性的方法,通常設置為static的
工具類中的方法,習慣上聲明為static的。 比如:Math、Arrays、Collections
7.使用舉例:
舉例一:Arrays、Math、Collections等工具類
舉例二:單例模式
舉例三:
class Circle{

private double radius;
private int id;//自動賦值public Circle(){id = init++;total++;
}public Circle(double radius){this();

// id = init++;
// total++;
this.radius = radius;

}private static int total;//記錄創建的圓的個數
private static int init = 1001;//static聲明的屬性被所對象所共享public double findArea(){return 3.14 * radius * radius;
}public double getRadius() {return radius;
}public void setRadius(double radius) {this.radius = radius;
}public int getId() {return id;
}public static int getTotal() {return total;
}

}

1.設計模式的說明

1.1 理解

設計模式是在大量的實踐中總結和理論化之后優的代碼結構、編程風格、以及解決問題的思考方式。

1.2 常用設計模式 — 23種經典的設計模式 GOF
創建型模式,共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共7種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共11種:策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

2.單例模式

2.1 要解決的問題:
所謂類的單例設計模式,就是采取一定的方法保證在整個的軟件系統中,對某個類只能存在一個對象實例。
2.2 具體代碼的實現:
餓漢式1:
class Bank{

//1.私化類的構造器
private Bank(){}//2.內部創建類的對象
//4.要求此對象也必須聲明為靜態的
private static Bank instance = new Bank();//3.提供公共的靜態的方法,返回類的對象
public static Bank getInstance(){return instance;
}

}

餓漢式2:使用了靜態代碼塊
class Order{

//1.私化類的構造器
private Order(){}//2.聲明當前類對象,沒初始化
//4.此對象也必須聲明為static的
private static Order instance = null;static{instance = new Order();

}

//3.聲明public、static的返回當前類對象的方法
public static Order getInstance(){return instance;
}

}
懶漢式:
class Order{
//1.私化類的構造器
private Order(){ }
//2.聲明當前類對象,沒初始化
//4.此對象也必須聲明為static的
private static Order instance = null;

//3.聲明public、static的返回當前類對象的方法
public static Order getInstance(){if(instance == null){instance = new Order();}return instance;
}

}
2.3 兩種方式的對比:

  • 餓漢式:
  •  壞處:對象加載時間過長。
    
  •  好處:餓漢式是線程安全的
    
  •  懶漢式:好處:延遲對象的創建。
    
  •   目前的寫法壞處:線程不安全。--->到多線程內容時,再修改
    

main()方法作為程序的入口
main()方法也是一個普通的靜態方法
main()方法可以作為我們與控制臺交互的方式。(之前:使用Scanner)

如何將控制臺獲取的數據傳給形參:String[] args?
運行時:java 類名 “Tom” “Jerry” “123” “true”

sysout(args[0]);//“Tom”
sysout(args[3]);//“true” -->Boolean.parseBoolean(args[3]);
sysout(args[4]);//報異常

小結:一葉知秋
public static void main(String[] args){//方法體}

權限修飾符:private 缺省 protected pubilc ---->封裝性
修飾符:static \ final \ abstract \native 可以用來修飾方法
返回值類型: 無返回值 / 有返回值 -->return
方法名:需要滿足標識符命名的規則、規范;“見名知意”
形參列表:重載 vs 重寫;參數的值傳遞機制;體現對象的多態性
方法體:來體現方法的功能

main(){
Person p = new Man();
p.eat();
//p.earnMoney();

Man man = new Man();
man.eat();
man.earnMoney();
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《少年先瘋隊》第九次團隊作業:Beta沖刺與團隊項目驗收

博文簡要信息表: 項目內容軟件工程https://www.cnblogs.com/nwnu-daizh/本次實驗鏈接地址https://www.cnblogs.com/nwnu-daizh/p/11056511.html團隊名稱少年先瘋隊作業學習目標(1)掌握軟件黑盒測試技術;(2)…

vue-resource jsonp跨域問題解決方法

最近在學習vue.js 碰到個ajax跨域請求的問題,之前知道可以用jsonp解決,但是一直沒實踐過,這次用發現里面好多問題,所以現在記錄下來,希望可以給剛接觸使用jsonp的同學一點幫助! 關于什么是jsonp&#xff0c…

虛擬機無法連接至網絡

問題: 虛擬機中的win XP系統無法連接至外部win10系統網絡 嘗試解決方法: 1)換用橋接模式和NAT模式,無效 2)恢復虛擬機網絡屬性至默認狀態,無效 最終解決方法: 換用外部無線網絡,即能…

java面向對象:關鍵字 —(17)

interface:接口 1.使用說明: 1.接口使用interface來定義 2.Java中,接口和類是并列的兩個結構3.如何定義接口:定義接口中的成員 3.1 JDK7及以前:只能定義全局常量和抽象方法>全局常量:public static final的.但是…

原生js來實現對dom元素class的操作方法

jQuery操作class的方式非常強大 寫了一個利用原生js來實現對dom元素class的操作方法 1.addClass:為指定的dom元素添加樣式 2.removeClass:刪除指定dom元素的樣式 3.toggleClass:如果存在(不存在),就刪除(添加)一個樣式 4.hasClass:判斷樣式是否存在 下面為一toggleC…

python+selenium配置Edge瀏覽器

Chrome, Firefox只需要修改conftest.py文件中的 pytest.fixture(scopesession)def browser(): return BzwUtil.read_yml(config.yml,WEB_INFO,BROWSER) add option in pytest command line def pytest_addoption(parser): parser.addoption("--browser", actio…

JSON.parse和JSON.stringify方法

JSON.parse() JSON.parse()方法將json字符串轉化為Javascript值或對象。 語法 JSON.parse(text[,reviver]) 參數 text:要被解析成Javascript值的字符串 reviver:若是一個函數則規定了原始值(text)如何被解析改造,在被返回前。 示例 JSON.parse({}); //…

java面向對象:異常處理 —(18)

1. 異常的體系結構 java.lang.Throwable |-----java.lang.Error:一般不編寫針對性的代碼進行處理。|-----java.lang.Exception:可以進行異常的處理|------編譯時異常(checked)|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|------運行時異常(un…

vue請求簡單配置

簡單記錄一下vue的http請求配置相關 測試環境請求接口設置:   1. config/dev.env.js添加:     module.exports merge(prodEnv, {       NODE_ENV: "development",       API_ROOT: "http://", //配置http請求頭     })…

【vue報錯】——listen EADDRINUSE :::8080 解決方案

問題原因: 此項錯誤表示 8080 端口被占用 解決方案一: 打開cmd 輸入:netstat -ano 查看所有端口信息,如圖,找到端口 8081,以及對應的 PID 輸入:tskill PID 即可殺死進程 解決方案二&#xff1a…

記錄_20190626

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result異常的解決方法 原來JAVA中如果用BigDecimal做除法的時候一定要在divide方法中傳遞第二個參數,定義精確到小數點后幾位,否則在不整除的情況下…

String與Array

public class Api {Testpublic void StringApi(){// equals() 判斷內容是否相同區分大小寫// equalsIgnoreCase() 判斷內容是否相同不區分大小寫// length() 獲取長度// charAt(int index) 獲取某個索引位置的字…

HTML與CSS布局技巧總結

很多人對CSS的布局有困惑,實際的應用場景中由于布局種類多難以選擇。今天我花些時間總結下自己對CSS布局的理解,分析下了解各種布局的優劣,同時希望能分享給初入前端的朋友們一些在布局上的經驗,如果有那些地方總結的不好&#xf…

當談論迭代器時,我談些什么?

花下貓語:之前說過,我對于編程語言跟其它學科的融合非常感興趣,但我還說漏了一點,就是我對于 Python 跟其它編程語言的對比學習,也很感興趣。所以,我一直希望能聚集一些有其它語言基礎的同學,一…

在Vue-cli項目中使用echarts

該示例使用 vue-cli 腳手架搭建 安裝echarts依賴 npm install echarts -S11 或者使用國內的淘寶鏡像: 安裝 npm install -g cnpm --registryhttps://registry.npm.taobao.org11 使用 cnpm install echarts -S11 創建圖表 全局引入 main.js // 引入echarts im…

Java的模板文件配置

Java的Mappers文件配置 <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.qfedu.…

Python爬蟲學習二

1、selenium自動測試工具 2、主要使用selenium的目的是跳過登錄驗證3、下載驅動器下載請求庫from selenium import webdriver import time#1、 直接在script文件夾中找驅動 driverwebdriver.Chrome() time.sleep(5) driver.close()#2、找到驅動路徑 #webdriver.Chrome(rD:\Pyth…

通過GitHub Pages創建個人主頁

登陸github,創建新倉庫&#xff0c;寫入名字, 這里要以github.io做后綴, 不然創建出來的不是GitHub Pages 打開終端, cd到自己想要的文件夾后clone到本地 git clone https://github.com/username/username.github.io 進入這個項目文件夾 cd username.github.io 把寫好HTML項目拷…

Spring IOC 配置文件模板

基于XML的普通設置 <?xml version1.0 encodingUTF-8 ?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/contex…

validate+jquery+ajax表單驗證

1.案例 1.1 Html form表單內容 <form class"cForm" id"cForm" method"post" action""> <p> <label for"user">用戶名</label> <input id"user" name"user" required minlen…