黑马程序员——Java基础---static关键字

来源:互联网 发布:人工智能语音电话 编辑:程序博客网 时间:2024/05/17 03:59

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一.static的引入

Static表示“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块.被static修饰的成员变量和成员方法独立于该类的 任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法 区内 定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。对于一些已经有固定值的变量,每次实例化对 象都会产生空间,其值基本是固定了,为了防止过多的存储此变量造成空间浪费,我们可以将此变量声明为static(静态)。

二.static标记后注意事项
1.static应用范围:可用于内部类、方法和变量.
2.标记一个方法为static,意味着这个方法,被所在类的所有实例公用,在类装载时被首先执行,执行一次即被所有该类的实例共享,同时意味着:
1)static方法内部不能引用非static变量.
2)static方法不能被子类重写为非static方法.
3)父类的非static方法不能被子类重写为static方法.
4)static代码块可以用static {}来完成,在类被第一次装载时执行初始化,先于静态方法和其他方法的执行.
5)static方法区内不能定义this和super关键字.
6)静态方法只能访问静态成员,非静态方法,可以访问静态和非静态成员;
3、标记一个变量为static,则该变量在内存中有不变的位置,所有类的实例都访问同一个存储变量区域。对其修改对于所有类的实例来说都是可见和一致的。
举例:


<span style="white-space:pre"></span>class Student<span style="white-space:pre"></span>{static String Name1 = "Welcome";static int a=1;static void show(){//静态的方法无法访问非静态的成员//System.out.println( stuName );System.out.println(Name1);}static void show1(){int a=2;System.out.println(a);//System.out.println(this.a);//静态方法里不能定义this}<span style="white-space:pre"></span>}<span style="white-space:pre"></span>class Test1 <span style="white-space:pre"></span>{public static void main(String[] args) {Student.show();//静态方法可以通过类名直接调用<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}
三.应用

1.静态的成员属性的应用

如果某些变量有固定的值,而且需要被整个工程共享,这时可以将这些变量定义在某个类中,并全部声明为static的,以方便被所有项目组使用;
例如PI值,我们在计算圆面积时,因为需要一个精度标准,整个项目都定义PI=3.14159,这时我们把PI定义为静态就可以了.

<span style="white-space:pre"></span>class PiNum<span style="white-space:pre"></span>{static double PI = 3.14159;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>class Test1 <span style="white-space:pre"></span>{public static void main(String[] args) {System.out.println(PiNum.PI);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}

因为PI已经被静态了,所以在整个项目中需要用的时候就直接用类名访问就可以了,非常的方便.

2.静态方法的应用

在整个项目中,会有一些方法,被全局使用;它们经常是一些"功能性的方法"。例如:加、减、乘、除、求数组的最大值,最小值;都会将这些功能封装成一个方 法,供整个程序使用;此时,可以将这些功能性的方法,放到一个类中,并且声明为static,可以直接通过类名就可以调用了,使用很方便;
举例:

class MyMath{static int add(int a ,int b){return a + b;}static int sub(int a ,int b){return a - b;}static int mul(int a ,int b){return a * b;}static int div(int a ,int b){return a/b;}}class Test1 {public static void main(String[] args) {System.out.println("a + b="+new MyMath().add(5,2));//之前的普通方法,必须要先实例化此类对象才可以调用;System.out.println("a + b="+MyMath.add(5,2));//通过类名就可以调用静态方法;System.out.println("a + b="+MyMath.sub(5,2));System.out.println("a + b="+MyMath.mul(5,2));System.out.println("a + b="+MyMath.div(5,2));}}

如果这些方法没有使用静态方法,那么在调用的时候就必须得实例化对象才能调用,而静态后直接用类名访问就行.

0 0
原创粉丝点击