软件构造第四次课程笔记
1.程序语言中的数据类型
1.定义
数据类型:是一组值,以及可以对这些值执行的操作
变量:本地命名,用特定数据类型定义,存满足类型规约的一个值
2.Java中的数据类型
基本数据类型(类型名字均为小写字母):int, long,bolean,double,char
对象数据类型(类型名字以大写字母开头):String,BigInteger(代表任意大小integer)
3.对象类型形成层次结构
I.所有类除了object类均有父类,只能单亲继承。
II.如果不指明类的继承关系,则默认继承自 object类,因为object类是所有类的祖先。
III.类是其所有超类的实例,可从其超类继承可见(public,protected)字段方法,可重写超类的方法改变行为
※:方法重写时,子类无法继承父类的private方法,如果子类修饰符比父类修饰符权限低也不行
例如,包A下有fu,zi,demo三个class,zi继承fu,demo与两者无继承关系,在fu里有4个方法,分别用private,默认,protected,public修饰,那么在fu本类里,可以访问这4个方法,在zi里和在demo里可以访问后三种,在包B中有zi类与demo类,zi继承包A的fu,那么包B的zi可以访问后两种,包B的demo只能访问最后一种方法。
4.基本数据类型与对象数据类型 对比如下(尤其注意第二、三点)
5.基本数据类型包装 (如int–>Integer)
通常在定义集合类型时使用,一般情况避免使用,一般可以在包装数据类型和非包装数据类型间自动转换
6.运算
作为前中后缀运算符 a+b int×int->int
作为对象方法 bigint1.add(bigint2) BigInteger×BigInteger->BigInteger
作为函数 Math.sin(theta) sin:double->double
※ 重载:同样的操作名用于不同数据类型 如加减乘除,方法也可重载
2.静态/动态数据类型检查
1.静态/动态typing
Java是一种静态类型的语言,在编译阶段进行类型检查。
所有变量的类型在编译时(在程序之前)都是已知的,因此编译器可以推断所有表达式的类型。
如果a和b声明为int,则编译器的结论是a+b同时也是 int。
※ 像Python这样的动态类型语言中,这种检查被推迟到运行时。
2.静态/动态检查
A.静态检查:在程序运行前发现bug,在编译阶段发现错误,提高程序正确性健壮性
可检查出语法、类名函数名、参数数目、参数类型、返回值类型错误
关于类型的检查,不考虑值
B.动态检查:程序执行时发现bug
可检查出非法参数值、返回值、越界、空指针
关于值的检查,关注由特殊值所产生的错