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

猜你喜欢

转载自blog.csdn.net/yush34/article/details/89338775