Java编程思想读书笔记_第7章

final关键字类似const:

 1 import java.util.*;
 2
 3 public class FinalData {
 4     static Random rand = new Random(47);
 5     final int valueOne = 9;
 6     final int i4 = rand.nextInt(20);
 7     static final int INT_5 = rand.nextInt(20);
 8     public static void main(String[] args) {
 9         FinalData f = new FinalData();
10         //f.valueOne = 7;
11         //f.i4 = 7;
12         System.out.println(f);
13
14         FinalData f1 = new FinalData();
15         System.out.println(f1);
16     }
17     public String toString() {
18         return
19              "valueOne = " + valueOne
20              + " " + "i4 = " + i4
21              + " " + "INT_5 = " + INT_5;
22     }
23 }

注意到:i4和INT_5的差别:类的不同对象中INT_5只在地一个对象创建的时候初始化一次,而i4则在每个对象创建的时候初始化一次。

关于名字屏蔽和C++的原则是不同的

C++中子类的重载函数会屏蔽掉基类中的其他函数:

 1 #include <iostream>
 2
 3 class Homer {
 4 public:
 5     char doh(char c) {
 6         std::cout << "doh(char)" << std::endl;
 7         return ‘d‘;
 8     }
 9
10     float doh(float f) {
11         std::cout << "doh(float)" << std::endl;
12         return 1.0f;
13     }
14 };
15
16 class Milhouse {};
17
18 class Bart : Homer {
19 public:
20     void doh(Milhouse& m) {
21         std::cout << "doh(Milhouse)" << std::endl;
22     }
23 };
24
25 int main() {
26     Bart b;
27     //b.doh(1);
28     b.doh(‘x‘);
29     //b.doh(1.0f);
30     Milhouse m;
31     b.doh(m);
32     return 0;
33 }

而java不会

 1 class Homer {
 2     char doh(char c) {
 3         System.out.println("doh(char)");
 4         return ‘d‘;
 5     }
 6
 7     float doh(float f) {
 8         System.out.println("doh(float)");
 9         return 1.0f;
10     }
11 }
12
13 class Milhouse {}
14
15 class Bart extends Homer {
16     void doh(Milhouse m) {
17         System.out.println("doh(Milhouse)");
18     }
19
20     @Override char doh(char c) {
21         System.out.println("Bart:doh(char)");
22         return ‘c‘;
23     }
24 }
25
26 public class Hide {
27     public static void main(String[] args) {
28         Bart b = new Bart();
29         b.doh(1);
30         b.doh(‘x‘);
31         b.doh(1.0f);
32         b.doh(new Milhouse());
33     }
34 }

还有就是要注意初始化顺序

 1 class Insect {
 2     Insect() {
 3         System.out.println("Insect::Insect()");
 4     }
 5
 6     static int i = printInit("static Insect::i");
 7
 8     static int printInit(String s) {
 9         System.out.println(s);
10         return 5;
11     }
12
13     int j = printInit("Insect::j");
14 }
15
16 public class Beetle extends Insect {
17     Beetle() {
18         System.out.println("Beetle::Beetle()");
19     }
20
21     public static void main(String[] args) {
22         System.out.println("Beetle::main()");
23         new Beetle();
24     }
25
26     int k = printInit("Beetle::k");
27     static int l = printInit("static Beetle::l");
28 }
时间: 2024-10-27 00:13:52

Java编程思想读书笔记_第7章的相关文章

Java编程思想读书笔记_第三章

本章提到的关于==的部分,一个完整的实验如下: 1 class Test { 2 public static void main(String[] args) { 3 Integer i = new Integer(47); 4 Integer j = new Integer(47); 5 Integer i1 = 47; 6 Integer j1 = 47; 7 int i2 = new Integer(47); 8 int j2 = new Integer(47); 9 int i3 = 4

Java编程思想读书笔记_第6章(访问权限)

四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 1 package access.dessert; 2 3 public class Cookie { 4 public Cookie() { 5 System.out.println("Cookie()"); 6 } 7 8 void bite() { 9 System.out.println("bite"); 10 } 11 } 12 13

Java编程思想读书笔记_第二章

java对于将一个较大作用域的变量"隐藏"的场景会有保护:编译告警.比如: 1 int x = 5; 2 { 3 int x = 6; 4 } 但是对于类中方法的局部变量和类成员变量确是可以重名的,比如 1 class Test { 2 int x = 4; 3 String s = "hello"; 4 5 void show() { 6 int x = 5; 7 System.out.println(this.x); 8 System.out.println(x

java编程思想读书笔记 第十二章 通过异常处理错误(下)

1.异常的限制 当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常.这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 下面的例子是在编译时施加在异常上面的限制: public class BaseBallException extends Exception {} public class Foul extends BaseBallException{} public class Strike extends BaseBallException{} p

JAVA编程思想读书笔记(五)--多线程

接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/details/42441895 daemon是相于user线程而言的,可以理解为一种运行在后台的服务线程,比如时钟处理线程.idle线程.垃圾回收线程等都是daemon线程. daemon线程有个特点就是"比较次要",程序中如果所有的user线程都结束了,那这个程序本身就结束了,不管daemon是否

Java编程思想读书笔记之内部类

现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始说起. 一.为什么需要内部类 1.一个内部类的对象可以访问它的外围类的私有数据. 2.对于同一个包中的其他类来说,内部类能够隐藏起来. 3.使用内部类实现多重继承. 二.内部类重要提要 1.在方法内部或者方法内部的作用域的内部类 eg:方法内部的内部类 public interface InnerInterf

Java编程思想读书笔记

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4290955.html 第一章对象导论... 1 第二章一切都是对象... 4 第三章操作符... 10 第四章流程控制... 12 第五章初始化与清理... 14 第六章访问权限控制... 15 第七章复用... 23 第八章多态... 2

Java编程思想读书笔记--第14章类型信息

7.动态代理 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象.这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色. 什么是代理模式? 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 代理模式有什么好处? 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到的角色有: 抽象角色:声明真实对象和代理对象的共同接口,这样一来在任何可以使用目标对象

java编程思想读书笔记三(11-21)

十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变. ●Collection保存单一的元素,而Map保存相关联的键值对.有了泛型,你就可以指定存放的对象类型,获取的时候,也不需要类型转换.各种Collection与Map都可以自动调整大小.容器不能持有基本类型.但是会自动包装. ●像数组一样,List也建立数字索引与对象的关联.因此,数组和List都是排