Java中Static执行顺序
Java中Static执行顺序
什么是static
static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。也就是说说被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问
static代码块
static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
static方法
静态方法可以直接通过类名调用,任何的实例也都可以调用, 因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量
static 执行顺序
如果不继承别的类,那么执行顺序应该是:
static代码块–>普通代码块–>类构造方法
如果继承了别的类,那么执行顺序应该是:
父类static代码块–>子类static代码块–>父类普通代码块–>父类构造方法–>子类普通代码块–>子类构造方法
下面直接上代码
父类Animal
public class Animal { static { System.out.println("This is Animal Static area Code... "); } { System.out.println("This is Animal General area Code..."); } //static String constant; public Animal() { System.out.println("This is Animal Construct Method..."); } public void running() { System.out.println("I'm Running"); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
子类Dog
public class Dog extends Animal { static { System.out.println("This is Dog Static area Code..."); } { System.out.println("This is Dog General area Code..."); } public Dog(){ System.out.println("This is Dog Construct Method..."); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
模拟调用
public class Client { public static void main(String[] args){ Dog dog = new Dog(); dog.running(); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
执行结果
This is Animal Static area Code... This is Dog Static area Code... This is Animal General area Code... This is Animal Construct Method... This is Dog General area Code... This is Dog Construct Method... I'm Running
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C++--内存管理与释放
C++--内存管理与释放 1、为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下: typename * pointer_name = new typename; 2、堆和栈的区别: 栈区(stack),由编译器自动分配释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈,速度较快。 堆区(heap),一般由程序员分配释放,若程序员不释放,程序结束时由操作系统回收。它不是数据结构中的堆,分配方式类似于链表。一般速度比较慢,而且容易产生内存碎片。C中使用malloc函数在堆上分配内存, char* p1=(char *)malloc(10);//由free释放 C++中用new运算符在堆上分配内存 char* p2=new char[10];//由delete[]释放 p1,p2本身是在栈中的,它们指向在堆上分配的内存。 一定要配对地使用new和delete,否则将发生内存泄露,也就是说,被分配的内存再也无法使用了。如果内存泄露严重,则程序将由于不断寻找更多内存而终止。 3、在编译时给数组分配内存称为静态联编,在程序运行时创建的数组称为动态数组...
- 下一篇
JAVA SE 异常处理
JAVA SE 异常处理 简介 异常:阻止程序正常运行的问题。 异常链:将捕获的异常包装进一个新的异常中,并重新抛出的异常处理方式。 一个方法应该抛出定义在相同的抽象层次上的异常,但不会丢弃更低层次的信息。 关键词: throw:将产生的异常抛出(动作) throws:声明要抛出的异常的名字(声明) try:捕获异常,用于会产生异常的代码块 catch:处理异常,对try中捕获的异常进行处理 finally:最后处理的区域,一定会进行的,通常用于清除操作 异常的分类: 应用实例 //自定义异常 class ExceptionName extends Exception{ public ExcetionName(){ super(); } } //抛出异常 public void methodName() throws Exception{ //调用会抛出的异常的方法或者 throw new Exception(); } //try-catch语句、try-catch-finally语句 Scanner input = new Scanner(system.in); try{ int o...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境