3-类与对象-动手动脑

一:1.

2.程序源代码:

 1 class InitializeBlockClass
 2 {
 3     {
 4         field=200;
 5     }
 6     public int field=100;
 7     public InitializeBlockClass(int value)
 8     {
 9         this.field=value;
10     }
11     public InitializeBlockClass(){}
12     public static void main(String[] args) 
13     {
14         InitializeBlockClass obj=new InitializeBlockClass();
15         System.out.println(obj.field); // ?
16         obj=new InitializeBlockClass(300);
17         System.out.println(obj.field); // ?
18     }
19 }

3.程序结果截图:

4.结果分析:

(1)

{

    field=200;

}

该部分为类的初始化块,可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。类的这种“没有名字”的“成员”,多用于初始化类的字段。 

(2)

public int field=100;  在定义时进行初始化,此时field = 100;

System.out.println(obj.field); 输出field的值100。

(3)

obj=new InitializeBlockClass(300);

System.out.println(obj.field);

利用构造方法进行初始化,将field的值初始化为300,输出300。

5.规律总结:

Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。

如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

二:1.

2.程序源代码:


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();

}
}

3.程序结果截图:

4.规律总结:静态初始化块的执行顺序:

创建子类型的对象时,也会导致父类函数的执行,先执行静态函数,在执行public函数,最后执行函数。

三:1.

2.程序源代码:

 1 package lei1;
 2 
 3 public class Fangfa 
 4 {
 5         public static void a()
 6         {
 7             System.out.println("类的方法");
 8         }
 9         public void b()
10         {
11             System.out.println("对象的方法");
12         }
13 }
14 public class Jingshi 
15 {    public static void main(String[] args)
16     {
17          Fangfa.a();
18         Fangfa e=new Fangfa();
19         e.b();
20         e.a();
21      }
22 }

3.结果截图:

原文地址:https://www.cnblogs.com/liurx/p/7699579.html