Java基础知识(一)

1.Java中的数据类型

1.1.基本数据类型(primitive type)

包括:int, long, char, byte, short, float, double, boolean。
只有值,没有ID。是**不可变(immutable)**的。在栈中分配内存。

1.2.对象数据类型(object type)

例如:String,BigInteger,Classes,interfaces,arrays,enums,annotations。既有值,也有ID。**一些可变(mutable),一些不可变(immutable)。**在堆中分配内存。

1.3.对象类型形成层次(Hierarchy of object types)

所有对象的根(root)都是object。
除了object以外的所有类都有一个父母类,用"extends"表示继承关系。如果没有写出"entends"的话,就默认继承自objects。
新类从父母类中继承所有可视的字段和方法。并且可以将方法重载以改变方法的行为。

2.静态类型和动态类型检查

静态类型检查是对“类型匹配”的检查。
动态类型检查是对“特殊值”的检查。

2.1.静态类型检查

Java是一个静态类型语言。
在编译阶段所有变量的类型都被声明,并且编译器能够分析出所有表达式的类型。所以例如在Eclipse中,在你敲代码的过程中编译器会帮助你进行类型检查。(即在静态类型检查在编译阶段进行)
静态类型检查可在编译阶段发现错误,可避免将错误带到运行阶段。
静态检查有很多,例如:语法错误,函数名错误,参数数目错误,参数类型错误,返回值类型错误。

2.2.动态类型检查

在程序运行的过程中,bug会自动被发现。这一过程为动态类型检查。
动态检查有很多。例如:非法的参数值,非法的返回值,越界,空指针。

静态类型检查 > 动态类型检查 > 无检查

3.可变性不可不变性(mutability and immutability)

3.1.改变变量和变量的值

改变变量:将该变量指向另一个值的存储空间。
改变变量的值:将该变量当前指向的值的存储空间写入一个新的值。

3.2.不变性(immutability)

不变数据类型一旦被创建,就不能改变。不变的引用类型可以改变存储区域,但是不可以改变值。如果用final关键字的话,即使是引用类型,也可以是不变的。
所以,尽量使用final变量作为方法的输入参数,作为局部变量。
注:
1.final类无法派生子类。
2.final变量无法改变值或引用。
3.final方法无法被子类重载。

不变对象:一旦被创建,始终指向同一个值或引用。
可变对象:拥有方法可以修改自己的值或引用。

3.3.可变和不可变的区别

当只有一个引用指向该值时,没有区别,但是当多个引用同时指向该值时,就有差异了。

可变性的好处:使用不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收)。可变类型最小化拷贝以提高效率。也可以在多个模块之间共享数据(相当于全局变量)。但是与此同时,也有全局变量的坏处。

不可变类型更加安全,在其他质量指标上表现更好。因为可变类型有可能改变参数的值等等具有不安全因素的可能。

3.4.可变类型的安全操作方法

安全的使用可变类型:局部变量,不会涉及共享。或只有一个引用。如果有多个引用,可变类型就变得非常不安全。这时就要用到防御式拷贝。
通过防御式拷贝,返回一个new对象。(可能造成大量的内存浪费)

4.复杂的数据类型(Arrays and Collections)

4.1.类型简介

1.数组是一个定长的一个类型的集合。
2.List是一个可变长度的一个类型的集合。List是一个接口(interface),且在List中的必须是对象。
3.Set是一些对象的没有顺序的集合。一个对象在一个集合中不能多次出现。
4.Map的每一个关键字自带一个值(value)。

4.2.迭代器(Iterator)

迭代器是一个遍历Collections中的每一个元素,并且一个个返回的一个对象。经常借用for(…:…)来使用迭代器。
注:迭代器是可变类型的。且当要遍历一个Collections而且要删除一些特定的元素的时候,只能使用迭代器专属的remove()。否则就会出错。

Collections的继承类都是可变类型(mutable)的。但是却可是创造一个对象的不可变类型的引用
例如:
Collections.unmodifiableList
Collections.unmodifiableSet
Collections.unmodifiableMap
这种包装器得到的结果是不可变的,只能看。这种不可变类型是在运行阶段获得的,所以无法进行静态检查

总结:

1.静态检查:在编译阶段(运行之前)进行,防止类型匹配错误以及一些其他bugs。 静态检查中当一个字段被改变时,其他需要这个部分的字段也会显示错误,这使程序员编写代码变得很容易。
2.可变类型在表现和方便的这些方面表现很突出,但是当多个引用同时指向这个值的时候,会有bug的风险。所以设计原则的关键就是:尽可能地使用不可变类型的对象或引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值