,,Java中的static--静态变量你了解吗

,,Java中的static--静态变量你了解吗

Java中用static修饰的成员称为静态成员或类成员。它属于整个类,而不是一个对象,即由类的所有对象共享。静态成员可以通过使用类名或对象名直接访问。让我们仔细看看。

目录

简介简介什么时候使用静态变量?小摘要引用访问静态变量小摘要摘要

引言

Static是java语言中的一个关键字,意思是“静态的”。它可以用来修改变量、方法、代码块等。修改后的变量称为静态变量,修改后的方法称为静态方法,修改后的代码块称为静态代码块。

初学者状态

引言

Static是java语言中的一个关键字,意思是“静态的”。它可以用来修改变量、方法、代码块等。修改后的变量称为静态变量,修改后的方法称为静态方法,修改后的代码块称为静态代码块。

初学静电的人最大的疑问是:静电有什么用?你什么时候使用它?先说静电的作用:

static的作用是区分成员变量、方法、内部类和初始化块这四个成员是属于类本身还是属于实例。

本文首先介绍静态变量,后面的将在后面的章节中单独介绍。

静态变量是一种成员变量。如果静态变量存储在方法区,那么在加载类的时候就会初始化,所以在访问静态变量的时候不需要创建实例(对象),直接通过类名就可以访问。

什么时候使用静态变量?

先来看一个代码:

公共类StaticTest01 {

公共静态void main(String[] args) {

中文c1=新中文('张三',' 33333333 ','中国');

system . out . print(' name:' C1 . name ');

System.out.print ('ID号:' C1 . idnum ');

System.out.println('国籍:' C1 . nation ');

中文c2=新中文('李四',' 444444444 ','中国');

system . out . print(' name:' C2 . name ');

System.out.print ('ID号:' C2 . idnum ');

System.out.println('国籍:' C2 . nation ');

}

}

中文课{

//名称;实例变量

字符串名称;

//身份证号;实例变量

字符串idNum

//国籍;实例变量

弦乐民族;

//没有参数构造函数

公共中文(){}

//有一个参数构造函数

公共中文(字符串myName,字符串myIdNum,字符串myNation) {

this.name=myName

this . id num=myid num;

this.nation=myNation

}

}

输出结果:

姓名:张三身份证号码。字体国籍:中国

姓名:李四身份证号码。4444444444国籍:中国

可以看出,这个中文类是从中国人抽象出来的,所以里面的“国籍”实例变量可以声明为静态变量,国籍可以固定为中国人;

访问时,只需要使用中文类访问即可;

代码如下:

公共类StaticTest02 {

公共静态void main(String[] args) {

中文c1=新中文('张三',' 333333333 ');

system . out . print(' name:' C1 . name ');

System.out.print ('ID号:' C1 . idnum ');

//静态变量不需要实例化,只需要被类访问。

System.out.println('国籍:'中国.民族');

中文c2=新中文('李四',' 4444444444 ');

system . out . print(' name:' C2 . name ');

System.out.print ('ID号:' C2 . idnum ');

System.out.println('国籍:'中国.民族');

}

}

中文课{

//名称;实例变量

字符串名称;

//身份证号;实例变量

字符串idNum

//国籍;静态变量

静弦民族='中国';

//没有参数构造函数

公共中文(){}

//有一个参数构造函数

公共中文(字符串myName,字符串myIdNum) {

this.name=myName

this . id num=myid num;

}

}

输出结果:

姓名:张三身份证号码。字体国籍:中国

姓名:李四身份证号码。4444444444国籍:中国

可以看到输出结果都是一样的。这时候应该会有一个问题:既然输出结果都一样,静态变量有什么用?

这就涉及到底层的记忆。简单来说,实例变量存储在堆中,每个实例变量都会占用一定的内存空间。比如像“nationality”这样的实例变量,每声明一个对象也要多占用一个空间,而静态变量存储在方法区,只需要声明一次,所以这个类可以一直使用;

因此,如果该类中所有对象的属性值都相同,不建议将其定义为实例变量,这样会浪费内存空间;

建议将其定义为静态变量,方法区只保留一个副本,节省内存开销。

小总结

对于静态变量,

对象级别的变量不需要静态。

类变量需要静态的。

对象级:一个对象对应一个数据,每个对象可以不同。

类:所有对象对应一个数据,所有对象都一样。

引用访问静态变量

静态变量可以通过引用访问,但实际上在执行的过程中,引用所指向的对象是不涉及的。如果实例变量被空引用访问,程序将出现空指针异常。但是,如果静态变量是通过空引用访问的,程序没有空指针异常,所以通过引用访问的静态变量实际上是由类直接访问的。

测试代码:

公共类StaticTest03 {

公共静态void main(String[] args) {

汉语c=新汉语('张三',' 33333333 ');

System.out.print ('name:' c.name ')。

System.out.print ('ID号:' c . ID num ');

//这里通过引用调用静态变量nation。

System.out.println('国籍:' c . nation ');

//清空引用c。

c=空;

/*

当这两个实例变量的引用C设置为null时,在堆内存中找不到它所指向的实例。

System.out.print ('name:' c.name ')。

System.out.print ('ID号:' c . ID num ');

*/

//而且因为nation是静态变量,所以存储在方法区,还是可以找到的;

System.out.println('国籍:' c . nation ');

}

}

中文课{

//名称;实例变量

字符串名称;

//身份证号;实例变量

字符串idNum

//国籍;静态变量

静弦民族='中国';

//没有参数构造函数

公共中文(){}

//有一个参数构造函数

公共中文(字符串myName,字符串myIdNum) {

this.name=myName

this . id num=myid num;

}

}

小总结

通过代码测试可以知道静态变量是可以通过引用访问的,但是知道就好。不要这样做,因为引用访问时,程序员会认为你在访问实例变量,会给程序员造成混乱;

总结

对于静态变量,我们需要掌握它的用法和特点。记住,只要是和实例相关的,我们都要先创建一个对象,然后通过引用访问它。如果空引用访问与实例相关的成员,必然会出现空指针异常;所有静态相关的都可以通过类名直接访问。虽然静态相关的成员也可以通过引用来访问,但是养成良好的代码习惯是很重要的。

本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: