how2j.cn


工具版本兼容问题
当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性
当一个属性被声明成类属性,那么所有的对象,都共享一个值
与对象属性对比:
不同对象的 对象属性 的值都可能不一样。
比如盖伦的hp 和 提莫的hp 是不一样的。
但是所有对象的类属性的值,都是一样的

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



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



步骤 1 : 类属性   
步骤 2 : 访问类属性   
步骤 3 : 什么时候使用对象属性,什么时候使用类属性   
步骤 4 : 练习-类属性   
步骤 5 : 答案-类属性   

步骤 1 :

类属性

类属性: 又叫做静态属性
对象属性: 又叫实例属性,非静态属性
如果一个属性声明成类属性,那么所有的对象,都共享这么一个值
给英雄设置一个类属性叫做“版权" (copyright), 无论有多少个具体的英雄,所有的英雄的版权都属于 Riot Games公司。
package charactor; public class Hero { public String name; //实例属性,对象属性,非静态属性 protected float hp; static String copyright;//类属性,静态属性 public static void main(String[] args) { Hero garen = new Hero(); garen.name = "盖伦"; Hero.copyright = "版权由Riot Games公司所有"; System.out.println(garen.name); System.out.println(garen.copyright); Hero teemo = new Hero(); teemo.name = "提莫"; System.out.println(teemo.name); System.out.println(teemo.copyright); } }
步骤 2 :

访问类属性

访问类属性有两种方式
1. 对象.类属性

teemo.copyright

2. 类.类属性

Hero.copyright


这两种方式都可以访问类属性,访问即修改和获取,但是建议使用第二种 类.类属性 的方式进行,这样更符合语义上的理解
步骤 3 :

什么时候使用对象属性,什么时候使用类属性

如果一个属性,每个英雄都不一样,比如name,这样的属性就应该设计为对象属性,因为它是跟着对象走的,每个对象的name都是不同的

如果一个属性,所有的英雄都共享,都是一样的,那么就应该设计为类属性。比如血量上限,所有的英雄的血量上限都是 9999,不会因为英雄不同,而取不同的值。 这样的属性,就适合设计为类属性
步骤 4 :

练习-类属性

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
通过garen.copyright修改其值

garen.copyright = "Blizzard Entertainment Enterprise";

然后打印teemo.copyright,观察是否有变化
步骤 5 :

答案-类属性

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

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


会变化,因为类属性只有一个,不同的对象都共享这么一个类属性


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


问答区域    
2018-09-13 有点像默认属性
南柯一梦tel
类名.属性来访问 直接在初始定义的时候赋值不是更好吗




1 个答案

帕丁顿boy 答案时间:2018-09-21
方式是可以的。 因为它属于这个类公共部分,所以直接以类.属性来赋值是更符合语义,但不是规定只能这么做




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




2018-08-28 按在地上摩擦~
脑子转不过来



摩擦摩擦~
/**
 * 类属性
 * @author Chen
 * 当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性 
 * 当一个属性被声明成类属性,那么所有的对象,都共享一个值 
 * 与对象属性对比: 
 * 不同对象的 对象属性 的值都可能不一样。 
 * 比如盖伦的hp 和 提莫的hp 是不一样的。 
 * 但是所有对象的类属性的值,都是一样的
 */
public class H01_StaticClass {
/**
 * 通过garen.copyright修改其值
 * garen.copyright = "Blizzard Entertainment Enterprise";
 * 然后打印teemo.copyright,观察是否有变化
 */
	public String name;		//对象属性(非静态属性)
	protected float hp;
	static String copyright;//类属性(静态属性)
	
	public static void main(String[] args) {
		H01_StaticClass.copyright = "版权由Riot Games公司所有";
		
		H01_StaticClass garen = new H01_StaticClass();
		garen.name = "盖伦";
		System.out.println(garen.name + "的coryright: " + garen.copyright);
		
		//盖伦修改了copyright
		garen.copyright = "Blizzard Entertainment Enterprise";
		
		H01_StaticClass teemo = new H01_StaticClass();
		teemo.name = "提莫";
		System.out.println(teemo.name + "的coryright: " + garen.copyright);
		
	}
}

/**
 * 什么时候使用对象属性,什么时候使用类属性
 * 如果一个属性,每个英雄都不一样,比如name,这样的属性就应该设计为对象属性,因为它是跟着对象走的,每个对象的name都是不同的
 * 如果一个属性,所有的英雄都共享,都是一样的,那么就应该设计为类属性。
 * 比如血量上限,所有的英雄的血量上限都是 9999,不会因为英雄不同,而取不同的值。 
 * 这样的属性,就适合设计为类属性
 */

							


1 个答案

Sparrow 答案时间:2018-09-04
盖伦 Blizzard Entertainment Enterprise 提莫 Blizzard Entertainment Enterprise




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





2018-08-07 小白交作业
2018-07-20 【学习总结】
2018-07-06 作业
2018-07-03 类属性可以直接访问吗?不需要前面的Hero.和garen.
2018-05-08 会修改
2017-06-30 也会变成Blizzard Entertainment Enterprise
2017-03-15 为什么静态变量在方法外不能重新赋值,只能在方法里赋值
2016-12-29 类属性能被继承吗
2016-03-26 static variable




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

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

上传截图