Java中静态的作用是什么

  介绍

本篇文章给大家分享的是有关Java中静态的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>为什么需要静态的?

有时候我们并不想去新的一个对象,只是单纯的想要调用一个函数,并且希望这个函数不会与包含它的类的其他对象有所关联。说得通俗点,即使没有创建对象,也能通过类本身来调用函数。

<强>静态静态变量

被静态修饰的变量属于类变量,通过字面意思就说明了这个变量的归属(类),与之相对的是没有被静态修饰的成员变量,也称为实例变量,说明这个变量是属于某个具体的对象。

public  class  StaticDemo   {   ,private  static  int 小姐:=,50;      ,private  int  j =, 60;      ,public  static  void  main (String [], args), {   ,StaticDemo  StaticDemo =, new  StaticDemo ();   ,StaticDemo  staticDemo1 =, new  StaticDemo ();   ,//即使创建两个对象,也都指向同一存储空间   ,System.out.println (staticDemo.i);   ,System.out.println (staticDemo1.i);   ,//改变值   52=,staticDemo.i ;   ,System.out.println (staticDemo1.i);=,staticDemo.j  65;=,staticDemo1.j  70;   ,System.out.println (staticDemo.j);   ,System.out.println (staticDemo1.j);   ,}      }

输出

50
50
52 65
70

通过上面的实例,我们很快看出他们的区别

<李>

静态变量是属于类的,只有一份存储空间,是类之间共享的,牵一发而动全身,一处变,处处变。

<李>

实例变量属于实例对象,创建几次对象,就有几份的成员变量(拷贝)。

<强>静态修饰的静态函数

说到静态函数,就不得不提Java另一个关键词,指的是当前的引用。意思是调用这个函数的对象,这意味着和静态修饰的函数水火不容。被静态修饰的函数,不能出现这关键字,否则便会报错。

 Java中静态的作用是什么

去掉这个,分别调用我或者j,会发现静态函数调用非静态资源时出的错。这是为什么?从JVM加载机制角度来说,静态资源(被staitc修饰)是类在初始化的时候就加载的,而非静态资源是新的的时候加载的。类的初始化是早于新的加载了说()的函数时,它并不认识j这个成员变量,但对于非静态函数来说,当它加载时,静态资源已经加载完毕,所以它是认识我这个静态资源的。我们总结一下静态修饰函数时的特点

<李>

静态函数不能引用非静态资源;

<李>

非静态函数可以引用静态资源;

<李>

静态函数可以相互调用(只要引入所在包即可);

<李>

静态函数没有,因为它不依附于任何对象。

现在,我们也能知道主函数为什么必须是静态的,因为程序在执行主要函数时候,没有创建任何对象,只是通过类名来访问。

 Java中静态的作用是什么

<强>构造函数是不是静态函数?

《Java编程思想》提到”即使没有显示地使用静态关键字,构造器实际上也是静态方法”。我至今不能确认构造器是不是静态函数,个人更偏向于不是。原因待会再阐述,先看个实例

public  class  StaticTest   {   ,private  static  int 我;      ,private  int  j;      ,public  StaticTest (int 我int  j) {=,this.i 我;   j=, this.j ;   ,say1 ()   ,}         ,public  void  say1 ()   ,{   ,System.out.println(“你age 女儿家,,+,i);   ,System.out.println(“你age 女儿家,,+,j);   ,}      ,public  static  void  main (String [], args)   ,{   ,StaticTest  StaticTest =, new  StaticTest (4、5);   ,StaticTest  staticTest1 =, new  StaticTest (69);   ,System.out.println (staticTest.i);   ,System.out.println (staticTest.j);   ,System.out.println (staticTest1.i);   ,System.out.println (staticTest1.j);      ,}   }

输出

你年龄is4
你年龄is5
你年龄is10
你年龄is69
10
5
69

Java中静态的作用是什么