类和对象动手动脑
Posted lishengming00
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和对象动手动脑相关的知识,希望对你有一定的参考价值。
// 信1705-3 20173574 李胜明
1.
早期经常这样定义变量
int value=100;
前面的示例中这样定义变量
MyClass obj = new MyClass();
这两种方式定义的变量是一样的吗?
答:这两种方式定义的变量是不一样的,第一种是原始数据类型定义的变量,而第二种是通过引用类名创建一个对象obj出来,obj称为对象变量。
2.
请输入并运行以下代码,得到什么结果??
代码截图:
3.
以下代码为何无法通过编译?哪儿出错了?
package 动手动脑;
public class Text {
public static void main(String[] args)
{
Foo obj1=new Foo();
System.out.println(obj1=obj2);
}
}
class Foo
{int value;
public Foo(int initValue) {
value=initValue;
}
}
错误原因:
在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到java的构造函数的声明过程,因此,在类中没有书写构造函数的方法的时候,编译器默认继承Object类,并在编译的时候会产生一个参数为空的构造函数,然而在定义的Foo这个类的时候,给予了一个Foo(int)类型的构造方法,所以在上述Test的调用过程中,obj1并不能够调用到new Foo()这个构造函数的方法。
4.
使用上页幻灯片中定义的类,以下代码输出结果是什么?
请依据代码的输出结果,自行总结Java字段初始化的规律。
Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。
如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。
运行截图:
- 请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
代码:
package Root;
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();
}
}
代码截图:
通过上面的实验可以看到,调用一个类的构造方法,会首先从最开始的子类往基类方向执行,并且最开始的执行的初始化块总是静态的,并且在执行完静态的初始化块之后,又从子类开始按普通,无参,有参的顺序开始往基类方向执行。
6.
上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?
代码:
public class StrangeIntegerBehavior
{
public static void main(String[] args)
{
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1);
Integer i2=129;
Integer j2=129;
System.out.println(i2==j2);
}
}
代码截图:
以上是关于类和对象动手动脑的主要内容,如果未能解决你的问题,请参考以下文章