当前位置: 首页 > news >正文

做网站要分几部分完成省委副书记

做网站要分几部分完成,省委副书记,网站设计的公司北京,营销型企业网站📝个人主页:哈__ 期待您的关注 目录 一、无继承关系类的初始化 1、静态变量k被初始化 2、静态变量t1初始化 3、静态变量 t2初始化 4、静态变量i初始化 5、静态变量n初始化 6、静态块初始化 7、非静态块初始化 8、非静态属性初始化 9、执行构造…

  📝个人主页:哈__

期待您的关注 

目录

一、无继承关系类的初始化

 1、静态变量k被初始化

2、静态变量t1初始化

3、静态变量 t2初始化

4、静态变量i初始化

5、静态变量n初始化

6、静态块初始化

7、非静态块初始化

8、非静态属性初始化

9、执行构造方法

二、有父类继承的初始化 


在日常使用Java的时候,我们都接触过new这个关键字,那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢?

实际上要去判断一个类的初始化的顺序,需要分一下情况,一种是没有继承关系的类(不考虑Object类),一种是有继承关系的类。

一、无继承关系类的初始化

先看下边的代码。有着这样的一个类InitializeDemo ,我们直接运行main方法,你知道会打印出来什么吗?

public class InitializeDemo {private static int k = 1;private static InitializeDemo t1 = new InitializeDemo("t1");private static InitializeDemo t2 = new InitializeDemo("t2");private static int i = print("i");private static int n = 99;{print("初始化块");j=100;}public InitializeDemo(String str){System.out.println((k++)+":" + str + "  i="+i+".    n="+n);++i;++n;}static{print("静态块");n=100;}private int j = print("j");public static int print(String str){System.out.println((k++)+":" + str + "  i="+i+".    n="+n);++n;return ++i;}public static void main(String[] args) {InitializeDemo i = new InitializeDemo("test");}
}

打印结果如下所示。

想要弄明白这个,我就得先了解一下类的生命周期了。我们通过主方法运行Java程序,而这个主方法中创建了i对象并且属于InitializeDemo 类,所以在main方法执行时会将我们的类进行初始化。

在我们的类第一次进行初始化的时候,我们类中的静态块和静态属性会被优先构建。之后才轮得到非静态块和非静态属性。

当你知道了上边的规则之后,我们来看代码,类中有五个静态属性,一个非静态属性,一个静态块,一个非静态块还有一个静态方法。我们优先构建静态方法、属性和静态块,之后在构建非静态块。

这里我总结出第一条规则。

类的一个对象进行初始化,按照代码顺序从上往下先构建静态的属性、方法和静态块,之后在构建非静态块和非静态属性。(类中的静态块和静态变量只会初始化一次,也就是类第一次被用到的时候)

 1、静态变量k被初始化

private static int k = 1;

2、静态变量t1初始化

 private static InitializeDemo t1 = new InitializeDemo("t1");

这里还要说一下,这个静态变量是创建自己的类的对象,代码执行到这一行就要进行一个对象的初始化过程了。遇到这种创建本类对象的,我们按照以下的第二条规则。

一个类中有静态的本类对象,创建的过程从上到下先执行本类的非静态块和非静态属性,最后在执行构造方法。 

那么我们初始化t1的时候,就要从上向下找非静态块和非静态属性(如果有的话 ),最后在执行构造方法。

{print("初始化块");j=100;}

我们调用print函数并且将j的值修改为100,这样就出现了我们的第一行。

之后往下走,走到了这一行代码。这行代码定义了j变量,并且调用了print方法,所以也就有了我们的第二行。

private int j = print("j");

最后调用构造方法。打印我们的第三行。

现在你是否清楚了前三行输出结果是怎么来的了吗?这前三行的结果都是t1进行初始化时非静态块和非静态变量的执行结果。

3、静态变量 t2初始化

搞明白了t1是如何初始化的t2就和t1一模一样了,这里不讲解。

4、静态变量i初始化

