JAVA_SE_Day14
生活随笔
收集整理的這篇文章主要介紹了
JAVA_SE_Day14
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
static(靜態(tài)的)關(guān)鍵字
- static 可以用來修飾 : 屬性 方法 內(nèi)部類 代碼塊
使用static修飾屬性(即靜態(tài)變量)
- 類的屬性用是否使用static修飾可以分為: 靜態(tài)屬性 VS 非靜態(tài)屬性(實(shí)例變量)
- 實(shí)例變量 : 我們創(chuàng)建了類的多個(gè)對(duì)象,每一個(gè)對(duì)象都有一套類中的非靜態(tài)變量
當(dāng)修改其中一個(gè)對(duì)象中的非靜態(tài)變量時(shí),不會(huì)導(dǎo)致其他對(duì)象中同樣的屬性值的變化 - 靜態(tài)變量 : 我們創(chuàng)建了類的多個(gè)對(duì)象,所有對(duì)象共享靜態(tài)變量
當(dāng)通過某一個(gè)對(duì)象修改靜態(tài)變量時(shí),其他對(duì)象調(diào)用此靜態(tài)變量時(shí),時(shí)修改后的值 - 靜態(tài)變量的加載要早于實(shí)例對(duì)象的創(chuàng)建
- 靜態(tài)變量的隨著類的加載而加載,可以通過"類.靜態(tài)變量"的方式進(jìn)行調(diào)用
- 由于類只會(huì)加載一次,則靜態(tài)變量在內(nèi)存中也只會(huì)存在一份,存儲(chǔ)在方法區(qū)的靜態(tài)域中
- 靜態(tài)變量舉例 Math.PI和System.out
使用static修飾方法(靜態(tài)方法)
- 隨著類的加載而加載,可以通過"類.靜態(tài)方法"或"實(shí)例.靜態(tài)方法"的方式來調(diào)用
- 靜態(tài)的方法中只能調(diào)用靜態(tài)的方法或?qū)傩?br /> 非靜態(tài)的方法中能調(diào)用靜態(tài)的方法或?qū)傩院头庆o態(tài)的方法或?qū)傩?/li>
- 在靜態(tài)的方法內(nèi),不能使用this和super關(guān)鍵子
- 以上的原因,主要是static的聲明周期和普通的結(jié)構(gòu)不同,它隨類的加載而加載,當(dāng)類加載的時(shí)候還沒有對(duì)象以及其非靜態(tài)的屬性和方法
什么時(shí)候需要對(duì)屬性和方法使用static
- 屬性 : 屬性被多個(gè)對(duì)象所共享的,不會(huì)隨著對(duì)象的不同而不同,此時(shí)這個(gè)屬性可以設(shè)置為static
- static方法 : 1. 操作靜態(tài)屬性的方法通常設(shè)置為static的
2. 工具類中的方法,習(xí)慣上聲明為static,比如Math,Arrays,Collections
單例設(shè)計(jì)模式
- 就是采取一定的方法保證整個(gè)軟件系統(tǒng)中,某個(gè)類只存在一個(gè)對(duì)象
3.聲明public,static的方法,返回類的對(duì)象
- 餓漢式單例模式 VS 懶漢式單例模式
- 餓漢式: 好處(線程安全) 壞處(對(duì)象加載時(shí)間過長(zhǎng),占用內(nèi)存)
- 懶漢式: 好處(延遲對(duì)象的加載,節(jié)省內(nèi)存) 壞處(線程不安全,需要修改代碼)
- 舉例 java.lang.Runtime
main()方法的使用說明
- main()方法作為程序的入口
- main()方法也是一個(gè)普通的靜態(tài)方法
- main()方法可以作為為我們與控制臺(tái)交互的一種方式
Static練習(xí)
public class Test {public static void main(String[] args) {Circle c1 = new Circle(1.5);Circle c2 = new Circle(2.5);System.out.println(c1.findArea());System.out.println(c2.findArea());System.out.println(c2.getId());System.out.println(Circle.getTotal());} }class Circle{private int id;private double radius;private static int total = 0;private static int init = 1001;public Circle(){total++;id = init++;}public Circle(double radius){this();this.radius = radius;}public double findArea() {return Math.PI * radius * radius;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}public static int getTotal() {return total;}}餓漢式單例模式
// 單例設(shè)計(jì)模式 public class Singleton1 {public static void main(String[] args) {Bank bank1 = Bank.getInstance();Bank bank2 = Bank.getInstance();System.out.println(bank1);System.out.println(bank2);} }// 餓漢式單例模式 class Bank{// 1.始于話類的構(gòu)造器(是為了避免在類的外部造對(duì)象)private Bank() {}// 2.在內(nèi)部創(chuàng)建類的對(duì)象// 4.要求此對(duì)像也是static的,因?yàn)閟tatic方法里不能調(diào)用非靜態(tài)屬性private static Bank instance = new Bank();// 3.提供公共的放,返回類的對(duì)象public static Bank getInstance() {return instance;} }懶漢式單例模式
// 單例模式 public class Singleton2 {public static void main(String[] args) {Order order1 = Order.getInstance();Order order2 = Order.getInstance();System.out.println(order1);System.out.println(order2);} } // 懶漢式單例模式 class Order{// 1.始于話類的構(gòu)造器(是為了避免在類的外部造對(duì)象)private Order() {}// 2.聲明當(dāng)前類的對(duì)象,沒有初始化// 4.此對(duì)象也必須聲明為staticprivate static Order instance = null;// 3.聲明public,static的返回當(dāng)前對(duì)象的方法public static Order getInstance() {if(instance == null ) {instance = new Order();}return instance;}}總結(jié)
以上是生活随笔為你收集整理的JAVA_SE_Day14的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现 蓝桥杯 算法训练 天数计算
- 下一篇: 视图集及路由