Java中的static關(guān)鍵字可以用來(lái)修飾變量和方法。當(dāng)變量或方法被static修飾時(shí),它們將不再屬于某個(gè)特定對(duì)象,而是屬于整個(gè)類,可以通過(guò)類名直接訪問(wèn),而不需要?jiǎng)?chuàng)建對(duì)象,這也是static關(guān)鍵字的一個(gè)最大優(yōu)點(diǎn)。
被static修飾的變量也被稱為靜態(tài)變量或類變量,它們?cè)陬惖乃袑?shí)例之間共享,并且只會(huì)有一份拷貝存在。當(dāng)類被加載時(shí),這些變量就被分配內(nèi)存空間,不需要等到對(duì)象被創(chuàng)建。
public class Example { public static int staticVar = 0; public int instanceVar = 0; public Example() { staticVar++; instanceVar++; } }
在以上代碼中,staticVar是一個(gè)靜態(tài)變量,它在類被加載時(shí)就會(huì)被分配內(nèi)存。在每次創(chuàng)建Example對(duì)象時(shí),它的值都會(huì)遞增,而且所有Example對(duì)象之間共享這個(gè)變量。
被static修飾的方法也被稱為靜態(tài)方法或類方法,它們不能訪問(wèn)非靜態(tài)的變量和方法,因?yàn)樵诜椒ū徽{(diào)用時(shí),可能還不存在對(duì)象。靜態(tài)方法通常常用于工具類、單例模式等場(chǎng)景。
public class MathUtil { public static int max(int a, int b) { return a >b ? a : b; } }
在以上代碼中,max方法是一個(gè)靜態(tài)方法,可以在其他類中直接通過(guò)類名調(diào)用,例如MathUtil.max(1, 2)。
但是需要注意的是,過(guò)度使用static會(huì)破壞面向?qū)ο蟮脑O(shè)計(jì)原則,因?yàn)樗沟么a變得越來(lái)越依賴于全局狀態(tài),可維護(hù)性也會(huì)變得越來(lái)越差。因此,在使用static時(shí)需要權(quán)衡好優(yōu)缺點(diǎn),并考慮場(chǎng)景的具體情況。