数据类型和类型检查

一、数据类型

1、基本类型

2、对象类型

注:基本类型以小写字母开头;对象类型以大写字母开头


二、动态检查和静态检查

1、静态检查

静态检查在编译时检查错误;

静态检查可以检查语法的错误:如额外的标点符号或者虚假词语。

静态检查函数的名称,参数的数量,参数的类型,错误的返回类型。

2、动态检查

动态检查在运行后检查错误;

非法的参数值:例如x/y 当y等于零的时候,才发生错误,所以这不是一个静态错误而是一个动态错误。

不可表示的返回值,即特定的返回值无法在类型中表示时。

赋值超出范围。

调用空对象的方法。

3、静态与动态检查的比较

 静态检查往往是关于类型的,与变量具有的特定值无关的错误。

 静态类型保证了一个变量会从该集合中获得一些值,但是我们直到运行时才知道它具有哪个值。

 所以如果错误只会被某些值引起,比如被零除或索引超出范围,那么编译器不会引发关于它的静态错误。

 相比之下,动态检查往往是由特定值引起的错误。

三、Mutable和Immutable

1、对象是不可变的:一旦创建,它们总是表示相同的值。

字符串是不可变类型的一个例子。

一个String对象总是表示相同的字符串

由于String是不可变的,一旦创建,String对象始终具有相同的值。

要将某些内容添加到字符串的末尾,必须创建一个新的String对象。

2、对象是可变的:它们有改变对象值的方法。

StringBuilder是一个可变类型的例子。

它有方法删除部分字符串,插入或替换角色等。

该类具有更改对象值的方法,而不仅仅是返回新值。

3、只有一个对象的引用时,可变性和不变性之间的区别并不重要。但是,当对象存在其他引用时,它们的行为方式会有很大差异。例如,当另一个变量t指向与s相同的String对象,而另一个变量tb指向与sb相同的StringBuilder时,则不可变对象和可变对象之的区别变得更加明显。

4、immutable传递变量的时候传递的是值,而mutable传递的是引用

四、防御式拷贝



五、Snapshot diagram

1、原始值由裸常量表示。 传入的箭头是对来自变量或对象字段的值的引用


2、对象值是由其类型标记的圆。 当我们想要显示更多细节时,我们在其中写入字段名称,箭头指向它们的值。 有关更详细的信息,这些字段可以包含它们的声明类型。 有些人更喜欢写x:int而不是int x,但都可以。


3、不变对象(它们的设计者打算始终表示相同的值)在快照图中用双边框表示,就像我们图中的String对象一样。


4、不可变引用(最终)由双箭头表示。


六、数组及其他的数据类型

1、数组

int []a=new int [100]

2、list

List<Integer> list = new ArrayList<Integer>() 

索引:list.get(2); 赋值:list.set(2,0);长度:list.size()。

list是一个界面。

3、set

set是零个或多个唯一对象的无序集合。

s1.contains(e)测试集合是否包含元素。

- s1.containsAll(s2)测试是否s1s2。

- s1.removeAll(s2)从s1中删除s2。

set是一个抽象的接口


4、map

一个 地图 类似于字典(键值)

map.put(key,val) 添加映射键→val

map.get(key)    获取钥匙的价值

map.containsKey(key) 测试地图是否有密钥

map.remove(key) 删除一个映射

 地图 是一个抽象界面

七、空引用

在Java中,对对象和数组的引用也可以采用特殊值Null,这意味着引用不指向对象。空值是Java类型系统中的一个不幸的漏洞。

原始元素不能为空,编译器将拒绝具有静态错误的此类尝试:

                     int size = null; //非法

可以将null分配给任何非原始变量,并且编译器在编译时高兴地接受这些代码。但是你会在运行时遇到错误,因为你无法调用任何方法或使用带有这些引用之一的任何字段(throwsNullPointerExceptions):

String name = null; name.length(); 

int [] points = null; points.length;

null与空字符串“”或空数组不同。

像List这样的非原语和集合的数组可能没有null,但包含null作为值


只要有人尝试使用集合的内容,这些空值可能会导致错误


空值是麻烦和不安全的,所以建议将它们从设计词汇中删除。

空值在参数和返回值中被隐式禁止




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值