static 作用一: 将一个属性设置成一个公共的属性 如:Static String city = "B"; 就是所谓共享资源;
一般情况下static声明的属性都是用类名直接调用,形式如下: 类名称.属性
static 还可以定义方法,声明的方法可以随类直接调用;
在使用静态方法时注意以下几点:
1.static 方法只能调用static属性和static方法,不能调用非static方法和属性;why?
原因:静态属性和方法可以在没有实例对象的时候调用;而非静态类的属性和方法必须在实例化以后才可以调用;
static的局限性:
1.在static的方法中仅能够调用其他的static方法和static变量;
2.在static方法中不能以任何方式引用this或 super;
3.static变量在定义时必须进行初始化,并且初始化的时间早于非静态。
4.static的变量的初始化仅能一次,且只在需要输出之前接受最后一次初始化
static的用法原理:
1.在java虚拟机中,对于对象的引用存在栈内存中,对象存在堆内存中,声明为static以后,每次声明一个对象就无需在栈内存中重新开辟一块内存空间用于存放对象的引用,相当与C或C++中的全局变量。
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
l 在对象之间共享值时
l 方便访问变量时
2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,
因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
例如为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。
静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的
/** 静态类优先于主方法进行、优先于构造方法执行 而且只执行一次 */
实例如下:
class Demo{
{
System.out.println("构造块");
}
static{
System.out.println("类中静态构造块");
}
public Demo(){
System.out.println("构造方法");
}
}
public class test{
public static void main(String args[]){
new Demo();
new Demo();
new Demo();
}
static{
System.out.println("---------------主类中的静态代码块---------------------------------");
}
}
*************************************************************************************************
阅读(1646) | 评论(0) | 转发(2) |