首页编程java编程什么叫静态数据 java,java中static作用详解

什么叫静态数据 java,java中static作用详解

编程之家2023-10-1389次浏览

大家好,关于什么叫静态数据 java很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java中static作用详解的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

什么叫静态数据 java,java中static作用详解

什么叫做静态数据成员,它有何种特点

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static成员的最常见的例子是main()。因为在程序开始执行时必须调用main(),所以它被声明为static。声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。

声明为static的方法有以下几条限制:

·它们仅能调用其他的static方法。

什么叫静态数据 java,java中static作用详解

·它们只能访问static数据。

·它们不能以任何方式引用this或super(关键字super与继承有关,在下一章中描述)。

如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次。

什么叫静态数据 java,java中static作用详解

下面的例子显示的类有一个static方法,一些static变量,以及一个static初始化块:

class UseStatic{

static int a= 3;

static int b;

static void meth(int x){

System.out.println("x="+ x);

System.out.println("a="+ a);

System.out.println("b="+ b);

}

static{

System.out.println("Static block initialized.");

b= a* 4;

}

public static void main(String args[]){

meth(42);

}

}

一旦UseStatic类被装载,所有的static语句被运行。首先,a被设置为3,接着static块执行(打印一条消息),最后,b被初始化为a*4或12。然后调用main(),main()调用meth(),把值42传递给x。3个println()语句引用两个static变量a和b,以及局部变量x。

注意:在一个static方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized.

x= 42

a= 3

b= 12

在定义它们的类的外面,static方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method()

这里,classname是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一static变量可以以同样的格式来访问——类名加点号运算符。这就是Java如何实现全局功能和全局变量的一个控制版本。

下面是一个例子。在main()中,static方法callme()和static变量b在它们的类之外被访问。

class StaticDemo{

static int a= 42;

static int b= 99;

static void callme(){

System.out.println("a="+ a);

}

}

class StaticByName{

public static void main(String args[]){

StaticDemo.callme();

System.out.println("b="+ StaticDemo.b);

}

}

下面是该程序的输出:

a= 42

b= 99

static成员是不能被其所在class创建的实例访问的。

如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的

java中static作用详解

有要详解,那我找资料给你吧

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:

类名.静态方法名(参数列表...)

类名.静态变量名

用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。

1、static变量

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。

两者的区别是:

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

所以一般在需要实现以下两个功能时使用静态变量:

在对象之间共享值时

方便访问变量时

2、静态方法

静态方法可以直接通过类名调用,任何的实例也都可以调用,

因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!

因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

例如为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。

静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的

3、static代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:

public class Test5{

private static int a;

private int b;

static{

Test5.a=3;

System.out.println(a);

Test5 t=new Test5();

t.f();

t.b=1000;

System.out.println(t.b);

}

static{

Test5.a=4;

System.out.println(a);

}

public static void main(String[] args){

// TODO自动生成方法存根

}

static{

Test5.a=5;

System.out.println(a);

}

public void f(){

System.out.println("hhahhahah");

}

}

运行结果:

3

hhahhahah

1000

4

5

利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。

4、static和final一块用表示什么

static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!

对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

对于方法,表示不可覆盖,并且可以通过类名直接访问。

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static成员的最常见的例子是main()。因为在程序开始执行时必须调用main(),所以它被声明为static。

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:

它们仅能调用其他的static方法。

它们只能访问static数据。

它们不能以任何方式引用this或super(关键字super与继承有关,在下一章中描述)。

如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static初始化块:

// Demonstrate static variables,methods,and blocks.

class UseStatic{

static int a= 3;

static int b;

static void meth(int x){

System.out.println("x="+ x);

System.out.println("a="+ a);

System.out.println("b="+ b);

}

static{

System.out.println("Static block initialized.");

b= a* 4;

}

public static void main(String args[]){

meth(42);

}

}

一旦UseStatic类被装载,所有的static语句被运行。首先,a被设置为3,接着static块执行(打印一条消息),最后,b被初始化为a*4或12。然后调用main(),main()调用meth(),把值42传递给x。3个println()语句引用两个static变量a和b,以及局部变量x。

注意:在一个static方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized.

x= 42

a= 3

b= 12

在定义它们的类的外面,static方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method()

这里,classname是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java如何实现全局功能和全局变量的一个控制版本。

下面是一个例子。在main()中,static方法callme()和static变量b在它们的类之外被访问。

class StaticDemo{

static int a= 42;

static int b= 99;

static void callme(){

System.out.println("a="+ a);

}

}

class StaticByName{

public static void main(String args[]){

StaticDemo.callme();

System.out.println("b="+ StaticDemo.b);

}

}

下面是该程序的输出:

a= 42

b= 99

static成员是不能被其所在class创建的实例访问的。

如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的

什么叫做静态数据成员

问题一:c++中什么是静态数据成员什么是静态成员函数分别有什么作用?***我主要说的关键是“静态成员是属于类的”,而不属于任何对象所有***

在此对一些内容作详细的解释,其中小部分与楼上有点相同,但我说的关键处,与它不同,并修改一些说法。

首先,我在这里把楼主的“静态成员”和“静态方法”,分别对应下面的“静态数据成员”和“静态成员函数”。并把他们都成为静态成员。(它们实际是同一个概念的不同说法。)

