Java编程思想之读书笔记系列二 --- 第二、三章 --- 一切都是对象,操作符

这是Java编程思想读书笔记的第二篇,下面是主要内容。

  • Java和C++都是杂合/混合型语言,但是相比之下,Java是一种更纯粹的面向对象程序设计语言
  • 对象与引用:操纵对象的标识符实际上是对象的一个引用;有引用,不一定有对象与它相关联,比如String s
  • 程序运行时,有5个不同的地方可以存储数据:
    • 寄存器:C和C++允许程序猿向编译器建议寄存器的分配方式
    • 堆栈:创建程序时,Java系统必须知道堆栈内所有项的确切生命周期,以上下移动指针;故灵活性较差
    • :Java对象存储区域,分配和释放资源较慢,但是灵活性高
    • 常量存储:常量值通常直接存放在程序代码内部
    • 非RAM存储:如果数据完全存活于程序之外,在程序没有运行时也可以存在。两个基本例子是流对象和持久化对象流对象,对象转化成字节流,通常发送给另一台机器;持久化对象,对象被存放于磁盘上。
  • Java当中有一系列经常用到的类型,所以它们被区别对待,称为“基本类型”。不通过new来创建变量,而是创建一个并非是引用的自动变量。这个变量直接存储值,存放在堆栈中,而不是
  • Java基本类型存储空间大小的不变性
  • 高精度数字:BigIntegerBigDecimal
  • Java是一种自由格式(free-form)的语言,所以空格、换行符都不会影响程序的执行结果
  • 当变量作为类的成员时,Java才确保给定其默认值,以确保那些是基本数据类型的成员变量得到初始化
  • Java采用了一种全新的方法来避免名字冲突的问题,即程序猿使用自己的Internet域名(即包名)
  • Java消除了所谓的“向前引用”问题,即即使一个类在文件后面才被定义,也可以使用这个类(原来还有这么一个说法,向前引用)
  • static方法常常用来做“牧羊人”的角色,负责看护与其属于同一类型的实例群
  • javadoc实现了文档与代码的链接,是用于提取代码注释的工具。它采用了Java编译器的某些技术,查找程序内的特殊注释标签。它不仅解析由这些标签标记的信息,也将毗邻这些注释的类名或方法名抽取出来
  • 静态导入:import static ***
  • 通过在创建Random对象时提供种子(用于随机数生成器的初始化值,随机数生成器对于特定的种子值总是产生相同的随机数序列),就可以在每一次执行过程中生成相同的随机数
  • 一元加号的作用仅仅是将较小类型的操作数提升为int ???
  • 前缀递增递减是先计算,后产生值;后缀递增递减是先产生值,后计算
  • equals方法的默认行为是比较对象的引用。所以在我们自己定义的类当中,除非我们覆盖此方法,否则自定义类调用equals方法比较的就是引用,而不是值
  • 如果在应该用String的地方使用了布尔值,布尔值会自动转化成合适的文本形式
  • 指数计数法,1.49e-43f(e或者E都一样),f表示是float,默认是double
  • 我们将布尔类型作为一种单比特值对待
  • 移位操作符:左移位操作符<<,有符号右移位操作符>>,无符号右移位操作符>>>
  • 移位可与等号组合使用,但在使用无符号右移位结合赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果(P50页)??
答:因为截断以后所取部分都是1,所以会返回-1。实例代码如下:
public   class   URShift {
     public   static   void   main(String[] args){
         int   i = - 1 ;
         System.out.println(Integer.toBinaryString(i));
         i >>>=  10 ;
         System.out.println(Integer.toBinaryString(i));
         long   l = - 1 ;
         System.out.println(Long.toBinaryString(l));
         l >>>=  10 ;
         System.out.println(Long.toBinaryString(l));
         short   s = - 1 ;
         System.out.println(Integer.toBinaryString(s));
         s >>>=  10 ;
         System.out.println(Integer.toBinaryString(s));
         s = - 1 ;
         System.out.println(Integer.toBinaryString(s));
         System.out.println(Integer.toBinaryString(s >>>  10 ));
         System.out.println(s); //并没有改变s,所以打出来s还是-1
         System.out.println(s >>>  10 ); //s是4194303
     }
}
  • 三元操作符:boolean-exp? value0: value1;
  • 窄化转换(narrowing conversion)和宽化转换(widening conversion)。布尔型不允许进行任何类型的转换处理
  • 在将float或者double转为int时,总是执行截尾;要想得到舍入的结果,则需要使用java.lang.Math中的round()方法
  • 对基本数据类型执行算术运算或按位运算,只要类型比int小,这些值会自动转换成int

以上就是第二章和第三章的读书笔记,如果有错误的地方或者理解不对的地方,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值