目录
1. 定义main()方法为什么要用到static?
解析:
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,无须创建类的实例就可以调用静态方法,静态方法可以通过类名调用。
因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是非静态方法可以访问静态变量或静态方法,因为是全局性的。
静态方法只能访问类的静态成员(静态变量、静态方法),不能访问类中的实例成员(实例变量和实例方法)。这是因为未被static修饰的成员都是属于对象的,所以需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。
因为定义运行main函数之前没有创建对象,所以只能通过类调用方法,即静态方法main(),如图所示,通过类调用的main();
2. 定义变量为什么要用static
使用static修饰的成员变量,称为静态变量或类变量,它被类的所有对象共享,属于整个类所有,因此可以通过类名直接来访问。而未使用static修饰的成员变量称为实例变量,它属于具体对象独有,只能通过对象引用变量访问。
3. 如何在java中定义全局变量?
所以定义全局变量要用static int a ; 这种格式
1)无需实例化对象就可访问
2)静态变量只存在一个内存区
3)main方法是静态方法,只能调用静态变量。
例子:
上面这些代码,由于不同对象的count是分开存储的,所以不能实现计算总创建对象个数功能。
下面 使用static变量即可完成这个功能。
示例中使用static关键字修饰成员变量count,这个类变量在内存中只有一份,所有的对象共享这个类变量,因此每当创建一个对象时,都会调用它的构造方法,类变量count会在原来的基础上加1,这样就可以统计出创建了多少个对象。
4. 静态变量和非静态变量的区别:
静态变量被所有的对象所共享,在内存中只有一个副本【存放在方法区】,它当且仅当在类初次加载时会被初始化 [ 加final和不加final的static变量初始化的位置不一样 ]。而非静态变量是对象所拥有的,创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。 静态成员变量的初始化顺序按照定义的顺序进行初始化.
简而言之,带有 static 关键字的字段属于类,它们是类方法和变量
5. 总结static的作用
静态方法、变量
静态代码块
静态内部类
静态导包
。。。。