一、static概述
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。
二、静态变量
特点:
1.被该类所有对象共享
2.不属于对象,属于类
3.随着类的加载而加载,优先于对象存在
调用方式:
1.类名调用(推荐)
2.对象名调用
例:
public class Student{
private String name; //学生姓名
private int age; //学生年龄
private String gender; //学生性别
private static String teacherName; /*学生老师姓名,一个班学生的老师姓名一样所以共用一个姓名,故用static修饰,被该类所有对象共享*/
}
//小技巧: 构造方法在这里省略,若要自己实验可以在IDEA中 alt+insert 选择第一个全部不选构造无参构造方法点击确定,再alt+inset选择第一个ctrl+a全选后选择确定,再alt+inset选择geter and seter 全选构造
public void show(){
System.out.println(name+","+age+","+gender+","+teacherName)
}
public static void main(String[] args){
Student.teacherName="不吃糖老师";//类名调用
Student s1=new Student();
s1.setName("不吃糖");
s1.setAge(18);
s1.setGender("男");
/*s1.teacherName="不吃糖老师"; 对象名调用,若上面已进行类名调用就不需要对象名调用,静态变量赋值一次即可,为举例写出来后注释掉*/
s1.show();
Student s2=new Student();
s2.setName("不加糖");
s2.setAge(18);
s2.setGender("女");
/*s2.teacherName="不吃糖老师"; 上面调用过一次就无需再调用,为方便理解写出来后注释掉*/
s2.show()
}
上例中teacherName被该类所有对象共享,仅需赋值一次,类名调用和对象名调用效果相同,若用对象名调用s1赋值后s2不需要再次赋值。(推荐使用类名调用)
上述代码输出结果为:
不吃糖,18,男,不吃糖老师
不加糖,18,女,不吃糖老师
结果分析:上述对于teacherName仅赋值一次,s1和s2的teacherName均为不吃糖老师
再次声明:静态变量不属于对象,属于类且随着类的加载而加载,优先于对象存在
三、静态方法
特点:
1.多用在测试类和工具类中
2.Javabean类中很少会用
/*知识点补充
Javabean类:用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类
*/
/* 工具类:帮助我们做一些事情的,但不描述任何事物的类
特点: 1.类名见名知意(若是用来操作数组可起名ArrUtil Arr:数组 Util:工具)
2.私有化构造方法(私有化后不可创建其对象,原因:工具类不是用来描述一类事物的,创建其的对象没有意义)
3.方法定义为静态(方便调用) */
调用方式:
1.类名调用(推荐)
2.对象名调用
例:
public class StudentUtil{ //类名见名知意
private StudentUtil(){} //成员私有
//static:静态,方便调用
public static int getMaxAgeStudent(ArrayList<Student> list){
....
}
}
//创建了一个工具类
//调用工具类中的方法 工具类名.方法名
int maxAgeStudent=StudentUtil.getMaxAgeStudent(list);
System.out.println(maxAgeStudent);
四、static注意事项
1.静态方法只能访问静态变量和静态方法
2.非静态方法可以访问静态变量或静态方法,也可以访问非静态的成员变量和非静态的成员方法
3.静态方法中是没有this关键字
求关注求点赞求收藏