A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

静态方法

                      用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);
                }
                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方法访问时候没有对象,是程序一启动就访问的,所以它是静态的。
---------------------
【转载】
作者:11onhook
原文:https://blog.csdn.net/yj201711/article/details/84075116


4 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马