静态变量i的初始化用到了print函数,这也就是第七行为什么会打印的原因。

private static int i = print("i");

5、静态变量n初始化

 private static int n = 99;

6、静态块初始化

这里调用print函数,也就是第八行的由来。

static{print("静态块");n=100;}

ok,到了这一步我们的静态属性和静态块已经从上到下全部初始化完成了。但你要知道,我们在上边初始化的非静态块和非静态属性所打印的语句是我们的t1和t2对象引起的,并非我们主方法内构建的i对象引起的,接下来还要初始化我们的非静态块和属性。

7、非静态块初始化

第九行的由来。

 {print("初始化块");j=100;}

8、非静态属性初始化

第十行的由来。

private int j = print("j");

9、执行构造方法

第十一行的由来。

public InitializeDemo(String str){System.out.println((k++)+":" + str + "  i="+i+".    n="+n);++i;++n;}

以上就是我们的一个类的构建过程,这里我给大家一张图(自己画的)。

这里需要注意以下,非静态属性如果创建的是自己的本类对象的话,那么会报错的。原理也很简单,就是一个循环创建的过程导致栈溢出。

二、有父类继承的初始化 

和没有父类继承初始化大同小异,我定义了这样的一个类让InitializeDemo,去继承。为了便于还是懵懂的同学理解,我把静态变量t1和t2删掉。

public class InitializeDemoFather {{System.out.println("父类初始化块");}static{System.out.println("父类静态块");}public InitializeDemoFather(){System.out.println("父类构造函数");}
}
来看看我们现在的打印结果。

 我给大家讲一下初始化的顺序大家就明白了,这里用一张图来表示。

对应着上边的图,是不是一看就有点思路了呢? 

如果你可以完整的走出以上的输出顺序,你就可以把t1和t2对象加上去了,不过不要被输出顺序所迷惑,就比如说,你可能会看到父类静态块和属性初始化完成后,初始化的不是子类的静态块和静态属性,而是父类的非静态块和非静态属性。你应该认真的思考一下,这个 输出的父类的非静态块和非静态属性初始化的语句到底是从何而来?

http://www.yidumall.com/news/87567.html

相关文章:

  • 目前做汽配的网站有哪些武汉网站seo推广公司
  • 济南市城乡建设委官方网站宁波seo关键词优化教程
  • 建设工程安全A证在哪个网站可查临沂seo网站管理
  • 程序员网站建设淘宝关键词优化工具
  • 怎么在网站上做宣传中山排名推广
  • 河北住房和城乡建设厅网站官网seo的实现方式
  • 营口市代做网站seo是什么职位的简称
  • 北京网站开发公司排名国内优秀网站案例
  • 一般做外单的有哪些网站广州seo推广营销
  • 大团网站建设北京昨天出啥大事了
  • 做网站收入太低如何自己搭建网站
  • 汕头网站推广制作怎么做网站百度
  • 做网销好的网站短视频培训学校
  • 泗水县最新消息seo技术培训学校
  • 九亭做网站分享推广
  • 网站关键词库怎么做有什么效果31省市新增疫情最新消息
  • 阿里云虚拟主机做淘客网站沈阳网站制作优化推广
  • 购物网站源码什么软件引流客源最快
  • 永康新站优化百度app怎么找人工客服
  • 安徽振兴集团网站开发模板网站建设
  • 如何让别人网站降权现在做百度推广有用吗
  • seo推广的优势外贸网站seo教程
  • 佛山网站建设佛山网站制作网络销售平台有哪些
  • 正规公司代办seo推广专员招聘
  • 个人网站logo需要备案吗怎么样才可以在百度上打广告
  • 邯郸做wap网站的公司地推任务网
  • 下什么软件做网站打开浏览器直接进入网站
  • 1个云虚拟主机怎么做多个网站海南网站建设
  • app开发的网站常用的网络营销平台有哪些
  • 免费上网的软件太原网站制作优化seo公司