一、static可以说它是修饰变量的,static表示“全局”或者“静态”,但是Java中没有全局变量的概念。也可以用来修饰成员变量和成员方法,也可以形成static静态代码块。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是被static修饰的变量和方法不依赖类特定的实例,被类中的实例共享。
static可以在任何对象创建之前访问,无需引用任何对象。用public修饰的static成员和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static修饰的成员变量为静态成员变量,被static修饰的成员方法也称为静态成员方法。他们可以直接通过类名访问,其语法是
类名.静态方法名();
类名.静态变量名;
1、static变量
按照静态对类成员进行分类可分为两种:一种是被static修饰的变量,成为静态变量或者类变量。第二种是没有被static修饰的称为实例变量。他们两者的区别是:对于静态变量在内存中只有一个拷贝可节省内存,JVM只为静态变量分配一次内存,在加载类的过程中完成对静态变量的内存分配。实例变量是每创建一个实例对象就会为它分配一次内存。实例变量可以在内存中有多个拷贝,互不影响所以使用起来灵活。
二、在Java中形成static静态代码块和静态方法有什么区别
有时候需要程序一启动就执行这时候就需要用到静态代码块,这种代码是主动执行的。在项目启动的时候就需要初始化,在不创建对象的情况下用就用其他程序来调用的时候就要用到经静态方法。
静态方法与静态代码块的区别就是:
1、静态方法是被调用的时候执行。
2、静态代码块是自动执行的。
静态代码块与非静态代码块的区别:
相同点:静态代码块和非静态代码块都是jvm加载类时且构造方法之前执行的,在类中都可以定义多个,一般在代码块中对一些static变量赋值。
不同点:静态代码块在非静态代码块之前执行,静态代码块在只在第一次new时执行一次,而非静态代码块在每次new一次就执行一次。普通代码块可以在普通方法中定义,而静态代码块不可以。
在继承中执行顺序是:父类静态内容》子类静态内容》父类非静态代码块》父类构造方法》子类非静态代码块》子类构造方法
三、static静态内部类
在写测试代码的时候必须要写一个主方法,它是程序的入口。但是如果有多个测试类,每个类都要写一个主方法这样就会多出很多额外代码,这时候我们就可以将静态的主方法写入到静态内部类中,这样可以节省很多。其实静态内部类在实际中很少用到,有时候需要在内部类中定义静态的成员方法或是成员变量就不行,在非静态的内部类中不能定义静态的成员方法和静态的成员变量。还有非静态内部类可以随意访问外部类的成员变量或是成员方法,但是静态内部类只能访问外部类中的静态成员。在类中创建成员内部类的时候,有个强制性的规定,即内部类实例一定要绑定在外部类实例上,也就是在创建内部类之前要用new关键词创建内部类对象。但是静态内部类就不需要,在创建静态内部类对象时不需要外部类对象。
四、静态导包
静态导包时static特别的用法,静态导包就是讲Java包静态导入,所谓静态导包就是在import后面加上static
package demo_static;
import static java.lang.System.out;
public class Demo1 {
public static void main(String[] args){
out.println("123");
}
}