static关键字

static关键字

一.static修饰的成员变量

static修饰的成员变量被称为静态变量,又被称为类变量,它不再隶属于对象层级而是隶属于类层级。静态变量的使用类名.变量名调用。如下所示:

package com.pyi.blog;

public class Static1 {
    private String name;
    private int age;
    String nationality;
    public Static1(String name ,int age,String nationality){
        this.name=name;
        this.age=age;
        this.nationality=nationality;
    }
    public Static1(){
        
    }
    public void setName(String Name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
}
package com.pyi.blog;

public class StaticTest {
    public static void main(String[] args) {
        Static1 s1=new Static1("小明",10,"中国");
        Static1 s2=new Static1("小红",11,"中国");

    }
}

从上面的代码可以看出s1,s2两个对象有一个共有的属性国籍。在创建这里两个对象是会在堆中分别为它们的国籍分配内存储存,此时它们的国籍的成员变量是隶属于对象层级的,是两个对象所独立拥有的,内存图如下:

在这里插入图片描述

从上面这段代码可以看出在堆中分别为两个对象的国籍成员变量分配了内存储存,这样会造成内存的浪费。因此可以将private String nationality;改为private static String nationality;,此时内存图如下:

在这里插入图片描述

此时国籍不再为两个对象独有一份的,而变为了两个对象所共享的一份。

调用静态变量使用类名.变量名:

package com.pyi.blog;

public class Static1 {
    private String name;
    private int age;
    static String nationality="中国";
    public Static1(String name ,int age){
        this.name=name;
        this.age=age;
    }
    public Static1(){
        
    }
    public void setName(String Name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
}
package com.pyi.blog;

public class StaticTest {
    public static void main(String[] args) {
        System.out.println(Static1.nationality);
    }
}

在这里插入图片描述

此时没有创建对象也可调用国籍成员变量。

若s1改变国籍,则s2也会收到影响:

二.static修饰的成员方法

用static修饰的成员方法被称为静态方法,又被称为类方法,同静态变量一样,它隶属于类层级。用类名.方法名调用。示例如下:

package com.pyi.blog;

public class Static1 {
    private String name;
    private int age;
    static String nationality="中国";
    public Static1(String name ,int age){
        this.name=name;
        this.age=age;
    }
    public Static1(){
        
    }
    public void setName(String Name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    public static void print(){
        System.out.println("静态方法被调用");
    }
}
package com.pyi.blog;

public class StaticTest {
    public static void main(String[] args) {
        Static1.print();
    }
}

在这里插入图片描述

静态方法在类加载的时候被执行。

三.static修饰的代码块

static 修饰的代码块被称为静态代码块。它在第一次类加载的时候被执行。示例如下:

package com.pyi.blog;

public class Static1 {
    private String name;
    private int age;
    static String nationality="中国";
    public Static1(String name ,int age){
        this.name=name;
        this.age=age;
    }
    public Static1(){
        
    }
    public void setName(String Name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
   static {
        System.out.println("静态方法被调用");
    }
}
package com.pyi.blog;

public class StaticTest {
    public static void main(String[] args) {
       Static1 s1=new Static1();
    }
}

在这里插入图片描述

四.静态导包

静态导包可将类中的所有类方法直接导入。此时不需要使用类名,直接使用方法名即可调用该静态方法。示例如下:

package com.pyi.blog;

public class Static1 {
    private String name;
    private int age;
    static String nationality="中国";
    public Static1(String name ,int age){
        this.name=name;
        this.age=age;
    }
    public Static1(){

    }
    public void setName(String Name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
   public static void print(){
        System.out.println("静态方法被调用");
    }
}
package com.pyi.blog;
import static com.pyi.blog.Static1.*;

public class StaticTest {
    public static void main(String[] args) {
      print();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值