Java编程思想第四版——读书笔记1
所有的问题,我都希望能从书本中找到理论的支撑。我的学习方法,爱读书!
2.3 永远不需要销毁对象
2.3.1 作用域
P25 尽管以下代码在C和C++中是合法的,但是在Java中却不能这样书写:
{
int x = 12;
{
int x = 56; //illegal
}
}
编译器将会报告变量x已经定义过。所以,在C和C++里将一个较大作用域的变量“隐藏”起来的做法,在Java里是不允许的。因为Java设计者认为这样做会导致程序混乱。
2.5 方法、参数和返回值
P27
int x = a.f();
这种调用方法的行为通常被称为发送消息给对象。在上面的例子中,消息是f(),对象是a。面向对象的程序设计通常简单地归纳为“向对象发送消息”
简单地一个解释,方便在画UML时,理解流程图。
3.7 关系操作符
P44 因为boolean值只能为true或false,大于和小于没有意义。等于和不等于适用于所有的基本数据类型,而其他比较符不适用于boolean类型。
3.8 逻辑操作符
P46 与 或 非 操作只可应用于布尔值。与在C及C++中不同的是:不可将一个非布尔值当做布尔值在逻辑表达式中使用。
可能需要变通了,例如 if( i != 0) 这样就是非0则是true了。
int i,j;
if( i && j ){ //这样是不正确的。
}
3.15 类型转换操作符
P55 Java允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。
5.4.1 在构造器中调用构造器
P86 尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错。 【注意语法】
5.5.2 你必须实施清理
P88 相反,JAVA不允许创建局部对象,必须使用new创建对象。在Java中,也没有用于释放对象的delete,因为垃圾回收器会帮助你释放存储空间。【注意语法,主要这与C++不同行容易混淆,
局部变量 TestClass test = TestClass();
指针 TestClass * testp = new TestClass();
===>
引用 TestClass test = new TestClass(); 】
5.6 成员初始化
P91 Java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。【注意语法,主要这与C++不同行容易混淆】
5.6.1 指定初始化
P93 如果想为某个变量赋初值,该怎么办?有一种很直接的办法,就是在定义类成员变量的地方为其赋值(注意在C++里不能这样做,尽管C++的新手们总想这样做)
public class InitialValue2{
boolean bool = true;
char ch = 'x';
}
5.7.2 静态数据的初始化 static
P95 static关键字不能应用于局部变量,因为它只能作用于域。
直接就弹编译错误了:Illegal modifier for the variable a; only final is permitted。出现这样的错,一般都是在方法中声明变量时提示,原因是用了public,private,static等修饰词去修饰方法内部变量,然而在java类的方法里声明变量时,他是只能用final修饰(only final is permitted)(或者不加修饰)。除此之外不能用其他的修饰符修饰,包括static也会报同样的错误。
public,private等是声明作用域的。方法内部定义的变量(只能在方法内部使用),在里面声明作用域无意义,也禁止声明。
但是在方法外面,是可以的。
5.7.4 非静态实例的初始化,代码块
P98 类中的代码块,用于初始化,它使得你可以保证无论调用了哪个显示构造器,某些操作都会发生。
与static 修改的代码块的区别,每次构造的时候都会执行。
老生常谈,程序的运行顺序:当new一个对象的时候,先执行了类中的代码块,后执行的构造函数。
5.8 数组初始化
int[] al;
int al[];
编译器不允许指定数组的大小。这里和C++区别挺大。
int a[2] = {0,1};
编译器会提示: Syntax error on token "2", delete this token
java的数组实际上都是new出来的。三种初始化方法:区别于C++的方法如下:
int[] list = new int[] {1,2,3,4};
5.9 枚举类型
讲的太肤浅了。建议参考如下
https://www.cnblogs.com/hyl8218/p/5088287.html
19章 会单独讲解enum,这里忽略了。
6.1 包:库单元
P110
为什么一个java源文件中只能有一个public类?P121 6.4 类的访问权限
1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。
3.虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。
6.1.3 定制工具库
使用import竟然可以引入类中的方法!第一次见到。
import static net.mindview.util.Print.* ; //注意Print 是类名。这个* 是类中的静态方法。
关于访问权限修饰符。===========================================
c++中
class A{
public : //对成员的访问控制
XXXXXXXXXXXXX
private :
XXXXXXXXXXXXX
}
而Java中
public class A{ //java中有“类的修饰符”
public func1();
pirvate func2();
}
关于继承 ======================================================
C++中
class A : public B{
}
Java中
class A extend B
上一篇: openamf序列化bug
下一篇: MyBatis学习6之动态sql