static表示静态,是Java中的一个修饰符,可以修饰成员方法和成员变量。
1.特点:
1)被该类所有的对象共享。
2)不属于对象,属于类。
3)随着类的加载而加载的,优先于对象出现的。
JDK8以前,静态区在方法区里;JDK8以后,静态区(静态存储位置)在堆内存中。
在静态区里存着这个类所有的静态变量。

2.调用方式:
1)类名调用(推荐)
2)对象名调用
1.特点:
1)多用在测试类和工具类中
Javabean类:用来描述一类事物的类。例如Student,Teacher,Dog,Cat等。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。类名见名知意;私有化构造方法;方法定义为静态。
2)Javabean类中很少会用
2.调用方式:
1)类名调用(推荐)
2)对象名调用
3.练习:
1)练习1:
定义数组工具类
需求:在实际开发中,经常会遇到一些数组使用的工具类。
请按照如下要求编写一个数组的工具类:ArrayUtil
提供一个工具类方法printArr,用于返回整数数组的内容。
返回的字符串格式如:[10, 20, 50, 34, 100](只考虑一维的整数数组)
提供一个工具方法getAverage,用于返回平均分。(只考虑一维的浮点型数组)
定义一个测试类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]).append(",");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum = 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);//[1,2,3,4,5]double[] arr2 = {1.5, 6.8, 3.5, 7.2};double average = ArrayUtil.getAverage(arr2);System.out.println(average);//4.75}
}
2)练习2:
定义学生工具类
需求:定义一个集合,用于存储3个学生对象。
学生类的属性为:name, age, gender
定义一个工具类,用于获取集合中最大学生的年龄
public class Student {private String name;private int age;private String gender;public Student() {}public Student(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}
}
import java.util.ArrayList;public class StudentUtil {private StudentUtil() {}//静态方法public static int getMaxAge(ArrayList list) {//1.定义一个参照物int max = list.get(0).getAge();//2.循环遍历集合for (int i = 0; i < list.size(); i++) {int tempAge = list.get(i).getAge();if (tempAge > max) {max = tempAge;}}return max;}
}
import java.util.ArrayList;public class StudentTest {public static void main(String[] args) {//1.创建一个集合用来存储学生对象ArrayList list = new ArrayList<>();//2.创建3个学生对象Student s1 = new Student("云苓", 23, "女");Student s2 = new Student("黎川", 28, "女");Student s3 = new Student("岑溪", 29, "男");//3.把学生对象添加到集合中list.add(s1);list.add(s2);list.add(s3);//4.调用工具类int maxAge = StudentUtil.getMaxAge(list);System.out.println(maxAge);//29}
}
4.单例设计模式:多线程
1.静态方法只能访问静态变量和静态方法。
2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量(实例变量)和非静态的成员方法。
3.静态方法中没有this关键字(非静态方法的this表示当前方法调用者的地址值,this是由虚拟机赋值的)。
4.静态和共享有关;非静态和对象有关。
1.public:被JVM调用,访问权限足够大。
2.static:被JVM调用,不用创建对象,直接类名访问。因为main方法是静态的,所以测试类中其他方法也需要是静态的。
3.void:被JVM调用,不需要给JVM返回值。
4.main:一个通用的名称,虽然不是关键字,但是被JVM识别。
5.String[] args:以前用于接收键盘录入数据的,现在没用。(Idea Edit Configuration设置参数)