码迷,mamicode.com
首页 > 编程语言 > 详细

Java 核心基础之static静态代码块和静态方法

时间:2020-07-25 23:49:36      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:code   总结   静态成员   初始化顺序   静态   image   内存   区别   使用   

static静态代码块和静态方法

static关键字

  • static修饰的方法或变量,优先于对象执行,所以内存会先有static修饰的内容,后有对象的内容
  • 可以用来修饰类的成员方法、类的成员变量,还可以编写static静态代码块
  • 修饰变量就是类变量,修饰方法就是类方法
  • 总结:类变量或者类方法,可以直接通过类名.方法名或者变量名进行调用,不用经过对象
    public static class Student{
        static int age;
        public static String name;
        public static void speak() {
            System.out.println("唱歌??");
        }
    }
public class Student {
    static int age;
    public static String name;
    public static void speak() {
        System.out.println("唱歌??");
    }
}

static变量也称作静态变量

  • 和非静态变量的区别是,静态变量被所有的对象所共享,在内存中只有一份,它当且仅当在类初次加载时会被初始化。非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
  • static成员变量的初始化顺序按照定义的顺序进行初始化

static方法也称作静态方法

  • 不依赖于任何对象就可以进行访问,类名.方法名
  • 不能访问类的非静态成员变量和非静态成员方法

注意事项

  1. 静态方法不能直接访问非静态变量
  2. 静态方法当中不能使用this
  3. 核心:一个类里面static修饰的不能访问非static修饰的成员或方法,而非static修饰的可以访问static修饰的成员或方法

静态代码块

  • 加载类的时候,静态代码块会被执行一次,且只能执行一次
  • 静态内容优先于非静态内容,所以静态代码比构造方法先执行
  • 使用场景:用来一次性对静态成员变量进行赋值,或者类资源初始化等操作
class Person {
    static {
        System.out.println("我是静态代码块");
    }
}

常考面试题

  记得博主,在一次面试过程中,面试官出了这道题被吊打了。。。静态代码块、构造代码块、构造函数执行顺序

  默认执行顺序为:静态代码块 > 构造代码块 > 构造函数

public class Student {
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是构造代码块");
    }
    public Student() {
        System.out.println("我是构造函数");
    }
}

执行顺序

技术图片

继承关系时的执行顺序

老师类

class Teacher {
    static {
        System.out.println("我是【老师】静态代码块");
    }
    {
        System.out.println("我是【老师】构造代码块");
    }
    public Teacher() {
        System.out.println("我是【老师】构造函数");
    }
}

学生类继承老师

public class Student extends Teacher{
    static {
        System.out.println("我是【学生】静态代码块");
    }
    {
        System.out.println("我是【学生】构造代码块");
    }
    public Student() {
        System.out.println("我是【学生】构造函数");
    }
}

执行顺序

public class MyMain {
    public static void main(String[] args) {
        Student student=new Student();
    }
}

打印结果:我是【老师】静态代码块我是【学生】静态代码块我是【老师】构造代码块我是【老师】构造函数我是【学生】构造代码块我是【学生】构造函数

技术图片

 

Java 核心基础之static静态代码块和静态方法

标签:code   总结   静态成员   初始化顺序   静态   image   内存   区别   使用   

原文地址:https://www.cnblogs.com/chenyanbin/p/13376187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!