1.静态 static
- 概念:是Java中的一个修饰符
- 作用:可以修饰java的类,属性,方法,包
- 范围:修饰类,只能修饰内部类;
2.静态变量
- 概念:静态变量是被static修饰的成员变量,
- 特点:静态变量是随着类的加载而加载的,优先于对象出现;被该类的所有对象共享
- 调用方式:
public class Student {
// 静态变量
public static int age = 15;
public static void main(String[] args) {
//创建对象
Student s1 = new Student(); //类型 对象名称 = new 构造函数()
//调用方法一:通过对象调用
System.out.println(s1.age);
//调用方法二:直接通过类名调用
System.out.println(Student.age);
}
}
3.静态代码块
-
概念:JVM在加载类时会执行static代码块,如果有多个static代码块,JVM会按照顺序执行
-
作用:经常被用来初始化静态变量
-
注意事项:静态代码块只会执行一次
-
示例代码如下:
package cn.sxau.静态;
public class 静态代码块demo1 {
private static int a;
static{
静态代码块demo1.a=4;
System.out.println(a);
System.out.println("static block is called");
}
public static void main(String[] args) {
}
}
4.static修饰的类
- 被static修饰的类都是静态内部类,静态内部类只能访问外部的静态成员和静态方法
-
public class Outer { static int n=5; //静态变量(共享) static class Inner{ // 静态内部类,类名和外部类不能相同 void accessAttrFromOuter(){ System.out.println("Inner:Outer.n="+n); //访问外部类的静态变量 } } public static void main(String[] args) { Outer.Inner nest = new Outer.Inner(); nest.accessAttrFromOuter(); } }
5.静态方法
- 概念:被static修饰的成员方法,叫做静态方法
- 调用方式:方式一:类名调用;方式二:对象名调用
- 特点:多用在测试类和工具类中
- 代码示例
//工具类
package cn.sxau.静态.工具类;
public class ArrayUtil {
private ArrayUtil(){
//私有化构造方法,为了防止外界创建他的对象
}
//定义静态方法方便调用
//1.方法一:返回整型数组的内容,以字符串格式输出
public static String printArr(int [] arr){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("[");
for (int i = 0; i <arr.length; i++) {
if(i == arr.length-1){
stringBuilder.append(arr[i]);
}else{
stringBuilder.append(arr[i]).append(",");
}
}
stringBuilder.append("]");
return stringBuilder.toString();
}
//2.方法二:返回平均值,只考虑浮点型
public static double avgDouble(double [] arr){
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum +arr[i];
}
return sum/arr.length;
}
}
//测试类
package cn.sxau.静态;
import cn.sxau.静态.工具类.ArrayUtil;
public class TestDemo {
public static void main(String[] args) {
//测试数据
int [] arr1 = {1,2,3,4,5};
System.out.println(ArrayUtil.printArr(arr1));
double [] arr2 = {12.0,15.2,36.2};
System.out.println(ArrayUtil.avgDouble(arr2));
}
}
6.static的注意事项
-
静态方法只能访问静态变量和静态方法
-
非静态方法可以访问静态方法和静态变量,也可以访问非静态方法和非静态变量
-
静态方法中没有this关键字