第三讲类与对象
Posted 歪歪bky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三讲类与对象相关的知识,希望对你有一定的参考价值。
【动手动脑】
错误分析:
如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
源程序中并没有Foo()此构造函数,所以无法实现,所以需要再写一个构造函数。
【自找麻烦】
总结
首先,在main函数中先调用不同的构造函数。对于初始化板块,源程序运行会自行覆盖,所以把int field与初始化板块交换顺序,最后输出就是200。
执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
【动手动脑】
总结:
静态初始化块只执行一次。因为静态初始化板块只会在第一次装入系统的时候运行,当再次实例化的时候就不需要再执行了,因为已经存在了。
创建子类型的对象时,也会导致父类型的静态初始化块的执行。
【一个有趣的问题】
验证:
//信1605-2班 那颖 20163448
public class Verify
{
private int x=9;
public static void display()
{
Verify v=new Verify();
System.out.println(v.x);
}
public static void main(String[] args)
{
display();
}
public void get(int n)
{
x=n;
}
}
【课后作业1】
源程序:
//信1605-2 那颖 20163448
import java.util.Scanner;
class Number
{
static int number=0;
static void display()
{
++number;
System.out.println("At present now it has created "+number+" objects.");
}
}
public class ReferCreateObject
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
String character=" ";
do
{
Number a=new Number();
a.display();
System.out.println("是否继续创建新对象(Y/N)");
character=input.next();
}while(character.equals("Y"));
}
}
【运行结果】
【思考Integer的“诡异”特性】
使用javap反编译在cmd中可以看到调用了Interger中的valueOf函数,因为Interger的适用范围是-128到127,而129超过了该范围。
以上是关于第三讲类与对象的主要内容,如果未能解决你的问题,请参考以下文章