静态
1. 静态初始化块
(1)可初始化类的静态字段
(2)静态初始化块只调用一次
(3)创建子类时会调用父类的静态初始化块
源代码:
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}
}
public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();
}
}
结果截图:
(4)静态初始化块的执行顺序:先执行父类得的在执行子类的
1. 静态字段
加static
可用 类名+静态字段。
2. 静态方法
(1)类的静态方法只能访问累的静态变量
(2)只能访问静态变量或静态方法内的变量
(3)不能重写
(4)可用 类名+静态方法。
实验:
(1)静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
源代码:
public class StaticWord {
int x1=9;
static int x2=8;
static void display() {
System.out.println(x2);
System.out.println(new StaticWord().x1);//静态方法可以使用方法内的参数。
}
public static void main(String args[]) {
StaticWord.display();
}
}
结果截图:
(2)使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”
源代码:
public class StaticNum {
static int count=0;
public StaticNum() {
count++;
System.out.println("创建一个新对象!");
}
public static void main(String args[]) {
for(int i=5;i>0;i--) {
StaticNum temp=new StaticNum();
}
System.out.println("你创建了几个对象:"+count);
}
}
结果截图: