Java中的static关键字修饰属性和方法(推荐)

 更新时间:2022年04月14日 14:27:53   作者:俚语h。  
这篇文章主要介绍了Java中的static关键字修饰属性和方法,包括哪些成员属性可以被static修饰,静态属性的访问方法示例详解,需要的朋友可以参考下

static关键字

static关键词与对象无关。
static关键字主要修饰四个部分的内容

这里我们主要介绍static修饰属性和修饰方法。

1.static修饰属性(静态属性)

1.1.哪些成员属性可以被static修饰。

我们把static修饰的属性称为静态属性,又叫类属性。一个类里面的所有实例的这个属性值都相同,我们就可以把这个属性用static修饰,所有实例共享这个属性值。静态属性在程序运行中是保存在方法区中的,而非静态成员属性在创建一个个实例对象时,和这个对象一样存储在堆区。

1.1.1.所有实例的某个属性的值是一样的,就可以使用static关键字修饰

例如:生活在同一个城市的所有人的所在地区属性值是一样的。
那么在定义这个属性时就可以使用static关键字修饰。

public class Person {
    String name;
    int    age;
    String sex;
    //所在地区
    static String country;
}
1.1.2.类中的final常量

使用final修饰的常量的值是不能够被改变的,那么就意味着这个类中,所有实例的这个属性的值是一样的。非静态成员属性每次在创建实例时都会开辟内存,如果将final修饰的常量定义成静态属性,就可以节省每次创建实例后的一点内存。
注意:定义final成员属性时一定要赋初值。

public class Person {
    String name;
    String sex;
    //所在地区
    static String country;
    static final int age=18;

1.2.静态属性的访问。

1.静态属性又称为类属性,对静态属性的访问不需要创建对象,可以直接使用类名称去访问。

public class Person {
    String name;
    int    age;
    String sex;
    //所在地区
    static String country;

    public static void main(String[] args) {
        System.out.println(Person.country);
    }
}

2.如果这个类里面已经创建了实例对象,也可以通过实例对象访问静态属性。(不推荐)

public class Person {
    String name;
    int    age;
    String sex;
    //所在地区
    static String country;

    public static void main(String[] args) {
        Person per1=new Person();
        System.out.println(per1.country);
    }
}

我们就以前面这段代码解释一下代码运行过程中内存中的变化。

思考题:
1.我们可以在方法中定义静态变量吗?
答:不可以。方法中的变量是方法在被调用之后在栈区中存储的,而静态变量存在方法区的,不可能存在一个变量既存储在方法区又存储在栈区。
2.

public class Person {
    String name;
    String sex;
    //所在地区
    static String country;
    static final int age=18;

    public static void main(String[] args) {
        Person per1=new Person();
        per1=null;
        System.out.println(per1.name);
    }
}

上面这串代码在运行时会出现

即:空指针异常,这段代码中,per1引用指向的地址为空。
那么

public class Person {
    String name;
    String sex;
    //所在地区
    static String country;
    static final int age=18;

    public static void main(String[] args) {
        Person per1=new Person();
        per1=null;
        System.out.println(per1.country);
    }
}

这段代码可以运行吗?
答:可以的。因为conutry属性是静态属性。运行这段代码的时候系统会识别到是Person类中的,per1.country就相当于Person.country。所以不会出现空指针异常。

2.static关键字修饰方法

static关键字修饰的方法又叫类方法,工具方法,静态方法。同样的,他也是可以直接使用类名称.方法名称调用。没有对象就可以访问。

1.那些方法可以使用static修饰

1.工具类的方法设置为static方法
例如:
Arrays.sort(int [ ]):传入一个int[ ]就可以使用,不需要创建对象去使用
2.一个程序的主方法
程序的主方法就是程序的入口,如果设置成非静态方法,那么主方法的使用就需要创建对象,而程序都没有入口进入,怎么去创建对象,程序就无法运行。因此程序的主方法要设置成静态方法,直接使用,不需要创建对象。

2.常见的问题

1.静态方法能否访问成员变量和成员方法
答:不能。静态方法的访问是不需要创建对象的,也就是说静态方法使用中是没有对象的,而成员方法和成员变量的使用是需要创建对象的,所以静态方法是无法访问成员变量和成员方法。
2.成员方法能否访问静态属性和静态方法。
答:可以,成员方法的访问前提是有对象,静态方法和静态属性的访问是没有前提条件的。因此成员方法都可以访问,那么静态方法和静态属性是一定可以访问的
3.普通的类能否使用static修饰(不是内部类)。
答:不可以。类定义出来就是产生相应实例对象的,而用static修饰之后这个类没有对象就可以调用了,这个类就没有存在的意义了。在编译过程中程序也会报错。

到此这篇关于Java中的static关键字修饰属性和方法的文章就介绍到这了,更多相关Java static关键字修饰属性和方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于dubbo中Listener的实现方法

    基于dubbo中Listener的实现方法

    下面小编就为大家带来一篇基于dubbo中Listener的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java编程实现获取mp3时长及播放mp3文件的方法

    Java编程实现获取mp3时长及播放mp3文件的方法

    这篇文章主要介绍了Java编程实现获取mp3时长及播放mp3文件的方法,涉及java基于jaudiotagger与jl包对MP3音频文件属性操作及音频播放相关操作技巧,并提供了相关jar包的本站下载,需要的朋友可以参考下
    2018-02-02
  • 关于springboot中nacos动态路由的配置

    关于springboot中nacos动态路由的配置

    这篇文章主要介绍了springboot中nacos动态路由的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java实现无损Word转PDF的示例代码

    Java实现无损Word转PDF的示例代码

    本文将利用Java中的两个jar包:pdfbox和aspose-words实现无损Word转PDF功能,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-06-06
  • SpringBoot整合JdbcTemplate的示例代码

    SpringBoot整合JdbcTemplate的示例代码

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了SpringBoot整合JdbcTemplate,需要的朋友可以参考下
    2022-08-08
  • Java一些常见的出错异常处理方法总结

    Java一些常见的出错异常处理方法总结

    下面小编就为大家带来一篇Java一些常见的出错异常处理方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 深入解读分布式事务Seata的XA模式

    深入解读分布式事务Seata的XA模式

    这篇文章主要介绍了深入解读分布式事务Seata的XA模式,XA 规范 描述了全局的事务管理器与局部的资源管理器之间的接口,XA规范 的目的是允许的多个资源在同一事务中访问,这样可以使 ACID 属性跨越应用程序而保持有效,需要的朋友可以参考下
    2023-08-08
  • ThreadPoolExecutor线程池原理及其execute方法(详解)

    ThreadPoolExecutor线程池原理及其execute方法(详解)

    下面小编就为大家带来一篇ThreadPoolExecutor线程池原理及其execute方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • java.util.Random和concurrent.ThreadLocalRandom使用对比

    java.util.Random和concurrent.ThreadLocalRandom使用对比

    这篇文章主要介绍了java.util.Random和concurrent.ThreadLocalRandom使用对比,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • java获取网络图片上传到OSS的方法

    java获取网络图片上传到OSS的方法

    这篇文章主要为大家详细介绍了java获取网络图片上传到OSS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10

最新评论