版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84075116
静态方法
用static修饰的方法。静态的属性也称类变量,静态的方法称为类方法。
静态方法什么时候使用
- 类属性作为该类各个对象之间共享的变量,在设计类时,分析哪些类属性不因对象的 改变而改变,将这些属性设置为类属性,相应的方法设置为类方法。
- 如果方法和调用者无关,则这样的方通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
静态方法和静态变量一样,属于类所有,在类加载的同时执行,不属于某个具体的对象,所有对象均能调用,对于静态方法需要注意以下几点:
- 它们仅能调用其它的static的方法
- 它们只能访问static数据
- 它们不能以任何方式引用this或super
静态方法的使用的注意事项
- 在静态的方法中,只能使用静态的变量,不能使用非静态的变量
- 静态方法只能调用静态的方法,不能调用非静态的方法
- 非静态可以访问静态的,而静态的不能访问非静态的
在静态中不能使用this
静态方法,一般用于声明工具类中的方法。可以直接拿类名调用工具方法进行使用。比如:在Java中,对于数组的操做,比较频繁,有一些方法是所有数组共有的一些操作排序,在数组中去查找某一个特定的元素 打印数组的元素等。
数组操作的工具类:Arrays
在Arrays这个工具类中,使用二分搜索法,查找一个元素的时候:这个数组必须是经过排序
import java.util.Arrays;
public class ArrayTest {
public static void main(String[] args) {
int[] arr = {2,3,6,7,1,4};
int serchResult = Arrays.binarySearch(arr, 4);
Arrays.sort(arr);
for(int i = 0 ; i < arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println(serchResult);
}
}
静态方法与普通方法
- 静态方法中不可直接调用非静态方法,但是非静态方法中,可以直接调用静态的。
- 静态方法可以调用静态成员变量,调用普通成员变量时需要创建对象;非静态方法可以随意调用静态成员变量或普通成员变量。
- 静态方法和普通方法调用特性同上,静态调用普通方法时需要创建对象,而普通方法随意
静态代码块
static{
}
public class StaticBlock {
public static void main(String[] args) {
/*String schoolName = Student.getSchoolName();
System.out.println(schoolName);*/
Student stu = new Student();
Student stu1 = new Student("张三",23);
}
}
class Student {
private String name ="";
private int age;
private static String schoolName ="太原师院";
static{
schoolName ="太原师范学院";
System.out.println("静态代码块执行");
}
{
System.out.println("构造代码块执行");
}
public Student() {
System.out.println("无参构造执行");
}
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("带参构造执行");
}
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 static String getSchoolName() {
return schoolName;
}
public static void setSchoolName(String schoolName) {
Student.schoolName = schoolName;
}
}
静态代码块(无论创建多少个对象,只执行一次) --》构造代码块(随着对象的创建而执行,执行的次数,与创建对象的个数相同)--》构造方法
静态变量(类变量/类属性)的初始化
- 在声明变量的时候可以进行初始化
- 在静态代码块中对其进行初始化
什么情况下我们要使用static呢?
- 只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。
- 我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。(常用在工具类中)
静态变量和成员变量的区别
- 内存分配。静态静态,就是当类被加载时,这个内存就静静的待在这里,就已经存在,而普通成员变量,只有类被实例化时才分配内存。
- 调用方法。成员变量需要对象才能被调用;而静态成员变量可以直接通过类来调用,当然也可以直接调用
- 生命周期。静态成员变量从类被加载开始到类被卸载,一直存在;普通成员变量只要在类被实例化也就是创建对象是才开始存在,一直到对象结束,生命也告终。
- 共享方式。静态成员变量是全类共享的,即使不是对象,也可以调用,并且内存不变;普通成员变量是每个对象单独享用的,就是说你这个对象有一个 int i=1 ,我再给该类创建一个新的对象,他也有一个 int i ,但他可以不等于1,可以等于5,也可以等于10,但无论等于多少,都不会影响之前对象的i的值,而静态成员变量不是这样。
static对性能的影响
为什么说 static块 可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。static final 用来修饰成员变量和成员方法,可简单理解为“全局常量”, 常量必须要加static关键字修饰。
static 就是静态变量,声明为 static 的变量实质上就是全局变量,如果一个成员被声明为 static ,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象!
static的优点
- 一个静态属性在堆内存只能存在一个,即大家可以共享该属性值。
- 如果一个对象数组中其中的某个属性大家都是相同的,即可以使用静态,这样可以节省内存空间。
- 静态一旦创建,生命周期就会从创建开始到该程序结束才会死亡。
- 静态依赖于类,而不是对象。
为什么main方法是静态的?而且是public static
public,访问权限大;static,main方法访问时候没有对象,是程序一启动就访问的,所以它是静态的。