017-static关键字

声明:我的所有文章,都是对网上教学视频的整理,包括狂神说、尚硅谷、黑马程序员等等,用来作为参考资料,无任何商业使用,请广大网友参考,不喜勿喷,谢谢。(注意,由于网站的原因,有些代码字符可能会出现问题,建议大家阅读代码时,最好和下面的图片对应来看)
一、问题引入
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。
017-static关键字
定义一个Circle类
017-static关键字
创建两个Circle对象
Circle c1 = new Cirlce(2.0); //c1.radius = 2.0
Circle c2 = new Cirlce(3.0); //c2.radius = 3.0
Circle类中的变量radius是一个实例变量(instance varialbe),它属于类的每一个对象,不能被同一个类的不同对象所共享。
上例中c1的radius独立于c2的radius,存储在不同的空间。c1中的radius变化不会影响c2的radius,反之亦然,如果想让一个类的所有实例共享数据,就用类变量!
二、类属性、类方法的设计思想
1、类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性,相应的方法设置为类方法。
2、如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
3、使用范围:在Java类中,可用static修饰属性、方法、代码块、内部类
4、被修饰后的成员具备以下特点:
 随着类的加载而加载
 优先于对象存在
 修饰的成员,被所有对象所共享
 访问权限允许时,可不创建对象,直接被类调用
三、类变量(类属性)
类变量(类属性)由该类的所有实例共享,例如:
017-static关键字
类变量VS实例变量内存解析
017-static关键字
静态变量的内存解析
017-static关键字

四、类方法
1、没有对象的实例时,可以用类名.方法名()的形式访问由static修饰的类方法。
2、在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
017-static关键字
3、因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super?YES!)
4、static修饰的方法不能被重写。

猜你喜欢

转载自blog.51cto.com/12859164/2554280