---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

3.6 static关键字

1、共享数据:static用于修饰成员(成员函数,成员变量),这些成员都是被对象共享的成员。

2、特点

        ①、随类的加载而加载,消失而消失。

        ②、优先于对象而存在

        ③、被所有对象所共享

        ④、可以直接被类名所调用

        代码示例

class Chinese
{
static String country = "中国";//共享数据
String name;
int age;
void singOurCountry(){
System.out.println("啊,亲爱的"+country);
}
}
public class AboutStaticKey {
public static void main(String[] args) {
System.out.println(Chinese.country);
//当成员被静态修饰后,除了可以被对象调用之外,还可以被类名调用
Chinese ch = new Chinese();
System.out.println("Chinese country is " + ch.country);
ch.singOurCountry();
}
}

    3、实例变量与类变量的区别

        ①、存储位置

            前者随对象的建立而存在于堆内存中

            后者随着类的加载而存在于方法区中

        ②、生命周期

            前者随着对象的消失而消失

            前者随着类的的消失而消失

        ③、调用方式

            前者可以被对象及类名调用,但建议用类名调用

            后者只能被对象调用

    4、静态的使用注意事项:

        ①、静态的方法只能访问静态成员

        ②、静态方法中不可以使用thissuper关键字

        ③、静态省略的是类名,成员变量省略的是this

        ④、主函数是静态的

        public static void main(String[] args)

          1)public:代表着该函数的权限最大

         2)static:代表主函数岁类的加载而加载就已经存在

         3)void:主函数没有返回值

          4)main:不是关键字,是一个特殊的单词,可以被jvm识别。

        5)String[] args:函数的参数,参数类型是一个数组,该数组中的元素师字符串,字符串类型的数组。

    5、静态的利弊

        ①、利:对对象的共享数据进行单独空间的存储,节省空间,可以被类名直接调用。

        ②、弊:生命周期过长,而且访问有局限性

    6、什么时候使用静态?

        ①、静态变量:如果对象中出现共享数据时,该数据被静态修饰,对象中的特有数据定义在堆内存中

        ②、静态函数:函数是否用静态修饰,就看该函数功能是否需要访问对象中的特有数据,需要,该功能为非静态;不需要,就定义成静态

    7、静态代码块

        ①、格式:

        static

        {

            code

        }

        ②、特点:随类的加载而执行,且只执行一次,并优先于主函数而执行

        ③、作用:给类进行初始化

    8、面试题:

class StaticCode {
StaticCode(){
System.out.println("b");//因为没有创建过与之相关的对象,从而没有被执行过,所以不打印b
}
static//静态代码块给类初始化
{
System.out.println("a");
}
{//构造代码块给对象初始化,其优先级比构造函数高,因为构造函数有针对性,而构造代码块可以初始化所有对象
System.out.println("c");
}
StaticCode(int x){//构造函数给对应的对象初始化
System.out.println("d");
}
public static void show(){
System.out.println("show run");
}
}
class StaticCodeDemo {
public static void main(String[] args) {
new StaticCode(4);
}
}
问打印结果是?为什么?
结果:a c d,

 ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>