Java中static与instance的区别及作用详解

 更新时间:2023年07月04日 10:06:11   作者:LTLXX  
这篇文章主要为大家介绍了Java中static与instance的区别及作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1.概念:

java中有个关键字叫static,翻译为静态,用来修饰属性和方法。它所修饰的属性叫静态属性或类变量,修饰的方法叫静态方法或者类方法。而没有使用static修饰的属性和方法就叫实例变量和方法,即instance翻译为实例的意思。

2.static与instance的作用:

static实现了在同一个类的对象中共享数据。即同一个类中的不同对象都需要用到的属性,就像一个班级类,它的每个学生对象都会用到班级名称,是他们所共有的,每一个学生对象都共享这个班级名称,就需要使用static来修饰。

而instance则是每个学生对象自己所独有的属性,例如每个学生对象都有自己的名字、身高、年龄等属性就是instance修饰,但只有static才需要特别写出来,instance就不用写出来。

3.static修饰属性和方法:

1.static修饰属性(静态变量):

   static String className;

2.static修饰方法(静态方法):

   public static void getScore(){
    }

4.instance属性和方法:

1.实例属性:

   String name;

2.实例方法:

   public void getScore(){
    }

5.static与instance的区别:

1.加载时间不同:

  • 静态属性和方法是在首次出现类名时,为类的静态属性和方法分配内存。
  • 实例属性和方法是类new对象的时候,为类的实例属性和方法分配内存。

2.份数不同:

  • 静态属性和方法只有一份多个对象享用,而实例属性和方法是有多少个对象就有多少份。

3.初始化方法不同:

静态变量是除了通过定义时手动确定外还可以通过static块(静态块)来初始化。

例如:

 static int age=0;    //定义时手动初始化。
//静态块,为static变量初始化,静态块在首次类名出现时调用,但后于分配静态变量。
 static{
        age = 20;
    }

静态块:

类名首次出现时,先为静态变量分配内存,然后调用静态块,静态块可以为静态变量初始化。静态块只在类名首次出现时调用一次,以后再也不调用了。

  • 动态变量则是除了定义时手动赋值外还通过构造方法赋值(一般用构造方法初始化)

例如:

    String name= "张三";    //定义时手动初始化。
    Test(String name){       //带一个参数的构造方法。
        this.name=name;
    }
    public static void main(String[] args) {
        Test t1=new Test("张三");     //通过构造方法初始化。
    }

4.内存存放地址不同:

  • 静态变量被分配在方法区中,常驻内存,永不回收。
  • 实例变量被分配在堆中,用完回收。

5.调用方法不同:

  • 静态方法只可以调静态方法和变量不可以调用实例方法和变量。
  • 实例方法既可以调用实例变量和方法还可以调用静态变量和方法。
    原因:静态方法是在首次出现类名时分配内存调用的此时并不知道有没有实例变量和方法。

案例分析:

public class Test {
    static int age;
    public static void main(String[] args) {
        age = 2;   //此方法正确,都是静态的,类名首次出现就分内存
    }
}
public class Test {
    public static void main(String[] args) {
    }
    public void sayHello(){
    }
    public static void sayHi(){   //报错,不知道sayHello()有没有
        sayHello();
    }
}
public class Test {
    int age;
    public static void main(String[] args) {   //报错,不知道age属性有没有。
        age = 2;
    }
}
public class Test {
    int age;
    public static void main(String[] args) {   //正确,创建对象new Test()调用属性age表明已存在age属性就能调用
        new Test().age = 2;
    }
}

以上就是Java中static与instance的区别及作用详解的详细内容,更多关于Java static instance区别的资料请关注脚本之家其它相关文章!

相关文章

  • 解决SpringBoot webSocket 资源无法加载、tomcat启动报错的问题

    解决SpringBoot webSocket 资源无法加载、tomcat启动报错的问题

    这篇文章主要介绍了解决SpringBoot webSocket 资源无法加载、tomcat启动报错的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 用Java实现连连看小游戏

    用Java实现连连看小游戏

    这篇文章主要为大家详细介绍了用Java实现连连看小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决

    SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决

    本文主要介绍了SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • JAVA JSP页面技术之EL表达式整理归纳总结

    JAVA JSP页面技术之EL表达式整理归纳总结

    这篇文章主要介绍了java中JSP页面技术之EL表达式概念作用以及语法等的使用,需要的朋友可以参考
    2017-04-04
  • 基于OpenID Connect及Token Relay实现Spring Cloud Gateway

    基于OpenID Connect及Token Relay实现Spring Cloud Gateway

    这篇文章主要介绍了基于OpenID Connect及Token Relay实现Spring Cloud Gateway,Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为API提供跨领域的关注点,如:安全性、监控/指标和弹性
    2022-06-06
  • 微信小程序中的openid的作用详解

    微信小程序中的openid的作用详解

    微信小程序作为连接用户与服务的重要桥梁,在提升用户体验方面发挥着重要作用,本文章将详细探讨openid在微信小程序中的作用及其重要性,帮助开发者更好地理解和利用这一功能,优化应用体验并增强安全性,感兴趣的朋友一起看看吧
    2025-04-04
  • SpringBoot实战教程之新手入门篇

    SpringBoot实战教程之新手入门篇

    Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以"即时运行"的应用和服务,下面这篇文章主要给大家介绍了关于SpringBoot实战教程之入门篇的相关资料,需要的朋友可以参考下
    2022-03-03
  • JAVAsynchronized原理详解

    JAVAsynchronized原理详解

    这篇文章主要介绍了Java中synchronized实现原理详解,涉及synchronized实现同步的基础,Java对象头,Monitor,Mark Word,锁优化,自旋锁等相关内容,具有一定借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 一文带你了解SpringBoot中常用注解的原理和使用

    一文带你了解SpringBoot中常用注解的原理和使用

    这篇文章主要介绍了一文带你了解SpringBoot中常用注解的原理和使用
    2022-11-11
  • IDEA 2020.2 部署JSF项目的详细过程

    IDEA 2020.2 部署JSF项目的详细过程

    本文通过图文并茂的形式教大家如何在IDEA中创建一个JSF项目及遇到问题的解决方法,感兴趣的朋友跟随小编一起看看吧
    2021-09-09

最新评论