虽然现在才是大二,但是受永攀的启发,这个寒假想去西安的IT公司实习下,想看一下,IT企业每天都在做什么,用哪些技术做项目,也好在仅剩的大学时光里有一个清楚的奋斗方向!
考虑到可能1个月后,面试的时候会被问些java的一些基础,所以打算结合《java编程思想》和《java核心技术 卷一》重温一下java。
static关键字
通常来讲,在创建类的时候,就是在描述那个类的对象的外观和行为。除非你用new关键字创建那个类的对象,负责,实际上未获取任何对象。当执行new来创建对象时,数据存储空间才会被分配,其方法才能被外界调用。
这段话的意思就好比,上帝现在创造了人类(即类名)这个物种,人类的外观(即属性)和大猩猩之类的近亲很像都有两个眼睛,一个鼻子,一个嘴巴,行为(即方法)是不再惧怕火,会制造和使用工具。现在,有了人类这个类的属性和相关的方法,但是你没有具体的人(即对象),*这个世界上(即数据存储空间)*同样不会有人,这种生物,它仅仅存在于上帝的脑海里。
但是,当亚当和夏娃出生后(相当于用new创建了对象,即实例化对象),地球上就有人了(数据存储空间得以分配),亚当和夏娃具备人的一切属性有两个眼睛,一个鼻子,一个嘴巴(可以使用属性的值),也有人共有的行为不再惧怕火,会制造和使用工具(可以调用人这个类里面的方法)
有两种情形,上述方法无法解决。
第一种,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至就不需要创建任何对象。
第二种,希望某个特定的方法不要与包含它的类的任何对象关联在一起。即没有创建对象也能调用方法。
就拿上述上帝造人的例子来说
第一种,当没有具体人这种生物的实例对象时,地球上也要为上帝的想法分配一个空间,可以理解为用书本记录下来。
第二种,当没有具体人这种生物的实例对象时,但是想用人有两个眼睛,一个鼻子,一个嘴巴(属性),不再惧怕火,会制造和使用工具(方法)。
static关键字就可以解决。当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起,所以即使从未创建某个类的任何对象,也可以访问static方法或域。
class AxinTest{
static int i = 108;//声明了一个static变量i,并将其初始化为108
static void beBetter(){
AxinTest.i++;
}
}
AxinTest st1 = new AxinTest();
AxinTest st2 = new AxinTest();
AxinTest.i;
/*
在这里,st1.i和st2.i指向同一存储空间,因此它们的值都为108.
引用static变量有两种方法。可以通过一个对象去定位它,如st2.i;也可以通过其类名直接引用
如:AxinTest.i;(使用类名引用是首选方式。)
*/
AxinTest m = new AxinTest();
m.beBetter();//用对象调用beBetter()方法
AxinTest.beBetter();//通过其类名直接调用