黑马程序员_static(静态)详解

来源:互联网 发布:ubuntu安装图形化界面 编辑:程序博客网 时间:2024/06/06 21:26

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


1、static关键字的由来
当有多个对象共享同一个属性,可以使用静态。

可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类。

2、static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。

如果一个成员变量是static 的,那么我们可以通过   类名 .成员变量名 成员变量名 成员变量名 的方式来使用它 的方式来使用它 (推荐使用这种方式) 。

class Demo {public static void main(String[] args) {/* * 创建两个对象,在对象f里面对num重新赋值 * 输出结果都为重新赋值的那个值 */F f = new F();f.num = 15;System.out.println(f.num);F f1 = new F();System.out.println(F.num);//用类名.成员变量名  调用成员变量}}class F {static int num = 10;    public void getNum() {    }}

3、static修饰方法: static 修饰的方法叫做静态。 对于静态方法来说,可以 使用 类名 .方法名的方式来访问。

class Demo {public static void main(String[] args) {F.getNum();//直接使用类名.方法名  调用方法}}class F {    public static void getNum() {System.out.println("helloWorld");    }}

4、静态方法只能继承,不能被重写

如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法,具体调用哪一个方法是看是哪个对象的引用;这种父子类方法也不在存在多态的性质。

例如:

class Demo {public static void main(String[] args) {F f = new F();f.getNum();//结果为helloWorldZ z = new Z();z.getNum();//结果为HelloF f1 = new Z();f1.getNum();//结果为helloWorld}}class F {    public static void getNum() {System.out.println("helloWorld");    }}class Z extends F {    public static void getNum() {System.out.println("Hello");    } }
总之,静态的没有重写!!!


5、不能在静态方法中访问非静态成员变量;

代码演示:

class Demo {public static void main(String[] args) {F f = new F();f.getNum();}}class F {int age = 10;//错误: 无法从静态上下文中引用非静态变量 age    public static void getNum() {System.out.println( age );    }}


6、静态类

一般情况下是不可以用static修饰类的。如果一定要用static修饰类的话,通常static修饰的是匿名内部类。
在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的。由于静态的内部类在定义、使用的时候会有种种的限制。所以在实际工作中用到的并不多。
在开发过程中,内部类中使用的最多的还是非静态地成员内部类。不过在特定的情况下,静态内部类也能够发挥其独特的作用。


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

0 0