how2j.cn

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



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



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

步骤 1 :

对象属性初始化

对象属性初始化有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 :

类属性初始化

类属性初始化有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 :

练习-属性初始化

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

这三种方式,谁先执行?谁后执行?
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 :

答案-属性初始化

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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


设计一个类方法

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公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-01-02 这个是我以前做的作业,详细的解读了静态代码块,构造代块和构造函数的先后顺序。据说一般面试都考这个,虽然我不干这行的!
tequilasu2010



静态代码块,构造代码块,构造函数的先后进栈顺序
/*
 * 静态代码块;构造代码块;构造代码区别
 * */
class Code{
	
	static{
		prt("1---显示表明在没有对象的时候初始化了类,所以静态代码块可以初始类,在静态代码区第一个被进栈");
	}
	
	static {prt("2---显示表明构造代码块初始化了所有的对象。在对象的建立后进栈");
	}
	{
		//private Code(){}; private 构造代码后,所有的对象被初始化为静止创建
	}
	Code(){
		prt("3---无参;构造函数开始执行,这里表明构造代码只适合初始化特定对象,表明构造函数在对象建立以后第三个进栈");
	}
	Code(String a){//构造函数,有参
		prt(a);
	}
	
	static void prt(String a){
		System.out.println(a);
	}
	

}
public class 静态构造代码块构造函数进栈过程 {
	public static void main (String[] age){
		Code c=new Code();
		Code c1=new Code("3.1---构造函数开始执行;初始化了第二个对象c1.表明构造函数是针对特有的对象初始化");
		
	}

}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-12-29 这段代码里的最后的 new Hero是什么意思,然后静态方法里的return是什么意思。
srz



最后只有一个new Hero(),这样会执行什么,不行该最后在方法里面输出name属性吗
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();
    }
      
}

							


1 个答案

suye 答案时间:2018-01-03
main是程序入口,new Hero()表示新调用Hero()方法。getName()这个静态方法是string类型的,需要返回值return result。调用这个方法是name=Hero.getName(),有返回值结果就是name=result。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-11-15 pos是啥
2017-10-10 new Hero()为什么就会调用到对象属性?
2017-10-10 对象属性可以调用类方法,但是实例化之后并没有调用对象属性,为什么会自动打印出来呢
2017-06-30 初始化
2017-03-08 对象属性 && 类属性
2017-03-06 构造方法先执行????为什么???
2017-01-18 答案上的代码不太理解,自己写的代码输出的结果有问题
2017-01-18 视频看不了
2016-12-27 步骤三:练习
2016-10-10 Static的顺序问题
2016-06-22 这里面的hero对象哪儿来的
2016-06-20 步骤四代码实现过程中的具体细节是怎样的?
2016-03-14 类属性初始化static问题




提问之前请登陆
关于 JAVA 基础-类和对象-属性初始化 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图