逐步深入的学习都会发现主函数的修饰符中的static关键字亦或是在定义一个函数的时候有main函数直接访问也会定义成static void method()如下面的程序片段:
classTest
{
staticvoidmethod(){
Systemoutprintln(Functionmethod());
}
publicstaticvoidmain(String[]args)
{
method();
//实际是:thod();
}
}
/*输出结果是:
Functionmethod()
*/
static关键字用来修饰成员(成员变量和成员函数)也成为类成员未被static修饰的又称为对象成员
被修饰后的成员具备以下特点:
<>随着类的加载而加载随着类的消失而消亡
<>优先于对象存在
<>被所有对象所共享凡是类的实例对象均可以调用静态成员
<>可以直接被类名调用格式是: 类名静态成员(变量或者方法)类名也可以省略
注意事项
<>静态方法只能访问静态成员(变量和方法)
<>非静态方法可以访问静态成员(变量和方法)也可以访问非静态成员
<>静态方法中不可以写thissuper关键字
(thissuper是和对象引用相关的关键字是在对象被创建后才能够用来访问而static成员则是优先于对象存在的)
<>主函数main是静态的
<>静态代码块:
格式static{要执行的内容}
随着类的加载而加载并且执行一次且优先于主函数执行用于给类进行初始化
static出现的时机
<>对象访问成员的时候出现大量的共同数据时候该变量可以定义为静态的
<>若一个方法内部没有非静态数据(即是对象持有的数据)该方法可以定义为静态的
static 关键字在实际项目的应用非常广泛
下面的这个例子来说明以上特点和注意事项: 请仔细阅读下面的代码
classTest{
intage;//普通成员
staticStringattribute=奇女子;//静态成员
Test(){
}
//静态块
static{
Systemoutprintln(世间的奇女子们);
}
publicstaticvoidFengJie(Stringn){
Systemoutprintln(n+是一个+attribute);
//Systemoutprintln(QiNvZisageis:+age);
//无法从静态上下文中引用非静态变量age
//method();
//无法从静态上下文中引用非静态方法
}
publicvoidmethod(){
Systemoutprintln(想要成为奇女子);
}
publicvoidtoBeQiNvZi(Stringn){
FengJie(n);
Systemoutprintln(n+的年龄是:+thisage);
method();
}
publicstaticvoidmain(String[]args){
Systemoutprintln();
Systemoutprintln(你是世间的+Testattribute);
Systemoutprintln(你是世间的+attribute);
/*可以从以下两点解释
main是静态的不能引用非静态成员
age是普通成员变量只能用对象来访问
Systemoutprintln(QINvZI:+Testage);
Systemoutprintln(QINvZI:+age);
*/
Systemoutprintln();
FengJie(凤姐);
TestFengJie(凤姐);
Systemoutprintln();
Testt=newTest();
tage=;
ttoBeQiNvZi(芙蓉);
tFengJie(凤姐);
}
}
/*输出结果
世间的奇女子们
你是世间的奇女子
你是世间的奇女子
凤姐是一个奇女子
凤姐是一个奇女子
芙蓉是一个奇女子
芙蓉的年龄是:
想要成为奇女子
凤姐是一个奇女子
*/