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


问答区域    
2017-06-30 也会变成Blizzard Entertainment Enterprise
javalover
都会改变的,因为copyright为类属性,类似于全局变量,任何地方修改了这个属性,那么其他使用这个属性的地方都会修改。 通俗点讲就是大家都在一个水塘里取水,其中一个人往水塘里加盐了,那么其他人的水也会变咸




8 个答案

不可抗力 答案时间:2018-01-17
棒棒的解释

1332665493 答案时间:2017-12-13
哇,秒懂!厉害

tccccc 答案时间:2017-10-17
static 全局静态变量, 都用的一块内存,甚至都可以用引用来解释, 每个对象的静态属性都是存储在那块内存中,只是用不同的名字读取那块内存的内容

Java练习生 答案时间:2017-10-06
66666

老妖 答案时间:2017-09-08
哦哦哦

javaLover1 答案时间:2017-08-26
不愧是javaLover家族的

javaLover1 答案时间:2017-08-26
不愧是javaLover家族的

lzxxx 答案时间:2017-08-08
这个说法很赞哦




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




2017-03-15 为什么静态变量在方法外不能重新赋值,只能在方法里赋值
xiaohanzi123456



如下面代码,第一个代码在方法内是正确的: package exerice; public class TestNumber { public static int a; public static void ac(){ a=3; } public static void main(String[] args) { TestNumber.ac(); System.out.println(a); } } 但是直接重新赋值就不行? package exerice; public class TestNumber { public static int a; a=3; public static void main(String[] args) { System.out.println(a); } }

							
package exerice;
public class TestNumber {
	private static String pool="";
    for (short i1 = '0'; i1 <= '9'; i1++) {
        pool += (char) i1;
    }
    for (short i2 = 'a'; i2<= 'z'; i2++) {
        pool += (char) i2;
    }
    for (short i3 = 'A'; i3 <= 'Z'; i3++) {
        pool += (char) i3;
    }
	}
    private static String ran(int length){
        char cs[] = new char[length];
        for (int i = 0; i < cs.length; i++) {
            int index = (int) (Math.random() * pool.length());
            cs[i] = pool.charAt(index);
        }
        String result = new String(cs);
        return result;
    }
    public static void main(String[] args){
	    String length3=TestNumber.ran(3);
	    System.out.println(length3);
	
    }

}


3 个答案

穿山 答案时间:2017-06-17
how2j 答案时间:2017-03-16
这是一个类属性赋予初值的问题 请参考: http://how2j.cn/k/class-object/class-object-init/297.html#nowhere

xiaohanzi123456 答案时间:2017-03-15
我是在异常代码里发现这个问题的,把用来赋值的for循环放到方法里就不会出现异常




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





2016-12-29 类属性能被继承吗
2016-03-26 static variable




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

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

上传截图