Java中static修饰符
来源:互联网 发布:工期优化例题 编辑:程序博客网 时间:2024/05/02 02:11
Java中static修饰符
java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
使用static修饰符来修饰类的成员变量和方法,使他们成为静态成员,也称为类成员。静态成员存储于类的存储区,属于整个类,不属于一个具体的类对象。因此,在不同的类对象中访问静态成员,访问的是同一个。成员声明为static后,无须创建该类中任何对象,直接用类就可以访问。同样,静态方法也可以直接被调用。如果不想再创建对象的时候就需要知道一些相关信息,那么就声明为static类型的,被修饰为static类型的成员变量不属于对象,它是属于类的。
内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
方法声明为static时,具体有如下限制:
1 只能调用其他static方法和使用static属性。
2 不能使用关键字this或super
3 static代码块将被只执行一次。
例1:
public class test
{
String color=”绿色”;
public static void main(String[] args)
{
System.out.println(color);//程序从main入口,color属于实例变量,为对象共//有,在还没有创建对象就调用它,所以编译出错
}
}
此时使用javac编译程序时将产生一个和该程序对应的class程序,然后使用java运行编译产生的class程序,运行出现异常。原因就是在static类型的方法里调用未使用static类型的成员变量color。将成员变量color修饰为static类型的就可以解决上述错误。
此时输出的结果为:绿色
总结:
程序里的main方法为一个static类型的静态方法,如果要使用color成员变量的话,该变量就要被修饰为static类型的。静态变量不依赖于对象的加载而是依赖于类的加载的。当类加载后对象可能还没有被加载,所以说静态成员变量是属于类的,其生命周期比非静态成员变量要长。在静态方法里只能使用静态成员变
例2:
public class test
{
static String color=”绿色”;
public void getMes()
{
System.out.println(test.color);
}
public static void main(String args[])
{
test t=new test();
t.getMes();
}
}
此时输出的结果为:绿色
方法getMes里调用了静态成员变量color,为什么在这里不提示错误呢?这是因为getMes是属于对象的,对象存在了该方法就存在了。在方法getMes存在的时候静态成员变量早就已经存在了。在任何静态方法里凑能访问静态成员变量了。
例3:
public class test
{
static String color=”绿色”;
public static void main(String args[])
{
System.out.println(this.color);
}
}
此时会产生错误。因为this关键字指的是类的本身,是属于对象的,而静态成员变量是属于类的。它们之间的访问关系不一样。对象存在的时候静态成员变量一定存在,但this不知道指的是哪个对象;而静态成员变量存在的时候对象不一定存在。
所谓常量指的就是唯一的、不可变的、只存在一份的数据。在Java里,用static final两个关键字来修饰成员变量。
static关键字修饰成员变量是属于类,随着类的创建而创建。
final关键字修饰成员变量的值是不能改变的。
static关键字和final关键字没有前后顺序之分。
public class test
{
public final static String color=”绿色”;
public final static double PI;
public static void main(String args[])
{
System.out.println(color);
System.out.println(PI);
}
}
此时提醒错误,错误的提示说明常量PI必须要初始化,因为static关键字的关系要在对象创建前对其进行初始化。对常量PI进行初始化赋值就可以解决这个问题。
public class test
{
//次为一个静态块
static
{
PI=3.14;
}
public final static String color=”绿色”;
public final static double PI;
public static void main(String args[])
{
System.out.println(color);
System.out.println(PI);
}
}
此时运行的结果是:绿色
3.14
静态块和静态成员变量一样都属于类的,不属于对象的。常量和静态块随着类的创建在,当然可以给常量进行赋值。
注意,static静态块在类的初始化就自动运行,而static修饰方法只有被调用才会运行
如
public class Test
{
static String color="绿色";
public static void print(){
System.out.println("static修饰方法");
}
static{
System.out.println("static静态方法块");
}
public static void main(String args[])
{
System.out.println(color);
}
}
输出结果
static静态方法块
绿色
程序在main函数入口判断该类是否被装卸,如果没有,则装卸该类,故而“static静态方法块”在“绿色”前。
- Java中static修饰符
- java中static修饰符
- java中static修饰符
- Java中关于static修饰符
- JAVA中static修饰符的作用
- java中static修饰符详解
- Java中static修饰符的作用
- [JAVA] 修饰符 static
- java static修饰符
- java static 修饰符
- java基础知识—java中static修饰符
- java修饰符(static关键字)
- java的static修饰符
- java修饰符:static关键字
- java之static修饰符
- java中的Static修饰符
- Java修饰符static详解
- Java静态修饰符static
- Matlab 获取仅当前路径下的文件夹名
- Oracle Database 11g Release 2 RAC On Linux Using VMware Server 2
- 24个免费的Web UI开发套件
- 向导式对话框
- 30天web实践2-timelinejs
- Java中static修饰符
- 90分钟学会写操作系统
- A-base62-shorter-url-server
- Gdb停在链接器入口点
- 第一次在CSDN上写博客
- activiti 学习(一)
- vim 常用命令(持续记录)
- POJ 2653 Pick-up sticks
- 前缀表达式