static关键字的用途:在没有创建对象的情况下调用方法或变量。
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以:①用来修饰类的成员方法;②类的成员变量;③也编写static代码块来优化程序性能。
1、静态变量
被static修饰的成员变量,叫做静态变量。
特点:
被该类所有对象共享。
不属于某个对象,属于类。
随着类的加载而加载,优先于对象存在。
调用:
类名.(推荐)
对象名.
Student类中:
属性:学生姓名、年龄、性别、老师姓名
方法:study()、show()
test类中:
public class test {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("张三");
s1.setAge(20);
s1.setGender("男");
s1.teachername = "王五";
// 也可以:Student.teachername = "王五";
s1.study();
s1.show();
Student s2 = new Student();
s2.setName("李四");
s2.setAge(20);
s2.setGender("男");
s2.study();
s2.show();
}
}
静态变量随着类的加载而加载,优先于对象存在。
类一加载到内存,静态变量就存入堆中的静态区。
静态变量不独属于某个对象,它是所有对象共享的,只有一份。
对于共享的属性,可以定义为静态。
2、静态方法
被static修饰的成员方法,叫静态方法。
特点:
多用于测试类和工具类中,Javabean类中很少用。
在静态方法中:只能访问静态变量和方法。
但是在非静态成员方法中:可以访问静态成员方法和静态成员变量。
静态方法中没有this关键字。
调用:
类名.(推荐)
对象名.
三种类:
Javabean类:用来描述一类事物的类。如tudent, Teacher, Dog, Cat等
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。
工具类:私有化构造方法(构造方法一旦私有,外界不能创建它的对象)。
练习1:
请按照如下要求编写一个数组的工具类:ArrayUtil
● 提供一个工具类方法printArr,用于返回整数数组的内容。
返回的字符串格式如:[10,20,50,34,100] (只考虑整数数组,且只考虑一维数组)
● 提供一个工具方法getAerage,用于返回平均分 (只考虑浮点型数组,且只考虑一维数组)
● 定义一个测试类test,调用该工具类的工具方法,并返回结果。
工具类:
public class ArrayUtil {
// 私有化构造方法
private ArrayUtil(){}
// 其他工具方法:定义为静态,方便调用
// 打印数组
public static String printArr(int[] arr)
{
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1)
{
sb.append(arr[i]);
}
else
{
sb.append(arr[i]+",");
}
}
sb.append("]");
return sb.toString();
}
// 计算数组平均值
public static double ageAverage(double[] arr)
{
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum/arr.length;
}
}
测试类:
public class test
{
public static void main(String[] args) {
// 测试工具类的两个方法
// 打印数组
int[] arr1 = {1,2,3,4,5};
String str = ArrayUtil.printArr(arr1);
System.out.println(str);
// 获取数组平均值
double[] arr2 = {1.5,3.7,4.9,5.8,6.6};
double avg = ArrayUtil.ageAverage(arr2);
System.out.println(avg);
}
}