第三讲类与对象

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超过了该范围。

以上是关于第三讲类与对象的主要内容,如果未能解决你的问题,请参考以下文章

C++从入门到入土第三篇:类与对象(上篇)

第4章 类与对象 析构函数

Python基础学习第十五节 类与继承(类与继承,这一篇就足够了)

C++从入门到入土第四篇:类与对象(中篇)

python学习第二十一天:类与对象,继承与派生

动手动脑第三波类与对象