how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



5分38秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 1 : 对象属性初始化   
步骤 2 : 类属性初始化   
步骤 3 : 练习-属性初始化   
步骤 4 : 答案-属性初始化   

步骤 1 :

对象属性初始化

edit
对象属性初始化有3种
1. 声明该属性的时候初始化
2. 构造方法中初始化
3. 初始化块
package charactor; public class Hero { public String name = "some hero"; //声明该属性的时候初始化 protected float hp; float maxHP; { maxHP = 200; //初始化块 } public Hero(){ hp = 100; //构造方法中初始化 } }
package charactor;

public class Hero {
	public String name = "some hero"; //声明该属性的时候初始化 
	protected float hp;
	float maxHP;
	
	{
		maxHP = 200; //初始化块
	}	
	
	public Hero(){
		hp = 100; //构造方法中初始化
		
	}
	
}
步骤 2 :

类属性初始化

edit
类属性初始化有2种
1. 声明该属性的时候初始化
2. 静态初始化块
package charactor; public class Hero { public String name; protected float hp; float maxHP; //物品栏的容量 public static int itemCapacity=8; //声明的时候 初始化 static{ itemCapacity = 6;//静态初始化块 初始化 } public Hero(){ } public static void main(String[] args) { System.out.println(Hero.itemCapacity); } }
步骤 3 :

练习-属性初始化

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
对象属性的初始化有三种方式
故意把初始化块,放在构造方法下面,问题:

这三种方式,谁先执行?谁后执行?
package charactor; public class Hero { public String name = "some hero"; public Hero(){ name = "one hero"; } { name = "the hero"; } }
package charactor;

public class Hero {
	public String name = "some hero";  
	
	public Hero(){
		name = "one hero";
	}
	{
		name = "the hero";
	}
	
}
步骤 4 :

答案-属性初始化

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分34秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


设计一个类方法

public static String getName(String pos){
}

在属性初始化的时候,调用这个方法的返回值。
观察这个方法的输出顺序
答案-属性初始化
package charactor; public class Hero { public String name =Hero.getName("属性声明") ; public Hero(){ name = Hero.getName("构造方法"); } { name = Hero.getName("初始化块"); } public static String getName(String pos){ String result= "name "+pos; System.out.println(result); return result; } public static void main(String[] args) { new Hero(); } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2024-02-08 答案
wind_lz




大家看看我的对不?
执行顺序如下:

声明时初始化和初始化块的执行顺序取决于它们在类中出现的顺序。如果一个字段在初始化块之前被声明并初始化,那么它会在初始化块之前被初始化。如果初始化块在字段声明之前,那么初始化块会先执行。如果有多个初始化块,它们将按照它们在类中出现的顺序执行。
构造方法总是在所有字段声明时初始化和初始化块执行之后执行。

							


2 个答案

shishi12
答案时间:2024-03-30
先进行声明时的初始化,再进行初始化块,最后进行构造方法的初始化

晚安嘛
答案时间:2024-03-04
总结就是,如果有在构造方法里初始化对象属性的,无论外面的声明初始化和块初始化谁在前谁在后,结果都是构造方法里的初始化;如果没有构造方法,则声明和块初始化谁的位置在后面,最后对象属性的结果就是谁初始化的结果。



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2023-09-09 filed intialize order
software-engineer

hero静态属性声明 接着 hero静态初始化块 接着 hero属性声明 接着 hero初始化块 接着 hero构造器







回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2021-07-09 2021-7-8-PM-11-55
2021-06-30 恩,这样对吗
2021-03-20 创建对象时,构造方法不应该是最先被执行的吗


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 50 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-类和对象-属性初始化 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图