Java基础-5 static

Java基础-5 static_第1张图片
java-5.jpg

static(静态): 修饰符

static修饰成员变量: 如果一个数据需要被所有对象共享使用的时候,那么即可使用static修饰该成员变量。

    访问方式:
            方式1: 可以使用对象进行访问。  格式:对象.静态属性名

            方式2: 可以使用类名进行访问。  格式: 类名.属性名。
    
    推荐使用:可以使用类名进行访问。
    

静态成员变量要注意的细节:
    1. 静态的成员变量可以使用类名或者是对象进行访问。
    2. 非静态的成员变量只能使用对象进行 访问,不能使用类名直接访问。
    3. 千万不要为了方便访问而使用static修饰一个成员变量,只有这个成员变量的数据是需要被共享的时候
        才使用static修饰。

static修饰成员函数:
    
    静态函数的访问方式:
        
          方式一:使用对象访问。  格式: 对象.函数名()

          方式二:使用类名访问。 格式: 类名.函数名();

    
    静态函数要注意的细节:
        1. 非静态的函数只能使用对象调用,不能使用类名调用。
        2. 静态函数可以直接访问静态的成员,但是不能直接访问非静态的成员。
            原因:静态函数可以使用类名调用,而这时候对象可能还没有存在内存中,这时候非静态的数据也就不存在内存中。

        3. 非静态函数可以直接访问静态以及非静态的成员。
            原因:非静态函数必须要由对象调用,如果对象存在了,静态数据以及非静态数据早就存在内存中了。 

        4. 静态函数不能出现this以及super关键字。
            原因:因为静态函数可以使用类名直接调用,而这时候可能还没有对象存在,this又要代表当前对象。


什么时候使用static修饰一个函数呢?
    如果一个函数没有直接访问非静态的成员,那么即可使用static修饰该函数了。(常用于工具类的方法 Arrays)


非静态的成员变量与静态成员变量的区别:

    数量上的区别: 
        (n份)非静态成员变量是在每个对象中都维护一份数据
        (1份)静态成员变量只会在方法中维护一份数据。

    访问方式上的区别:
        非静态的成员变量只能使用对象进行访问. 
        静态成员变量可以使用对象、类名进行访问。
    
    存储位置上的区别;
        非静态成员变量是存储在堆内存中。
        静态成员变量是存储在方法区中。
        
    生命周期的区别:
        非静态成员变量是随着对象的创建而存在,随着对象的消失而消失。
        静态成员变量是随着类文件的加载而存在,随着类文件(字节码文件)的消失而消失。

    作用上的区别:
        非静态成员变量的作用是用于描述一类事物的属性。
        静态成员变量的作用是提供一个共享数据给所有对象使用的。 

class Student{

 String name ; // 非静态的成员变量

static  String country = "中国";  //静态的成员变量

//静态代码块
static{
    System.out.println("静态代码块的代码执行了..");
}

public Student(String name){
    this.name = name;
}

//静态函数  
public static void sleep(){
    System.out.println( "今晚早睡..");
    
}
//非静态函数
public void study(){
    System.out.println(name+"好好学习,为将来可以成为高富帅做准备!!");
}

}

class Person
{
public static void main(String[] args) {

    Student s1 = new Student(“张三”);
    Student s2 = new Student(“李四”);
    System.out.println("姓名:"+ s1.name);
    System.out.println("姓名:"+ s2.name);
    /*
    System.out.println("国籍:"+ Student.country);
    */
}

}

你可能感兴趣的:(Java基础-5 static)