┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

基本数据类型 && 对象数据类型

基本数据类型(int char long) 在栈中分配内存,不可变

对象数据类型(String BigInteger) 在堆中分配内存,有些可变有些不可变

    String a = "a";
String b = "a";
System.out.println(a == b); // true String a = "a";
String b = new String("a");
System.out.println(a == b); // false
    String a = "a";
String b = new String("a");
System.out.println(a.equals(b)); // true

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

【快照图 snapshot diagram】

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

静态类型语言:编译时检查(编译器自动报的错)——语法错误 函数参数错误 final变量被更改【类型相关】

动态类型语言:运行时检查 ——非法的参数值(如除0) 非法的返回值 空指针 【值相关】

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

final关键字:

final类:无法产生子类

final变量:无法改变值/引用

final方法:无法被子类重写

必须显式的初始化一次(在if和try啥的里初始化都布星)

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

mutable && immutable

防御性拷贝

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

spec

一个完整的方法 == 规约spec + 实现implementation

spec由以下构成:如果前置条件满足了,后置条件必须满足,如果不满足则抛出异常

  ·前置条件(precondition)

  ·后置条件(postcondition)

  ·异常行为(exception)

规约的强度:

如果规约的强度 S2>=S1,就可以用S2代替S1,一个更强的规约包括更轻松的前置条件和更严格的后置条件;越强的规约,意味着实现者(implementor)的自由度和责任越重,而客户(client)的责任越轻。

  • S2的前置条件更弱
  • S2的后置条件更强

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

行为等价性:站在客户的角度看两个方法是否可以互换

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

抽象数据类型(ADT)

Creator(构造器):Integer.valueOf( )

Producer(生产器):String.concat( ) -- 接受同类型

Observer(观察器):List.size( )

Mutator(变值器):List.add( )

区分:

谢谢小姐姐QWQ

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

表示独立性:用户使用ADT时无需考虑内部实现,ADT内部的变化不应影响外部spec和客户端

    (感觉是改ADT内部的代码 不影响用户方的情况)

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

不变量(Invariants)与表示泄露

get返回值的时候

以及创建的时候都会出现

/** @return a list of 24 inspiring tweets, one per hour today */
public static List<Tweet> tweetEveryHourToday () {
List<Tweet> list = new ArrayList<Tweet>();
Date date = new Date();
for (int i = 0; i < 24; i++) {
date.setHours(i);
list.add(new Tweet("rbmllr", "keep it up! you can do it", date));
}
return list;
}

24个date指向了同一时刻

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

抽象函数(AF)表示不变量(RI)

AF:计算机中数据到现实含义的映射

RI:数据是否合法,通过RI设计checkRep,计算机中数据到boolean的映射

rep:

用注释表示

// Immutable type representing a tweet.
public class Tweet { private final String author;
private final String text;
private final Date timestamp; // Rep invariant:
// author is a Twitter username (a nonempty string of letters, digits, underscores)
// text.length <= 140
// Abstraction function:
// AF(author, text, timestamp) = a tweet posted by author, with content text,
// at time timestamp
// Safety from rep exposure:
// All fields are private;
// author and text are Strings, so are guaranteed immutable;
// timestamp is a mutable Date, so Tweet() constructor and getTimestamp()
// make defensive copies to avoid sharing the rep's Date object with clients. // Operations (specs and method bodies omitted to save space)
public Tweet(String author, String text, Date timestamp) { ... }
public String getAuthor() { ... }
public String getText() { ... }
public Date getTimestamp() { ... }
}

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

【对象】 状态(fields)+ 行为(method)

【类】一类对象的状态 + 行为

类成员变量(class variable)又叫静态变量;类方法(class method)又叫静态方法

实例变量(instance variable)和实例方法(instance method)是不用static形容的实例和方法

类方法和实例方法的区别:类方法不能访问实例变量和实例方法

类创建第一个对象时,实例方法才分配入口地址,再创建其他对象时不再分配了,也就是说,方法的入口地址被所有对象共享

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【接口】interface -> implements

一个接口可以扩展其他接口,一个类可以实现多个接口;一个接口也可以有多重实现

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

举例:(静态检查使用接口类型时,只使用接口中定义的方法)

若类A实现了接口B 如果在客户端里的一个实例b的类型是B 就算它的真正类别是A  ->  B b = new A();

也不能使用A中定义了但B中没有定义的方法

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【抽象类】abstract - 父类知道有这个功能,但父类不知道怎么写,要写多少个功能适合,所以交给子类写

抽象类不能实例化对象,必须被继承才能被使用

单继承,多接口

如果一个类包含抽象方法,那它一定是抽象类

任何子类必须重写父类的抽象方法,或将自身定义为抽象类

构造方法、static方法不能是抽象方法

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【继承和重写】

重写——返回值和形参都不变,子类可以根据自己的需要实现父类的方法

重写不能抛出新的异常

访问权限不能比父类低,如父类是private,子类不能是protected

父类的成员方法只能被子类重写

final方法不能重写,也不能继承

static方法不能重写,但能再次声明

