static关键字

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块

static关键字的主要作用:
方便在没有创建对象的情况下来进行调用(方法/变量)。

调用变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

public class Person {
    String name;
    int age;
    String gender;
    //static 修饰成员变量
    static String country = "CN";
    Person() {
    }
    Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
}

    void speak() {
        System.out.println("国籍:" + country + " 姓名:" + name + " 性别:" + gender
                + " 年龄:" + age + " 哈哈!!!");
}

    public static void main(String[] args) {

            //访问静态成员
            //直接通过类名来调用
            String country=Person.country;
            System.out.println(country);
            //通过对象.成员的形式访问
            Person p1 = new Person("jack", 20, "男");
            p1.country="US";
            p1.speak();
    }
}

调用方法
static方法一般称作静态方法。
静态方法可以使用类名直接调用
1.静态方法中不能访问非静态成员变量,只能访问静态变量。
2.静态方法不可以定义this,super关键字.
3.因为静态优先于对象存在.静态方法中更不可以出现this
4.非静态函数:非静态函数中可以访问静态成员变量

public class Person {
        String name;
        int age;
        String gender;
        static String country = "CN";
        Person() {
        }

        Person(String name, int age, String gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;

        }
        //静态方法
        static void run(){
            //静态方法只能访问静态成员变量。
            System.out.println("国籍:"+country);

            //静态方法访问非静态成员变量,编译报错。
//          System.out.println(" 姓名:" + name);

            //静态方法中不可以出现this,编译报错
//          this.speak();
        }
        public static void main(String[] args) {

            String country=Person.country;
            System.out.println(country);
            //通过对象.成员的形式访问
            Person.run();
    }
}

总结

静态优缺点
优点:对对象的共享数据进行单独空间的存储,节省空间 例如Person 都有
国籍。该数据可以共享可以被类名调
缺点:生命周期过长,访问出现局限性。(静态只能访问静态)

什么时候定义静态变量
静态变量(类变量)当对象中出现共享数据
例如:学生的学校名称。学校名称可以共享对象的数据要定义为非静态的存放在对内存中(学生的姓名,学生的年龄)
什么时候定义静态函数
如果功能内部没有访问到非静态数据(对象的特有数据。那么该功能就可以定义为静态)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值