一.引入
1.简介
Static一般在什么场景会遇见呢,我们需要封装一个学生类,其中有名字,班级名,自我介绍等。
Static是一个关键字,表示静态。可以修饰变量、方法。
2.特点
其特点最主要的就是生命周期,即什么时候进入内存,什么时候又被销毁。
其中分为成员变量和静态的成员变量:
- 成员变量: new对象的时候进入到内存中去。对象销毁,成员变量跟着销毁
- 静态的成员变量:随着类加载而加载。比成员变量更快一步进入内存。随着类的销毁而销毁。
二.用法
1.修饰成员变量
a.变量的语义(所有的对象共享的变量)
所有中国人的国籍,所有重庆人的籍贯。
b.语法
public static 类型 变量名 = 值;
// 可以被外部访问和修改
public static final 类型 变量名 = 值
// 可以被外部访问,不能修改 【常量】
c.调用
类名.静态属性名
2.修饰成员方法
其语法是:
public static 返回类型 方法名(参数列表) {}
3.修饰成员的访问规则
我们在构造方法中只有在同类中可以直接访问静态成员,在其他类中需要使用_类名.属性名_来访问调用。同时在静态方法中只能使用静态的成员,所以无法直接访问非静态成员。
那么在非静态方法中同理,同类里可以直接访问静态成员,但是在其他类中只能使用**类名.属性名**来访问。
三.使用
我们首先将引入中的例子做出:
package cn.itsource.static1;
public class Student {
public String name;
static final String className = "小雨";
public Student(String name) {
this.name = name;
}
public void sayHi() {
System.out.println("我叫:" + name + " 来自:" + className);
}
}
再写出一个例子:
- Arrays所有的方法都用static来修饰
- Math所有的方法都用static修饰
- StudentClass所有的方法都没有用static来修饰
Arrays是用来操作数组的(一系列的操作数组的方法)、Math是一系列的数学方法的集合,他们都是工具类,偏应用,没有什么属性(Arrays没啥属性,数组都是传入的),就不需要new。所有的方法都是静态,直接通过类名调用即可。但是StudentClass实体类(现实生活中的教室), Dog类(狗)这些有属性。使用的时候需要new。
package cn.itsource.static1;
public class MyArrays {
private int[] arr = new int[10];
public MyArrays(int[] arr) {
this.arr = arr;
}
// 操作数组的方法
public void arrToString() {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public void copyOf() {
}
}
int[] arr1 = {1,2,3,4};
int[] arr2 = {1,4,6,4};
int[] arr3 = {1,5,7,4};
MyArrays myArrays = new MyArrays(arr1);
myArrays.arrToString();
// 输出 arr2
MyArrays myArrays1 = new MyArrays(arr2);
myArrays1.arrToString();
我们尝试改变:
package cn.itsource.static1;
public class MyArrays {
/**
* 遍历输出
* @param arr
*/
public static void arrToString(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void arrToString(double[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/**
* 合并int数组
* @return
*/
public static int[] merger(int[]... arr) {
return new int[5];
}
}
int[] arr1 = {1,2,3,4};
int[] arr2 = {1,4,6,4};
int[] arr3 = {1,5,7,4};
MyArrays.arrToString(arr1);
MyArrays.arrToString(arr2);