构造方法不能重写

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【多态与重载】

多态——同一行为的不同表现形式

重载的方法参数列表必须不同,返回值可以都不同,可以改变访问修饰符,可以声明新的异常

在编译时根据参数列表选择用哪个重载版本

public class Pair<E> {
private final E first, second;
public Pair(E first, E second) {
this.first = first;
this.second = second;
}
public E first() {
return first;
}
public E second() {
return second;
}
}
Client:
Pair<String> p = new Pair<>("Hello", "world");
String result = p.first();

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

重载 && 重写

搬截图QWQ 谢谢大佬

理解:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【泛型】

泛型方法可以接受不同类型的参数

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉ ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

【等价性】 -> "==" || equals()

equals判定为相同, hashCode一定相同。equals判定为不同,hashCode不一定不同

equals中要考虑 类.equals(Object)的情况,直接比会调用Object中的equals,所以在类中重写equals时要判一下参数的类型,然后强转

重载equals一定要重载hashCode,必须重载equals(Object object)

可变类不应重载equals和hashCode

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉

可变类型的等价性 -> 观察等价性 行为等价性

注:当用可变类型作为集合的元素时,改变类型值时会改变hashCode,使得contains出问题

因此对于可变类型,实现行为等价性,只有指向相同空间的Object才是相等的

SC || Chapter 3的更多相关文章

  1. SC || Chapter 8

    栈:方法调用和局部变量的存储位置,保存基本类型 堆:在一块内存里分为多个小块,每块包含 一个对象,或者未被占用

  2. SC || Chapter 5 复习向

    可复用性 ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 行为子结构 对于父子的继承关系的要求: ·子类可以增加方法,但不可以删 ·子类需实现抽象类型中未实现的方法 ·子类重写(override)的方法必须 ...

  3. SC || Chapter 1

    第一章的重中之重就是这张图吧 (具体参见笔记) ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 区分哪些属性是外部的(面向用户 ...

  4. Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...

  5. Chapter 3. Programming with RDDs

     Programming with RDDs This chapter introduces Spark's core abstraction for working with data, the r ...

  6. 关于一道数据库例题的解析。为什么σ age>22 (πS_ID,SCORE (SC) ) 选项是错的?

    本人大二学子.近段时间在做数据库复习题的时候遇到一道题,如下. 有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是( ) . ⅰ. πS ...

  7. Modern C++ CHAPTER 2(读书笔记)

    CHAPTER 2 Recipe 2-1. Initializing Variables Recipe 2-2. Initializing Objects with Initializer Lists ...

  8. MVP的PV模式与SC模式

    MVC是现今挺被推崇的一种架构模式,而MVP在MVC的基础对视图与模型上再解耦,使结构和各自的功能也有所改变.在去年鄙人也尝试了一下使用MVP做了一个小Demo,作为了MVC的一个变体,MVP还分了两 ...

  9. 50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

    UPDATE tblscore SET tblscore.Score= ( -- 这里开始算叶平的平均值 SELECT AVG(tt.aa) FROM ( SELECT tblscore.Score ...

随机推荐

  1. MySQL8.0.16新特性:The Communication Protocol In Group Replication

    MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...

  2. Codeforces86D【莫队算法】

    题意: 给一个序列和一些区间,每次询问对区间所有不同的数,求每个不同的出现的个数的平方*其值的总和 2*2*1+1*1*2 思路: 裸的莫队算法. 补: 1.cmp写错. 2.LL运算不会进行转化. ...

  3. 计算机视觉(CV)前沿国际国内期刊与会议

    计算机视觉(CV)前沿国际国内期刊与会议1.国际会议 2.国际期刊 3.国内期刊 4.神经网络 5.CV 6.数字图象 7.教育资源,大学 8.常见问题 1. 国际会议现在,国际上计算机视觉方面的三大 ...

  4. anaconda3安装caffe

    使用anaconda3安装caffe踩坑无数次,放弃治疗,直接在~/.bashrc中删除anaconda的路径,备份一下等要用的时候再写上,用默认的python2.7系统环境安装 要使用人脸检测项目中 ...

  5. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  6. 【TIDB】4、业界使用情况

    一.小米 1.背景 小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘.由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快, 每天的读写量 ...

  7. IDEA 小技巧之书签与收藏

    原文地址:IDEA 小技巧之书签与收藏 最近翻阅 Spring 源码,由于源码调用链路很长,等看了十几类方法之后,想看前面调用方法就很不方便,需要查找历史的查看记录.还有时候看着看着就忘了中间某个方法 ...

  8. Spring Cloud与Duddo比较(非原创)

    文章大纲 一.Spring Cloud与Duddo背景介绍二.Spring Cloud与Duddo比较三.参考文章   一.Spring Cloud与Duddo背景介绍   国内技术人员喜欢拿 Dub ...

  9. jquery中的$(this)和this

    在jquery中,存在$(this)和this. 其中常见的是出现在事件处理函数中. 首先先来理解jquery对象. jquery对象其实就是DOM对象的集合. 比如:$('a')[0];------ ...

  10. 13.组合查询--SQL

    利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...