阅读 12

《疯狂Java讲义》5

目录

toString方法

final

抽象类和抽象方法


toString方法

    先看一个程序:

图片

结果如下:

图片

可以看到,上面的程序和我们想要的结果并不一样,上面实际上是输出了p引用的Person对象。我们想要的结果是“Java",这里涉及到了toString()方法。所以下面两行代码的效果一样:

图片

结果如下:

图片

这个方法是Object类里的一个实例方法,所有的Java类里都有这个方法。Object类提供的toString()方法总是返回该对象实现类的"类名+@+hashCode"值,但是这个返回值并不是我们想要的真正的内容。如果想输出"Java"这个字符串,我们就要重写Object类里的toString()方法。

举个栗子:

图片

结果如下:

图片

    实际上,toString()方法是一种“自我描述”方法,只不过没有重写的话,不能描述成我们想要看到的结果。

final

1.final修饰的成员变量必须被程序员显式地赋初值;

2.使用final修饰的形参不能被赋初值;

3.final修基本类型变量和引用类型变量的区别:

****我们用程序来进行说明:

图片

图片

结果如下:

图片

两个被注释掉的认为是非法的代码报错如下:

图片

图片

    这个就很好理解了,主要就是看final修饰的是谁,修饰谁谁不能变,但是其他可以变。简单变量很好理解,引用变量就要注意不能变的是引用地址,而不是引用对象。

4.可执行“宏替换”的final变量

****对一个final来说,不管他是类变量、实力变量、还是局部变量,只要该变量满足以下三个条件,这个final变量就不再是一个变量,而是一个直接量:

(1)被final修饰符修饰;

(2)定义该变量时指定了初始值;

(3)该初始值可以在编译时就被确定下来。

eg:final  int  age = 5;运算表达式不,除了这种直接给一个值得情况,如果等号后面是一个运算表达式,简单的连接式,没有访问普通变量、调用方法,也看作是“宏变量”。

举个例子:

图片

结果如下:

图片

我们再看一个栗子:

图片

结果如下:

图片

    也就是说,c和d并不相等。这里的a,b,c在编译时可以确定下来,但是d因为引用了普通变量(a,b是普通变量,不是宏变量),所以编译的时候没有确定下来。但是如果把a和b变成宏变量(加修饰符final),d就可以确定下来了:

图片

结果为:

图片

抽象类和抽象方法

1. 抽象方法和抽象类都要用abstract进行修饰。有抽象方法的类只能被定义成抽象类,但是抽象类中可以没有抽象方法。

2. 抽象类不能被实例化,无法使用new关键字调用抽象类的构造器来创建抽象类的实例。

3. 抽象类不能用于创建实例,只能当作父类被子类继承。子类继承的时候,父类的所有抽象方法都必须实现。

举个栗子:

图片

图片

结果如下:

图片

END

图片

【2017.07】 这是补昨天的,学习进度不能停,空了就得相办法补回来,辛苦一点没关系,心里踏实。昨天带弟弟逛了大学校园,想让他提前感受一下大学,刺激他的学习。不过并不强求什么,毕竟还小,我也是现在才知道学习的意义,才开始有了学习的激情与渴望,小刺猬,加油!

文章分类
代码人生
文章标签