2019-07-16 09:36:07 6244浏览
今天千锋扣丁学堂Java培训老师给大家分享一篇关于Java面试题static关键字的详细介绍,文中通过示例代码介绍的非常详细,下面我们一起来看一下吧。
package com.ant.param;
public class StaticFieldDemo {
public static void main(String[] args) {
Foo f1 = new Foo();
Foo f2 = new Foo();
Foo f3 = new Foo();
System.out.println(f1.id + " " + f2.id + " " + f3.id );
}
}
class Foo{
int id;
}
上面的代码我们很熟悉,根据Foo构造出的每一个对象都是独立存在的,保存有自己独立的成员变量,相互不会影响,他们在内存中的示意如下:
package com.ant.param;
public class StaticFieldDemo {
public static void main(String[] args) {
Foo f1 = new Foo();
Foo f2 = new Foo();
Foo f3 = new Foo();
System.out.println(f1.id + " " + f2.id + " " +
f3.id + " " + Foo.i);
}
}
class Foo{
int id;
static int i=0;
public Foo(){
id = i++;
}
}
运行结果如下:
0 1 2 3
程序执行过程内存图如下所示:
第2步:继续加载类
第3步:继续加载类
package com.ant.param;
public class StaticFieldDemo {
private static void print(){
System.out.println("hello");
}
public static void main(String[] args) {
StaticFieldDemo.print();
}
}
package com.ant.param;
public class StaticBlockDemo {
public static void main(String[] args) {
Foo foo = new Foo();
}
}
class Foo{
//代码块,在创建对象的时候执行,使用很少,和构造器差不多
{
System.out.println("创建对象了!");
}
//静态代码块,在类加载期间执行,用于加载配置文件或者其他信息等
static{
System.out.println("类加载了!");
}
public Foo(){
System.out.println("调用了构造器!");
}
}
【关注微信公众号获取更多学习资料】 【扫码进入JavaEE/微服务VIP免费公开课】