Java中的数据类型与类型检验

        浅谈一下对软件构造中Java的数据类型与类型检验的理解


一、数据类型

        Java中的数据类型包括基本数据类型和引用数据类型:

1. 基本数据类型

        Java中的基本数据类型包括:byte、short、int、long、float、double、char和boolean。它们都是原始类型,被存储在栈中,不需要进行垃圾回收。

2. 引用数据类型

        Java中的引用数据类型包括:类、接口、数组、枚举和注解等。它们都是对象,被存储在堆中,需要进行垃圾回收。引用数据类型可以分为类类型(class type)和接口类型(interface type),类类型也包括普通类(class)、抽象类(abstract class)、枚举(enum)和注解(annotation)。

        同时,Java中每个基本数据类型都对应着一个包装类,包括:

  • Boolean对应boolean
  • Byte对应byte
  • Short对应short
  • Integer对应int
  • Long对应long
  • Float对应float
  • Double对应double
  • Character对应char

        包装类的作用主要有两个:一是将基本数据类型转换为对象,便于在Java中使用面向对象编程的方式,二是提供了一些常用的方法,例如字符串转换、数值比较等。

3.对象层次结构

        在Java中,所有的对象都继承自Object类,形成一个继承层次结构。

        具体来说,所有的Java类都是Object类的子类,因此每个类都从Object类继承了许多方法。如果一个类没有指定父类,那么它默认继承自Object类。

        在Object类之上还有一个顶级父类,叫做Class类。Class类表示Java程序中的所有类和接口的元信息,可以通过反射机制获得。

        除此之外,像String、Integer、Long、Double等常用的类都在继承层次结构中占据着特殊的位置。例如,String类和Array类都是final类,不可被继承;而Integer、Long和Double这些包装类都继承自Number类。

 4.重载(overload)

        Java中的方法重载(Overloading)指的是在一个类中定义多个同名但参数列表不同的方法。Java编译器会根据实参的类型、数量和顺序来确定应该调用哪个重载方法。

方法重载的规则如下:

  • 方法的参数列表必须不同(参数的类型、数量或顺序不同均可);
  • 方法的返回值类型可以相同也可以不同;
  • 方法的访问修饰符可以相同也可以不同;
  • 方法的异常类型可以相同也可以不同;
  • 重载方法必须在同一个类或者其子类中。

下面是一个方法重载的例子:

public class OverloadDemo {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
    
    public String add(String a, String b) {
        return a + b;
    }
}

        在该例子中,add方法被重载了三次,分别是传入两个int型参数、两个double型参数和两个String型参数。当我们调用这个方法时,Java编译器会根据实参的类型来选择合适的方法。例如:

OverloadDemo overload = new OverloadDemo();
int result1 = overload.add(1, 2);  // 调用add(int, int)
double result2 = overload.add(1.1, 2.2);  // 调用add(double, double)
String result3 = overload.add("Hello", " world!");  // 调用add(String, String)

二、类型检验

        Java中的类型检验主要有两种方式:编译时检验(静态检验)和运行时检验(动态检验)。

        静态检验指的是Java编译器在编译Java代码时进行类型检查,确保程序中的类型匹配和兼容性。这样可以减少程序中的类型错误,提高程序的健壮性和可靠性。编译时类型检查通常会导致编译错误,在编译之前就需要解决这些错误。

        动态检验指的是程序在运行时进行类型检查,主要是通过instanceof运算符来判断对象是否是某个类的实例。运行时类型检查通常用于处理输入数据的类型不确定、需要根据具体情况进行处理的情况。它可以保护程序避免类型错误产生的异常,提高程序的容错能力。在运行时检查,主要检查值(非法参数值、非法返回值、越界、空指针)

三、可变性与不可变性

        该部分在“Java中的‘RI’与‘RI’”中有更为详细的解释

四、Snapshot diagram

        Java中的Snapshot diagram(快照图)是一种用于描述对象状态的UML图形。它类似于类图,但更加注重状态和行为,通过捕捉系统中某个时刻的对象状态,来展示系统的行为。

        快照图是通过沿用类图的表示方式,增加状态信息和对象执行某些操作的顺序图形成的。它展示了对象的状态,而不是对象的行为。它通常用于系统调试和测试中,可以帮助开发人员识别问题源和解决方案。

        在Java中使用快照图,可以使用一些工具来自动生成快照图,例如Eclipse和IntelliJ IDEA等IDE都提供了快照图的生成工具。开发人员也可以手动绘制快照图。

 下面是一个简单的Java快照图示例:

五、数组和集合

        Java中的数组和集合是两种常用的数据结构,用于存储和访问多个元素。它们有一些共同点,但也有一些区别。

        数组是一组相同类型的元素的集合,使用时需要指定数组的大小,一旦创建后,数组大小就不能改变。数组可以用来存储各种类型的元素,例如整数、浮点数、字符等,也可以用来存储对象。数组的元素可以通过索引位置进行访问和修改,索引从0开始。Java中的数组用[]来表示,例如int[] arr = {1, 2, 3, 4, 5};。

        集合是一组元素的集合,不需要指定集合大小,并且可以动态的添加、删除和修改元素。集合有多种不同的实现方式,其中List、Set和Map是最常用的。List用于存储一组有序的元素,可以有重复元素,常用的实现类有ArrayList和LinkedList;Set用于存储一组无序的元素,不能有重复元素,常用的实现类有HashSet和TreeSet;Map用于将一组键值对映射到一组相应的值,常用的实现类有HashMap和TreeMap。Java中的集合使用泛型来保证类型安全,例如List<String> list = new ArrayList<String>();。

下面是一些数组和集合的操作示例:

创建数组:

int[] arr = {1, 2, 3, 4, 5};
String[] strs = {"Java", "Python", "C++"};
Object[] objs = {1, "Java", new Object()};

创建列表:

List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Python");
list.add("C++");

创建集合:

Set<String> set = new HashSet<String>();
set.add("Java");
set.add("Python");
set.add("C++");

遍历数组:

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

遍历列表:

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

遍历集合:

for (String str : set) {
    System.out.println(str);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值