Chapter 3: Abstract Data Type (ADT) and Object-Oriented Programming (OOP)

Data type in programming languages
primitive types(基本数据类型)
– int (for integers like 5 and -200, but limited to the range ± 2^31, or roughly ± 2 billion)
– long (for larger integers up to ± 2^63)
– boolean (for true or false)
– double (for floating-point numbers, which represent a subset of the real numbers)
– char (for single characters like ‘A’ and ‘$’ )
object types(对象数据类型)
String represents a sequence of characters
BigInteger represents an integer of arbitrary size.
在这里插入图片描述
将基本数据类型封装为对象 – Boolean, Integer, Short, Long, Character, Float, Double
Canonical use case is collections
尽可能少用
语言会自动进行转换 :list.add(Integer.valueOf(1)); //自动完成的操作

String concatenation (+) – String text = “hello” + " world"; – text = text + " number " + 5; // text = “hello world number 5”
Static Typing vs. Dynamic Typing
Java is a statically-typed language.
在编译时需要知道所有变量的类型,编译器可以推断所有表达式的 类型


public static int sum(List<Integer> list) {
    int sum = 0;
    for (Integer integer : list) {
      sum += integer;
    }
    return sum;
  }
  
  public static int mysum(List<Integer> list) {
    for(int i=0 ;i<list.size();i++) {
      list.set(i, Math.abs(list.get(i)));
    }
    return sum(list);
  }
  
  public static void main(String[] args) {
    List<Integer> mydata = Arrays.asList(-5,-3,-2);
    System.out.println(mysum(mydata));
    System.out.println(sum(mydata));
    //输出10 10 
  }

可变和不可变的例子
You should never use Date ! – Use one of the classes from package java.time : LocalDateTime , Instant , etc. – All guarantee in their specifications that they are immutable .
不变性可能比可变性更有效,因为不可变类型永远不需要防御性地复制。

在这里插入图片描述
Snapshot diagrams
为了理解一些微妙的问题,我们可以画出运行时发生了什么,这对我们很有用。
快照图表示运行时程序的内部状态——堆栈(正在进行的方法及其局部变量)和堆(当前存在的对象)。为什么使用快照图?
通过图片互相交谈。
说明基本类型与对象类型、不可变值与不可变引用、指针混叠、堆栈与堆、抽象与具体表示等概念。
帮助解释你的团队项目的设计(和你的助教)。
为以后课程中更丰富的设计符号铺路
原始值——原始值由裸常量表示。传入箭头是对变量或对象字段的值的引用。
对象值是按其类型标记的圆。当我们想要显示更多的细节时,我们在其中写入字段名,并用箭头指向它们的值。对于更详细的信息,字段可以包括它们声明的类型。有些人喜欢写x:int而不是int x,但两者都可以。
在这里插入图片描述
不可变对象(由它们的设计者设计,以始终表示相同的值)在快照图中由双边框表示,就像图中的字符串对象一样。
这两个快照图看起来非常不同,这很好:可变性和不可变性之间的区别将在确保代码不受bug影响方面发挥重要作用。

Java还为我们提供了不可变的引用:只分配一次且从不重新分配的变量。要使引用不可变,请使用关键字final声明它。如果Java编译器不相信您的最终变量只会在运行时分配一次,那么它将产生编译器错误。因此final为不可变引用提供了一个静态检查。在快照图中,不可变引用(final)用双箭头表示。
我们可以有一个对可变值(例如:final StringBuilder sb)的不可变引用,即使我们指向同一个对象,该值也可以更改, 指向可变值的不可变引用( 引用不可变,值可变)
我们还可以有一个对不可变值的可变引用(如String s),其中变量的值可以更改,因为它可以重新指向另一个对象。指向不可变值的可变引用(值 不可变,引用可变)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值