“静态成员是属于类的,由该类的全体对象共享”------就是对是这样的

“无论你建立了多少个该类的对象,静态成员在内存上只有一个”------我要说的是,无论你建多少个该类的对象,所有成员函数在内存上也只有一个

为什么说静态成员是属于类的呢??

因为,

我们假设 class A};并定义对象 A abc;

一般的引用类的成员的方法是通过对象去引用:abc.i; abc.display;。

但可以通过类 A::i来引用i,通过A::display()来引用display().《这里是要特别要注意的!!!》

而普通成员就不行,

虽然不管是静态成员还是普通成员,在内存里只有一个副本。但从这个角度去看,静态成员是属于类的。

对于静态成员函数,我们也许还分不清楚这个问题,但是,

特别是对于静态数据成员,我们就很容易理解了。

如果不定义为静态数据成员,那么每个对象都分别有一个i的副本(拷贝)。但定义为静态数据成员之后,所有的对象共享有一个i的副本,就是说i在内存里就一个副本。

那么,不同对象引用i,对i的改变的话,其他对象中i的值也会被改变,而且所有对象的值都是相同的。

在引用静态数据成员时,可以不通过对象而通过类,静态数据成员在内存只有一个,而且可以通过类来引用。这是静态数据成员属于类,很明显的。

这是实现不同对象间数据共享的一种方法。

静态成员函数,与静态数据成员类似。就不说,需要注意的是,它在内存里始终只有一个副本(普通成员函数也一样)。

关于静态成员的生命周期,在此就不多说了。

问题二:静态数据成员有哪些特点 C++提供了静态成员,用以解决同一个类的不同对象之间数据成员和函数的共享问题。静态成员的特点是:不管这个类创建多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象所共享。面对对象方法中还有类属性的概念,类属性是描述类的所有对象的共同特征的一个数据项,对于任何对象实例,它的属性值是相同的,C++通过静态数据成员来实现类属性。

问题三:静态数据成员和静态函数成员是什么?分别干嘛的?有没有动态数据成员和动态函数成员这个静态对应的不是动态,没有对应的词,普通的就叫“数据成员”和“函数成员”

静态的意思是跟这个类的对象实例没关系,是类范围的,一个类可以生成多个对象,但只有一份静态数据成员。

普通函数成员会隐式传递一个this指针,指向调用这个函数的对象;而静态函数成员不包括这个指针,所以在静态成员函数内不能使用非静态的数据成员和函数。

问题四:什么是静态数据成员静态函数成员静态数据成员:就是说在这个类中是固定的,只有一个。比如说中国人是一个类,那么这个中国人的总人口数就是一个静态数据成员,这个静态数据成员不会跟随某个具体的人,而是正对于这个类的。

静态成员函数,一般这些函数都是用来对这个类进行操作的。例如,你要修改一个静态成员数据,那么需要静态成员函数。

你可以这么想:静态时,大体的一个类;动态时,具体的一个类中的对象

问题五:静态成员的基本介绍在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。例如: class test{public:test(){}~test(){}public:静态成员函数static int getCount(){return m_nCount;}private:静态数据成员static int m_nCount;};int test::m_nCount=0;

问题六:一个类的静态数据成员所表示的属性是什么表示该变量归此类所有对象共享啊。例如

class Student

{

public:

static int num;

}

Student::num=0;

num鸡所有student类共享,不属于某一个特定对象

问题七:类中静态数据成员问题静态成员需要在外部再写一行定义:

int tmpclass::a=0;

不写初始化也可以,会自动初始化为零

int tmpclass::a;

问题八:静态数据成员的定义和初始化方法是什么静态数据成员定义格式:

static类型标示符(比如 int、double)静态数据成员名;

比如 static int a;

初始化格式:

类型标示符类名::静态数据成员名=初始值;

常用的是在类外定义,类内声明。

谢谢采纳...

问题九:什么是静态成员?其特点是什么?如何声明和实现在c#类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。例如:

public class test

{

public:

test(){}

~test(){}

public:

静态成员函数

static int getCount(){

return m_nCount;

}

private:

静态数据成员

static int m_nCount;

};

静态数据成员和普通数据成员区别较大,体现在下面几点:

(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。

(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显示的初始化,一定要在类外进行,例如上例。

(3)外部访问类的静态成员只能通过类名来访问,例如:test::getCount()。

(4)类的静态成员函数无法直接访问普通数据成员(可以通过类的指针等作为参数间接访问),而类的任何成员函数都可以访问类的静态数据成员。

(5)静态成员和类的普通成员一样,也具有public、protected、private3种访问级别,也可以具有返回值、const修饰符等参数。

问题十:java中成员变量和静态变量的区别是什么 JAVA成员变量和静态变量的区别:

1,成员变量所属于对象。所以也称为实例变量。

静态变量所属于类。所以也称为类变量。

2,成员变量存在于堆内存中。

静态变量存在于方法区中。

3,成员变量随着对象创建而存在。随着对象被回收而消失。

静态变量随着类的加载而存在。随着类的消失而消失。

4,成员变量只能被对象所调用。

静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

关于什么叫静态数据 java,java中static作用详解的介绍到此结束,希望对大家有所帮助。

java 异常什么意思?常见的java异常有哪些都是什么意思世界时区图(世界时区图高清)