概念
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量叫做静态变量
特点:
1.被该类所有对象共享
2.不属于对象,属于类
3.随着类的加载而加载,优先于对象存在
调用方式:
1.类名调用(推荐)
2.对象名调用
静态变量是随着类的加载而加载的,优先于对象出现的,静态存储再堆内存中断静态区里面,是对象共享的
被static修饰的成员方法叫做静态方法
特点:
1.多用在测试类和工具类中
2.JavaBean类中很少会用
调用方法:
1.类名调用(推荐)
2.对象名调用
JavaBean类:
用来描述一类事物的类,比如:Student,Teacher,Dog,Cat等
测试类:
用来检查其他类是否书写正确,带有main方法的类,是程序的入口
工具类:
不是用来描述一类事物的,而是帮我们做一些事情的类(
1.类名见名知意
2.私有化构造方法
3.方法定义为静态
)
工具类ArrayUtil.java
package com.a01staticdemo1;
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;
}
}
测试类TestDemo.java
package com.a01staticdemo1;
public class TestDemo {
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,1.3,4.2,5.2,3.3};
double average = ArrayUtil.getAverage(arr2);
System.out.println(average);
}
}
运行结果
练习
JavaBean类Student.java
package com.a01staticdemo1.a02staticdemo2;
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
工具类StudentUtil.java
package com.a01staticdemo1.a02staticdemo2;
import java.util.ArrayList;
public class StudentUtil {
private StudentUtil(){}
//静态方法
public static int getMaxAgeStudent(ArrayList<Student> list){
//1.定义一个参照物
int max = list.get(0).getAge();
//2.循环遍历集合
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i)元素/学生对象 我们还需要getAge获取到年龄之后再进行比较
int tempage = list.get(i).getAge();
if (tempage>max){
max = tempage;
}
}
return max;
}
}
测试类Test.java
package com.a01staticdemo1.a02staticdemo2;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
//1.创建一个集合用来存储学生对象
ArrayList<Student> list = new ArrayList<Student>();
//2.创建三个学生对象
Student stu1 = new Student("zhangsan", 18, "男");
Student stu2 = new Student("lisi", 19, "男");
Student stu3 = new Student("wangwu", 20, "男");
//3.把学生对象添加到集合当中
list.add(stu1);
list.add(stu2);
list.add(stu3);
//4.调用工具类中的方法
int maxAgeStudent = StudentUtil.getMaxAgeStudent(list);
System.out.println(maxAgeStudent);
}
}
总结
静态方法中,只能访问静态
非静态方法可以访问所有
静态方法中没有this关键字
静态方法不能调用实例变量
重新认识main方法