Java中静态关键字的使用方法介绍一

1           静态成员变量

在类中定义的变量通常称之为成员变量,如果当一个成员变量的前面增加了修饰符Static,那么我们就称这个成员变量为静态成员变量。

1.1           成员变量和静态成员变量的定义方法

创建一个Car类,在其中定义了两个成员变量,一个是普通成员变量color,一个是静态成员变量myColor。

public class Car {
         public String color;//普通成员变量
         public static StringmyColor;//静态成员变量
         void show(){
                   System.out.println("汽车的颜色是"+this.color);
                  System.out.println("我的汽车的颜色是"+this.myColor);
         }
public static void main(String[]args) {
                   Carcar=new Car();
                   car.show();
         }
}

运行结果为:

汽车的颜色是null

我的汽车的颜色是null

无论是成员变量还是静态成员变量在没有自定义初始化的时候,系统给的默认初始值都是null。在这一点上成员变量和静态成员变量是同样的。

1.2            静态成员变量的使用场合

1.2.1           成员变量的值在不同的对象中完全一样

一个类可以创建多个对象实例,每创建一个对象,就在内存中分配相应的一块空间,用来存储对象中的成员变量和方法。如果某一个成员变量在每一个对象中的值都是相同的,那么对于这个变量来说,每个对象中也同样分配了内存空间进行存储就造成了内存空间的浪费。如下图所示,图中的地址为演示用,并不是实际内存地址。(下同)

图1      定义普通成员变量时的内存地址的使用情况图

为了解决使用成员变量造成的内存空间的浪费,可以定义静态成员变量来解决这种内存空间的浪费。定义为静态成员变量的变量其分配的内存地址为共享数据内存地址,与对象分配的内存地址不在同一区域,而且只分配一次,不会因为对象的构建而重复分配。构建对象完成后,通过对象同样可以访问静态成员变量,达到与通过对象访问普通成员变量同样的效果。使用静态成员变量大大减少了内存空间的浪费情况,如下图所示。

图2      定义静态成员变量后的内存地址的使用情况图

1.2.2           类在加载过程中给变量赋值

有一个变量,希望这个变量在类的初始化过程中就给其赋值,如何才能完成这样一个功能?

我们知道普通成员变量的初始化需要先要构建类的对象。只有当类的对象存在后,才能给成员变量进行赋值。所以普通成员变量完成不了我们前面提出的需求。

那如何完成这个功能呢?这里就可以用到静态成员变量。由于静态成员变量是随着类的加载而加载的,也就是说在定义类的过程中,给类分配内存的同时,也给静态成员变量分配了内存。所以类加载后,静态成员变量也同时加载完毕。不用构建对象,可以直接访问静态成员变量。

public class Car {
         publicstatic String myColor="white";
         publicstatic void main(String[] args) {
                   System.out.println(“我的汽车颜色是”+myColor);
         }
}

运行结果为:

我的汽车的颜色是white

从运行的结果,可以发现不构建类的对象,一样可以访问静态成员变量。这就解决了我们提出的问题。

我们使用类名访问了静态成员变量,那么如果使用对象能够访问静态成员变量吗?我们按照下面的代码进行修改。

public class Car {
         publicstatic String myColor="white";
         publicstatic void main(String[] args) {
         Car car1=new Car();
      System.out.println("我的第一辆汽车颜色是"+myColor);
                   System.out.println(“我的汽车颜色是”+myColor);
         }
}

运行结果为:

我的第一辆汽车颜色是white

我的汽车颜色是white

从运行结果我们发现静态成员变量不仅能够通过类访问,通过对象同样可以访问。

1.2.3           静态成员变量与成员变量的不同

静态成员变量和非静态成员变量虽然都是成员变量,但是其还是有不同之处,主要体现在以下几点:

1、存储地址不同,静态成员变量存储于数据共享区,成员变量存储于对象内存区;

2、生成的时间不同,静态成员变量在类生成的时候就同时存在了,而成员变量需要构建对象后才存在。

3、调用的不同,静态成员变量既能被类调用也能被对象调用,而成员变量只能被对象调用。

时间: 2024-10-21 22:51:46

Java中静态关键字的使用方法介绍一的相关文章

Java中静态关键字的使用方法介绍三

1.1      静态方法main()的解析 1.1.1   静态方法main()的语句组成 在我们使用java语言进行编程中,常常用到要一个main()函数,这是一个程序的入口,是整个程序中最为重要的部分之一.通常,main函数按照以下格式进行书写. public static void main(String[] args) { } 我们发现main()函数前面存在静态修饰符Static那说明main函数就是一个静态方法.那么这个main函数语句到底由什么组成呢?下面我们就来分析一下main

Java中静态关键字的使用方法介绍二

1         静态方法 前面我们了解了静态成员变量的一些使用的方式,现在我们接着探讨一下静态方法的相关内容,并了解一下静态方法的使用情况. 1.1      静态方法和一般方法的定义方法 在类中我们可以定义类的方法,如果当一个方法的前面加了关键字Static,也当方法使用静态修饰符时,我们则称这个方法为静态方法,没有这个关键字,则不是静态方法.还是以Car类为例,定义一个静态方法stop(),和一个非静态方法show(),具体看下面代码所示. public class Car { publ

Java中静态关键字的使用方法介绍四

1         静态代码块 下面介绍一种不是很常见的静态修饰符的使用方法.当我们需要一个类,这个类的构造函数是私有的,那么这个类之外其他程序就不能够创建这个类的对象.那么如何初始化这个类呢? 为了解决这个问题,我们可以使用前文中的静态成员变量或者静态方法来初始化类.在类的加载过程中,静态成员变量和静态方法同时也就加载完成了.除了上面的两种方法还有一种更加简单的方法,就是在类中使用静态代码块.静态代码块不是一个方法,它的写法很简单,如下: public class Car {         

java中new关键字和newInstance()方法有什么区别?

1.new可以调用带参数的构造函数,newInstance不可以. 2.new 是 java 的关键字,用来构造一个类的实例.而 newInstance 是 Class 的一个方法,不过两个写法的效果一样. 3.newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. 4.new是关键字,用来生产对象,可以调用类的公开任何构造方法而newInstance是反射时用的,只能调用无参数的构造方法,如果想调用有参数的构造方法,可以用Const

java中new关键字和newInstance()方法的区别

1> new是一个关键字,可以说是一个指令: newInstance()是一个方法,Class对象的一个方法. 2> new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中: newInstance()主要作用是在内存中生成一个实例,而这个方法在使用前必须得保证:①这个类被加载到内存中,②这个类已经被连接,而完成以上两个过程的是Class.forName()方法. 3> new关键字的使用一般比较呆板的写入到程序中: newInstance()方法一般用于框架中,工厂模式

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是