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.结果截图: