static关键字
1、共享数据:static用于修饰成员(成员函数,成员变量),这些成员都是被对象共享的成员。
2、特点
①、随类的加载而加载,消失而消失。
②、优先于对象而存在
③、被所有对象所共享
④、可以直接被类名所调用
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class Chinese
{
static String country = "中国";//共享数据
String name;
int age;
void singOurCountry(){
System.out.println("啊,亲爱的"+country);
}
}
public class AboutStaticKey { sducc1122
public static void main(String[] args) {
System.out.println(Chinese.country);
//当成员被静态修饰后,除了可以被对象调用之外,还可以被类名调用
Chinese ch = new Chinese();
System.out.println("Chinese country is " + ch.country);
ch.singOurCountry();
}
}
3、实例变量与类变量的区别
①、存储位置
前者随对象的建立而存在于堆内存中
后者随着类的加载而存在于方法区中
②、生命周期
前者随着对象的消失而消失
前者随着类的的消失而消失
③、调用方式
前者可以被对象及类名调用,但建议用类名调用
后者只能被对象调用
4、静态的使用注意事项:
①、静态的方法只能访问静态成员
②、静态方法中不可以使用this或super关键字
③、静态省略的是类名,成员变量省略的是this
④、主函数是静态的
public static void main(String[] args)
1)、public:代表着该函数的权限最大
2)、static:代表主函数岁类的加载而加载就已经存在
3)、void:主函数没有返回值
4)、main:不是关键字,是一个特殊的单词,可以被jvm识别。
5)、String[] args:http://hainanqichewang.com函数的参数,参数类型是一个数组,该数组中的元素师字符串,字符串类型的数组。
5、静态的利弊
①、利:对对象的共享数据进行单独空间的存储,节省空间,可以被类名直接调用。
②、弊:生命周期过长,而且访问有局限性
6、什么时候使用静态?
①、静态变量:如果对象中出现共享数据时,该数据被静态修饰,对象中的特有数据定义在堆内存中
②、静态函数:函数是否用静态修饰,就看该函数功能是否需要访问对象中的特有数据,需要,该功能为非静态;不需要,就定义成静态
7、静态代码块
①、格式:
static
{
code;
}
②、特点:随类的加载而执行,且只执行一次,并优先于主函数而执行
③、作用:给类进行初始化
8、面试题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25class StaticCode {
StaticCode(){
System.out.println("b");//因为没有创建过与之相关的对象,从而没有被执行过,所以不打印b
}
static//静态代码块给类初始化
{
System.out.println("a");
}
{//构造代码块给对象初始化,其优先级比构造函数高,因为构造函数有针对性,而构造代码块可以初始化所有对象
System.out.println("c");
}
StaticCode(int x){//构造函数给对应的对象初始化
System.out.println("d");
}
public static void show(){
System.out.println("show run");
}
}
class StaticCodeDemo {
public static void main(String[] args) {
new StaticCode(4);
}
}
问打印结果是?为什么?
结果:a c d,
---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------