美文网首页
【五】static 关键字

【五】static 关键字

作者: xxxxxxxxx_ios | 来源:发表于2019-01-04 14:01 被阅读9次

    1. 静态的概述

    当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可是不创建对象,方法又调用不了,这时就会想,那么我们能不能不创建对象,就可以调用方法呢?可以的,我们可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员。

    2. 静态的特点

    A: 被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
    B: 被static修饰的成员可以并且建议通过类名直接访问
    访问静态成员的格式:
    类名.静态成员变量名
    类名.静态成员方法名(参数)
    C: 静态的加载优先于对象,随着类的加载而加载

    • 代码
    package com.itheima_01;
    /*
     * static:是一个关键字,用于修饰成员变量和成员方法
     * static的特点:
     *          被所有的对象所共享
     *          可以使用类名调用
     *          静态的加载优先于对象
     *          随着类的加载而加载
     * 
     */
    public class StaticDemo {
        public static void main(String[] args) {
            Person.graduateFrom = "传智学院";
            
            Person p = new Person();
            p.name = "小苍同学";
            p.age = 18;
            //p.graduateFrom = "传智学院";
            p.speak();
            
            Person p2 = new Person();
            p2.name = "小波同学";
            p2.age = 20;
            //p2.graduateFrom = "传智学院";
            p2.speak();
        }
    }
    
    class Person {
        String name;
        int age;
        static String graduateFrom;//毕业院校
        
        public void speak() {
            System.out.println(name + "---" + graduateFrom);
        }
    }
    

    3.静态的注意事项

    A:静态成员只能直接访问静态成员
    B:非静态成员既可以访问非静态成员也可以访问静态成员

    package com.itheima_01;
    /*
    * static的注意事项:
    *          静态方法:
    *              可以调用静态的成员变量
    *              可以调用静态的成员方法
    *              不可以调用非静态成员变量
    *              不可以调用非静态成员方法
    *              静态方法只能调用静态的成员
    *          非静态方法:
    *              可以调用静态的成员变量
    *              可以调用静态的成员方法
    *              可以调用非静态的成员变量
    *              可以调用非静态的成员方法
    *      
    *  静态的方法中是否有this这个对象?没有的
    *              
    * 
    */
    public class StaticDemo2 {
     public static void main(String[] args) {
         Student.graduateFrom = "传智学院";
         Student.study();
     }
    }
    
    
    class Student {
     String name;
     int age;
     static String graduateFrom;//毕业院校
     
     public static void study() {
         ///System.out.println(graduateFrom);
         //sleep();
         
         //System.out.println(name);
         
         //eat();
         
     }
     
     public static void sleep() {
         System.out.println("sleep");
         
     }
     
     public void eat() {
         System.out.println("eat");
         
         System.out.println(graduateFrom);
         sleep();
         
         
     }
     
    }
    

    4.静态的优缺点

    A:静态优点:
    对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
    可以直接被类名调用,不用在堆内存创建对象
    静态成员可以通过类名直接访问,相对创建对象访问成员方便
    B:静态弊端:
    访问出现局限性。(静态虽好,但只能访问静态)

    相关文章

      网友评论

          本文标题:【五】static 关键字

          本文链接:https://www.haomeiwen.com/subject/bewhrqtx.html