一. 静态:关键字(static),用于修饰修饰成员(成员变量,成员函数);
二. 静态特点:1,独立于堆内存,都放在共享区内被所有对象所共享,可以直接被类名调用。
随着类的加载而加载
3,生命周期比较长,他是优于对象的存在,成员变量随着对象的存在而存在,而类变量随着类的存
在而存在。
使用注意事项:1,静态是优于对象的存在,所以它不能访问对象的成员,只能访问静态成员
2,非静态成员可以访问静态成员
3,静态方法中不可以有this ,super这样的关键字(原因是静态优于对象的存在)
public class StaticDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Persion p = new Persion();
p.name = "wangyukun";
p.print(); }
}
class Persion
{
String name;
public static String country ="CN";
public void print()
{ System.out.println(Persion.country);
System.out.println("姓名:"+name+"国籍:"+country);
}
}
如代码country是一个固定的国家,名字不肯随便可以改变,而且Persion中的人都要共用一个country,如果每个对象都要给它赋值country的话 太占用堆空间浪费资源。用static修饰后它会独立出来,为对象共同使用,节省资源。用static修饰的成员变量可以用类直接调用如:System.out.println(Persion.country);可以打印出cn来。
三.为什么使用静态呢?
1,静态可以修饰成员变量和函数
2,当对象中出现共享数据时用静态修饰(对象的特有元素要用非静态存放于堆中)
如上代码:country就是共享数据,而name是对象特有的不能修饰静态、
什么时候修饰静态函数呢?
1,当功能内没有访问到非静态数据,那么就可以用静态修饰这个函数
如一下代码print()方法中根本就没有访问到非静态的成员,它就可以使用静态修饰。
public class StaticDemo {
public static void main(String[] args){
Persion p = new Persion();
p.print();
}
}
class Persion
{
String name;
public void print()
{
System.out.println("jjjj");
}
}
四.静态的应用
每一个应用程序中都有共同的特性,可以将这些共性就行抽取,然后封装,以便以后重复使用。
如下代码:把数组取大值封装起来,以后别的数组再去选时候用就直接调用
public class StaticDemo {
public static void main(String[] args){
int[] arr = {3,4,1,32,6,89,23,6,5,99,3,42,35};
ArrayMax am = new ArrayMax();
am.getMax(arr);
}
}
class ArrayMax
{
public static void getMax(int[] aa)
{ int max = aa[0];
for(int i=0 ;i<aa.length;i++)
{
if(max<aa[i])
{
max=aa[i];
}
}
System.out.println(max);
}
}