《Java 入门经典》读书笔记

 

{}能限定局部变量的作用范围

case值可以是string,但是不能是long

&&在左边为false时不会计算右操作数
&则都会计算

string的split()方法,第二个参数如果为0,则空的token会被抛弃,如果为负数,则都会返回。

StringBuilder快
StringBuffer线程安全

编译器会大量联合使用toString()方法与append()方法以实现String对象的联合。

即使没有创建对象,类中的静态变量也就已经存在。

初始化代码块会在构造函数之前执行

System.gc()

一个类的构造函数可以在它的第一条可执行语句中调用同一个类中的另一个构造函数。

 


复制对象很耗时,但是有时候也必要

只有当一个类声明为public时,它的类名才可以被另一个包中的类访问。没有声明为public的类只能被同一个包中的类访问。

在大多数情况下,对于简单类(比如没有子类的情况下)应该显式的将类成员设定为public或者private,而不是省略访问属性

注意一个静态嵌套类能有静态成员,而一个非静态嵌套类不能有。


java, 为什么非静态嵌套类不能有静态变量?因为这样的静态变量无法存在(静态类成员需要在对象实例创建之前被初始化并且分配内存。而作为非静态嵌套类,它无法在不实例化的时候就初始化其内部的静态成员。)但是innerClass可以有静态常量。

一个静态方法无法创建一个非静态嵌套类类型的对象

面向对象编程有三个特征,即封装、继承和多态
方法的重写、重载与动态连接构成多态性


一个在基类中声明为private和static的变量无法继承到派生类,而声明为protected和static的变量则能够被继承并且由该派生类类型的所有对象与基类类型的所有对象共享。

继承时隐藏针对成员,重写针对方法


在派生类中被继承的基类方法能访问所有的基类成员,包括没有被继承的那些成员


如果没有在基类中定义自己的默认构造函数(即无参数的构造函数),则当编译器从派生类构造函数中插入一个对默认构造函数的调用时,会得到一条消息说构造函数不存在。

组成一个类外部接口的方法应该声明为public。

保持数据成员为private并且在必要时提供public方法来访问和操纵它们会让这些类将会更加安全

将基类成员标记为protected允许从同一个包中的其他类访问它们,但是这会阻止来自另一个包中的类直接访问它们。

多态
如果Dog类是从Animal类派生而来,则Animal类型的变量也可以用于引用Spaniel、Chihuahua或者Collie对象。

多态
对于派生类对象中非基类类型的方法,不能使用基类类型的变量调用该方法。派生类中该方法的任何定义都必须有与基类的签名一样而且必须有一个不会含有更多限制的访问修饰符。

派生类中的方法访问修饰符必须不能比基类中有更多限制

对于多态方法
由派生类方法返回的对象类型只是由基类方法返回类型的特殊化。


使用多态需要满足的条件列举如下:
l 派生类对象的方法必须通过基类对象变量调用。
l 调用的方法必须是定义在派生类中。
l 调用的方法必须也在基类中被声明为成员。
l 基类和派生类中的方法签名必须一样。
l 要么基类和派生类中的方法返回类型必须一样,要么返回类型必须是协变的。
注意多态只应用于方法。它不能应用到数据成员。


抽象类是指一种类,其中声明了一个或者多个方法,但是没有定义它们。这些方法的方法体被省略掉,抽象类无法定义对象。

注意clone()方法并不是对所有类对象都有用

 
finalize() 当一个对象被销毁时该方法可以用来进行清理工作。几乎没有任何原因能覆盖该方法。 


记得Class对象返回一个对象的真实类。
a.getClass().getName();

如果一个类实现了Cloneable接口就能使用clone()。在创建克隆时不会复制被指向的对象——只有对旧对象域的引用会被复制到克隆对象的域中。
如果需要克隆你的类类型的对象,最简单的方法是忽略clone()方法并且在你的类中实现一个复制构造函数。

装箱和拆箱都是针对基元类型值。


如果想要调用Spaniel类中而不是Dog类中的一个方法,则必须首先将aDog转换成Spaniel类型。

instanceof运算符检查一个对象转换中左操作数引用的对象转换到右操作数设定的类型是否合法。如果该对象与右操作数类型相同,或者是其任意子类型,则结果为true。instance容忍子类型。getClass()则不容忍。

is a  派生
has a 设计成成员

可能想要阻止一个子类覆盖你类中的某个方法。当有这种需求时,只需要简单的将该方法声明为final。

接口本质上是一系列相关的常量以及(或)抽象方法的集合,在大多数情况它只包含方法


在一个类中实现一个接口方法所使用的修饰符必须不能比抽象方法声明中隐式的修饰符限制性更大,而且不能比public限制更少。


1.        如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
2.        如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。


如果两个或者更多的超接口声明了具有相同签名的方法(即名称和自变量都完全一样),则该方法必须在所有声明它的类中都返回同样的类型。如果没有编译器就会报错。这是因为对于两个签名一样的方法,一个类无法将它们都实现。如果该方法在所有声明它的接口中都声明为一样的形式,则在一个类中的定义就可以满足所有的接口。

接口的作用:最重要的是用于实现多态,然后是实现多重继承,最后是用来封装常量。此外还被用于封装Java之外的对象(如物理设备)。


Error及其子类表示未检查异常,不期望进行处理(也无法处理),Exception及其子类则几乎都表示已检查异常,期待处理


Java的流包括二进制流和字符流


Unicode与本地字符集之间的映射,因为unicode虽然能表示所有的字符,但是它不便于传输,所以要使用便于传输的编码方式将其进行转换。

BufferedInputStream中的默认缓冲区大小是8192Byte

一个类中有签名相同的多个方法称为重载,
父类的某个方法在子类中用签名相同的方法替代称为覆盖
用接口为规范派生出多个派生类称为多态

 

如果createDirectories()方法因为某些原因失败,则错误发生前某些父目录已经被创建。


newOutputStream()写二进制数据
newBufferedWriter()写字符数据
newByteChannel()字符和二进制数据都能写

写文件时使用的字符集决定了每个Unicode字符对应的写入字节而且当读取一个文件时必须使用写文件时用到的字符集。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值