一、静态变量
在之前我们学习了变量可以分为局部变量(方法中定义的)和成员变量(成员变量是在类中定义的),其中成员变量又可以细分为两种:静态变量和实例变量。
静态变量是使用static 修饰的成员变量(属性)就是静态变量,静态变量保存在一块共享空间(方法区),这个区叫做全局数据区,保存在这个区的数据是共享的。,到目前为止我们见过了哪些内存空间啊?堆、栈、方法区(保存static修饰的变量或者方法信息)
DEMO:观察代码
package com. bai . demo;
public class Student {
//为 了我们方便操作数据暂时不定义为私有属性(严格来说是要定义为私有属性的)
String name;
int age ;
String school;
}
package com. bai . demo;
public class Hello {
public static void main(String[] args) {
//创建第一个学生对象
Student s1=new Student();
s1. name="李四";
s1. age=19;
s1. school="南京大学";
//创建第二个学生对象.
Student s2=new Student();
s2. name="张三";
s2. age=20;
s2.school1="南京大学";
//创建第三个学生对象
Student s3=new Student( );
s3. name="赵柳" ;
s3.age=17;
s3. school="南京大学";
System. out. println("第- -个学生信息:名字---》 "+s1.name+" ,年龄---》"+s1.age+"学
校----》"+s1. school);
System. out . println("第二个学生信息:名字---》"+s2.name+", 年龄---》"+s2.age+"学
校----》"+s2. school);
System. out . println("第三个学生信息:名字---》"+s3. name+",年龄---》"+s2. age+"学
校----》"+s3. school);
}
}
思考:假如有一千个学生对象,但是所有学生的学校信息都是一样的,此时如果要将所有学生的学校信息进行修改,则要在每个对象中修改,要修改1000次。这样的就增大了工作量,不方便代码的维护,此时最好的做法是将学校信息声明为静态变量,之后静态变量是每个对象共享的,只需要在一个地方进行修改其他对象也会共享到修改的数据。
DEMO:声明为静态变量
package com. bai . demo;
public class Student {
//为了我们方便操作数据暂时不定义为私有属性(严格来说是要定义为私有属性的)
String name ;
int age ;
static String school;
}
package com. bai. demo;
public class Hello {
public static void main(String[] args) {
//创建第-一个学生对象
Student s1=new Student();
s1. name="李四";
s1.age=19;
s1. school="北京大学";
//创建第二个学生对象
Student s2=new Student();
s2. name="张三";
s2. age=20;
//创建第三个学生对象
Student s3=new Student();
s3. name="赵柳" ;
s3. age=17 ;
System. out. println("第- -一个学生信息:名字---》"+s1. name+",年龄---》"+s1. age+"学
校----》"+s1. school);
System. out . println("第二个学生信息:名字--》"+s2.name+" ,年龄---》"+s2.age+"学
校----》"+s2. school);
System. out. println("第三个学生信息:名字---》 "+s3.name+", 年龄---》"+s2.age+"学
校----》"+s3.school);
此时只需要修改一个对象的学校信息就可以影响到其他使用Student类创建学生对象的学校信息。说明了静态变量是每个使用该类创建的实例对象共享的变量。
DEMO:观察代码
发现了静态属性(静态变量)可以使用“类名.属性名”的方式引用(所以还被叫做类变量),还可以使用“对象名.属性名”的方式引用,但是普通的属性(实例变量)不能使用“类名属性名”的方式引用。
静态变量没有实例化对象(创建对象)也可以访问,所以我们把静态变又叫做类变量,非静态属性需要实例化对象之后才能访问,所以他叫做实例变量。
DEMO:记住
package com. bai . demo;
public class Student {
//为了我们方便操作数据暂时不定义为私有属性(严格来说是要定义为私有属性的)
String name;//实例变量 需 要先创建对象之后才能通过“对象名.属性名”方式访问
int age; //实例变量 需要先创建对象之后才能通过“对象名.属性名”方式访问
static String school;//静态变量,属于类的,使用该类创建的对象共享,可以使用“类名.
属性名”的方式访问
}
总结:
1、静态变量的概念:使用static 修饰的变量就是静态变量,静态变量保存在,方法区(全局数据区)
2、静态变量可以使用“类名.属性名”和“对象名.属性名”的方式访问,所以静态变量又叫做类变量
3、非静态变量只能使用“对象名.属性名”的方式访问,依赖于对象(实例)存在,所以叫做实例变量。
更多往期视频可以到我哔哩哔哩上观看:码邦主2020年最新的Java视频教程
学习不要走马观花的学,每个知识重点大纲,就是学习路线都是根据每一天市场上多数公司用到的新技术整理,在学习的时候还需要结合练习题来做,这里的话我也将我之前在学习过程中用到的一些学习资料整理成了文档,以及我自身之前的一个面试文案和知识点补充,有需要的朋友可以加我的QQ群 697888503 ,这里也希望大家最终都能够学有所成,学习编程不是一天两天的功夫,勤能补拙才是硬道理,祝大家最终都能成为一名合适开发攻城狮。