17、Java编程中的对象类与文件输入输出

Java编程中的对象类与文件输入输出

1. Object类的探索

在Java编程里,理解面向对象编程的实现方式至关重要,而Object类在其中扮演着关键角色。下面我们通过一个简单的程序来开启对Object类的学习。

package theobjectclass; 

public class TheObjectClass { 

    public static void main(String[] args) { 
        MyClass object1 = new MyClass("abcdefg"); 
        MyClass object2 = new MyClass("abcdefg"); 

        object1.MyMethod(); 
        object2.MyMethod(); 

        System.out.println("The objects are the same: " + 
        (object1 == object2)); 
        System.out.println("The objects are the same: " + 
        object1.equals(object2)); 
    } 

} 

这个程序创建了 MyClass 类的两个实例 object1 和 object2 ,接着调用了每个对象的 MyMethod 方法,该方法会打印出对象所包含的值。之后,程序对这两个对象进行了比较。

  • 首先使用比较运算符 == ,它用于检查两个对象是否为同一个对象。显然,这里的 object1 和 object2 是两个独立的实例,所以 object1 == object2 的结果为 false 。
  • 然后使用 equals() 方法进行比较。运行程序后会发现,即使 object1 和 object2 在创建时使用了相同的参数,并且从创建到当前时刻经历了相同的操作, equals() 方法仍然判定它们不相等。

那么, equals() 方法从何而来呢?查看 MyClass 类的定义,并没有发现 equals() 方法。实际上,所有的Java类都继承自一个超类,即位于类继承树顶端的Object类,尽管在代码中没有显式声明。

在Java文档( docs.oracle.com/javase/7/docs/api/java/lang/Object.html )中可以找到Object类的定义:“Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.” 这表明所有Java对象都继承了Object类的方法,其中就包括我们正在探讨的 equals() 方法。

Object类中 equals() 方法的定义比较模糊,它只是表示“Indicates whether some other object is equal to this one.” 这就需要我们程序员根据具体的类来确定“相等”的具体含义。

2. 重写 equals() 方法

重写Object类的方法并不比重写其他超类的方法困难。我们只需声明一个相同的方法,在处理 MyClass 对象时,这个特定的方法就会被调用。需要注意的是, equals() 方法的输入参数是任意对象,而不是 MyClass 对象。因此,在比较输入对象的值与当前 MyClass 对象的值之前,需要确保输入的对象确实是 MyClass 对象。

以下是一些需要直接返回 false 的情况:
1. 如果输入的对象未被实例化,即 null 指针,由于已实例化的 MyClass 对象与 null 不相等,所以直接返回 false 。
2. 检查输入的对象是否为 MyClass 的实例。使用 instanceof 关键字,如果输入对象不是 MyClass 的实例,那么比较就没有意义,直接返回 false 。

以下是重写 equals() 方法后的 MyClass 类代码:

package theobjectclass; 

public class MyClass { 
    public String value; 
    public MyClass(String value) 
    { 
         this.value = value; 
         System.out.println
         ("A MyClass object was created with value:" + value); 
     } 
     public void MyMethod() 
     { 
        System.out.println
        ("MyMethod was called on a MyClass object with value: " + 
        value); 
      }  

      @Override 
      public boolean equals(Object obj) 
      { 
         if(obj == null) 
           return false; 

         if(!(obj instanceof MyClass)) 
         return false; 

         return value.equals(((MyClass)obj).value); 

       } 
} 

运行这个程序,会发现 object1 和 object2 被判定为相等。

3. Object类的其他方法

Object类还声明了许多其他方法,除了 equals() ,还有 hashCode() 和 toString() 等重要方法。

  • hashCode() :该方法应返回一个描述特定对象的整数值。如果两个对象通过 equals() 方法判定为相等,那么它们的 hashCode() 方法应返回相同的整数值;如果不相等,则应返回不同的值。由于实现 hashCode() 方法需要一些复杂的数学运算,这里暂不实现,但建议查看文档了解其工作原理。
  • toString() :这也是Object类的一个方法,任何对象都可以调用该方法。但在自定义对象中,在重写 toString() 方法之前,它可能不会返回有意义的、人类可读的信息。

在学习Java时,建议在编写的小测试类中实现 equals() 和 toString() 方法,这有助于养成良好的编程习惯,并且能让我们像Java一样思考面向对象编程。

4. 基本类

在Java中,字符串比较特殊,虽然可以用双引号直接表示,但主要还是通过 String 类来操作,因为Java并没有提供字符串基本类型。

对于标准的Java基本类型,通常通过基本类型的操作方法来与之交互。每个基本类型都有对应的包装类,如 Integer 、 Character 和 Float 等。一般来说,创建这些包装类的实例并调用其方法的实际用途不大,除非是为了创建自己的类而进行重写。

以下是一个简单的示例:

package the.primitiveclasses; 

public class ThePrimitiveClasses { 

    public static void main(String[] args) { 
        String s = "string"; 

        Character c = 'c'; 
    } 

} 

Character 类的实例提供的方法主要是转换方法,例如 compareTo() 方法,当比较的字符相等时返回 0 ,否则根据字符在整数转换表中的位置返回小于或大于 0 的值。

此外,还可以使用基本类的静态方法来操作基本类型的实例。例如,要判断一个字符是否为小写字母,可以使用 Character 类的静态方法 isLowerCase() :

package the.primitiveclasses; 

public class ThePrimitiveClasses { 

    public static void main(String[] args) { 
        String s = "string"; 

        Character c = 'c'; 
        System.out.println(Character.isLowerCase(c)); 
    } 

} 

当不需要基本类的功能时,建议使用基本类型,如使用 char 而不是 Character 。基本类型的语法高亮和跨语言的通用性使其更便于程序员使用。

5. 文件输入输出概述

文件输入输出(I/O)是现代编程中非常强大的工具,它能让代码中逻辑上分离的实体之间的信息传输变得更加容易。在接下来的内容中,将学习如何使用 FileWriter 、 BufferedWriter 、 FileReader 和 BufferedReader 类来读写数据文件,还会了解 close() 方法和 Scanner 类的使用,以及异常处理和 Serializable 类。

具体将涵盖以下主题:
- 写入数据到文件
- 从文件读取数据
- Serializable 类

6. 写入数据到文件

首先,我们来看看如何使用Java写入文件。下面的程序会生成一个斐波那契数列的前50个数字,并将它们打印到控制台:

package writingtofiles; 

public class WritingToFiles { 
    public static void main(String[] args) { 
        for(long number : FibonacciNumbers()) 
        { 
            System.out.println(number); 
        } 
    } 

    private static long[] FibonacciNumbers() 
    { 
        long[] fibNumbers = new long[50]; 
        fibNumbers[0] = 0; 
        fibNumbers[1] = 1; 
        for(int i = 2; i < 50; i++) 
        { 
            fibNumbers[i] = fibNumbers[i - 1] + fibNumbers[i - 2]; 
        } 
        return fibNumbers; 
    } 
} 

然而,当关闭控制台后,这些数字就会丢失。为了解决这个问题,我们将使用 java.io 库中的 FileWriter 类。

以下是使用 FileWriter 类的步骤:
1. 声明一个 FileWriter 对象,并初始化为 null :

public class WritingToFiles { 
    public static void main(String[] args) { 
        FileWriter out = null;
  1. 实例化 FileWriter 对象。要写入文件,需要知道两件重要的事情:一是要写入的内容,二是要写入的文件名。
public class WritingToFiles { 
    public static void main(String[] args) { 
        FileWriter out = null; 
            out = new FileWriter("out.txt");

此时,NetBeans会提示编译器错误,因为 FileWriter 构造函数可能会抛出 IOException 异常,而代码中没有显式处理该异常。

  1. 使用 try...catch 块来捕获 IOException 异常:
try {
    out = new FileWriter("out.txt");
    for(long number : FibonacciNumbers()) 
    { 
        // System.out.println(number); 
        out.write(String.valueOf(number)); 
    }
} catch(IOException e) 
{ 
    System.err.println("File IO Failed."); 
} 
  1. 由于 FileWriter 的 write 方法不能直接接受 long 类型的参数,所以使用 String.valueOf() 方法将 long 类型的数字转换为字符串:
for(long number : FibonacciNumbers()) 
{ 
    out.write(String.valueOf(number)); 
    // System.out.println(number); 
} 

现在,程序已经具备了将斐波那契数列的前50个数字写入文件的功能。但问题是, out.txt 文件会创建在哪里呢?由于没有提供完整的系统路径,只给出了文件名, FileWriter 类会在运行程序的工作目录下创建文件。要确定工作目录,可以在NetBeans中打开控制台窗口并构建程序,NetBeans会显示文件的创建位置。通常,JAR文件会被编译到 dist 文件夹中,这就是程序的工作目录, out.txt 文件也会创建在这个目录下。

综上所述,通过以上步骤,我们可以将数据成功写入文件,并且了解了如何处理可能出现的异常。在后续的学习中,还将继续探索从文件读取数据以及 Serializable 类的相关内容。

7. 从文件读取数据

在学会了如何将数据写入文件后,接下来我们要学习如何从文件中读取数据。为了实现这个功能,我们将使用 FileReader 和 BufferedReader 类。

以下是一个简单的示例程序,展示了如何从文件中读取数据:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadingFromFiles {
    public static void main(String[] args) {
        BufferedReader in = null;
        try {
            // 创建一个FileReader对象,关联要读取的文件
            FileReader fileReader = new FileReader("out.txt");
            // 使用BufferedReader包装FileReader,提高读取效率
            in = new BufferedReader(fileReader);
            String line;
            // 逐行读取文件内容
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("File reading failed.");
        } finally {
            try {
                if (in != null) {
                    // 关闭BufferedReader
                    in.close();
                }
            } catch (IOException e) {
                System.err.println("Error closing the reader.");
            }
        }
    }
}

上述代码的执行步骤如下:
1. 声明 BufferedReader 对象 :并初始化为 null ,用于后续读取文件内容。
2. 创建 FileReader 对象 :将其与要读取的文件(这里是 out.txt )关联起来。
3. 使用 BufferedReader 包装 FileReader :这样可以提高读取效率,因为 BufferedReader 会在内存中创建一个缓冲区。
4. 逐行读取文件内容 :使用 readLine() 方法,该方法会返回文件中的一行内容,如果到达文件末尾则返回 null 。
5. 异常处理 :使用 try...catch 块捕获可能出现的 IOException 异常,并在发生异常时输出错误信息。
6. 关闭 BufferedReader :在 finally 块中关闭 BufferedReader ,确保无论是否发生异常,资源都能被正确释放。

下面是这个过程的流程图:

graph TD
    A[开始] --> B[声明BufferedReader并初始化为null]
    B --> C[创建FileReader关联文件]
    C --> D[使用BufferedReader包装FileReader]
    D --> E{是否读取到文件末尾}
    E -- 否 --> F[读取一行内容并输出]
    F --> E
    E -- 是 --> G[结束读取]
    G --> H[关闭BufferedReader]
    H --> I[结束]
    C --> J{是否发生IOException}
    J -- 是 --> K[输出错误信息]
    K --> H
    J -- 否 --> E
8. Serializable类

Serializable 类是Java中用于实现对象序列化和反序列化的接口。对象序列化是指将对象的状态转换为字节流,以便可以将其保存到文件、数据库或通过网络传输;反序列化则是将字节流恢复为对象的过程。

以下是一个简单的示例,展示了如何实现对象的序列化和反序列化:

import java.io.*;

// 实现Serializable接口
class MySerializableClass implements Serializable {
    private String data;

    public MySerializableClass(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }
}

public class SerializationExample {
    public static void main(String[] args) {
        // 创建一个可序列化的对象
        MySerializableClass obj = new MySerializableClass("Hello, Serializable!");

        // 序列化对象
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("serialized.obj"))) {
            out.writeObject(obj);
            System.out.println("Object serialized successfully.");
        } catch (IOException e) {
            System.err.println("Serialization failed: " + e.getMessage());
        }

        // 反序列化对象
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("serialized.obj"))) {
            MySerializableClass deserializedObj = (MySerializableClass) in.readObject();
            System.out.println("Object deserialized successfully: " + deserializedObj.getData());
        } catch (IOException | ClassNotFoundException e) {
            System.err.println("Deserialization failed: " + e.getMessage());
        }
    }
}

上述代码的执行步骤如下:
1. 定义可序列化的类 : MySerializableClass 实现了 Serializable 接口,这样该类的对象就可以被序列化。
2. 序列化对象 :使用 ObjectOutputStream 将对象写入文件( serialized.obj )。
3. 反序列化对象 :使用 ObjectInputStream 从文件中读取对象,并将其转换为 MySerializableClass 类型。
4. 异常处理 :在序列化和反序列化过程中,使用 try...catch 块捕获可能出现的 IOException 和 ClassNotFoundException 异常,并输出错误信息。

下面是对象序列化和反序列化的流程图:

graph TD
    A[创建可序列化对象] --> B[序列化对象]
    B --> C[将对象写入文件]
    C --> D[反序列化对象]
    D --> E[从文件读取对象]
    E --> F[恢复为对象并使用]
    B --> G{是否发生IOException}
    G -- 是 --> H[输出序列化错误信息]
    G -- 否 --> C
    D --> I{是否发生IOException或ClassNotFoundException}
    I -- 是 --> J[输出反序列化错误信息]
    I -- 否 --> E
总结

通过前面的学习,我们对Java编程中的对象类和文件输入输出有了较为全面的了解。以下是一个总结表格:
| 主题 | 主要内容 |
| ---- | ---- |
| Object类 | 所有Java类的超类,包含 equals() 、 hashCode() 和 toString() 等重要方法,可通过重写这些方法实现自定义功能。 |
| 基本类 | 每个基本类型都有对应的包装类,可使用包装类的静态方法操作基本类型实例,不需要包装类功能时建议使用基本类型。 |
| 文件输入输出 | 可使用 FileWriter 和 BufferedWriter 将数据写入文件,使用 FileReader 和 BufferedReader 从文件读取数据,同时要注意异常处理。 |
| Serializable类 | 用于实现对象的序列化和反序列化,可将对象状态转换为字节流进行保存或传输。 |

在实际的Java编程中,这些知识非常实用。例如,在处理文件数据时,我们可以灵活地进行读写操作;在处理对象时,可通过序列化和反序列化实现数据的持久化和传输。希望大家能够熟练掌握这些知识,并在实际项目中灵活运用。

相关推荐

JAVA实验六文件的输入输出的应用

JAVA实验六文件的输入输出的应用  一、实验目的 1.掌握I/O输入输出流的使用。 2.掌握文件输入输出的使用。 二、实验编程内容 1.使用文件字符输出流将一段文字存入文件,然后使用输入流读取文件中的内容。 2.将字符串加密后写入文件,然后读取该文件,并解密。 3. 参考MSDOS方式下的COPY命令,编写一个应用程序实现文件的复制。使用格式:java Copy 源文件

而濡木染 3416

JDK 17 – Java 17 中的新功能

Java 17 LTS 是 Java SE 平台的最新长期支持版本。JDK 17 二进制文件可在生产环境中免费使用,并可根据免费重新分发,其中 LTS 代表长期支持。它没有单调的心态和频繁的释放,当一个人熟悉并理解更新的作时。基本上,JDK17 的 Open LTS 版本现已推出,该版本由开发工具、一组库、一个 Java 虚拟机和其他文件组成。在每个版本中,我们都会看到新功能,同时会检查其中一些功能被更改或擦除。让我们讨论一下开放式 LTS 版本的演变,否则直接切换到安装部分或更新到它。

分享各种技术文章,给大家带来不一样的视野。 987

第十章java语言的输入输出与文件处理

Java语言的输入输出与文件处理Java语言的输入输出使用InputStream和OutputStream流类使用Reader和Writer流类文件的管理 Java语言的输入输出 java语言的输入输出功能必须借助于输入输出包java.io来实现。 输入流:将数据从外设或外存(如键盘、鼠标、文件等)传递到应用程序的流称为输入流 输出流:将数据从应用程序传递到外设或外存(如屏幕、打印机、文件等)的流称为输出流。 注意:对于输入流只能从其读取数据而不能向其写入数据,同样对于输出流只能向其写入数据而不能从其读取数

m0_63600776的博客 1106

Java之输入输出流(文件的读写)

Java之输入输出流(文件的读写) 首先,在编程的世界,流明显显得很重要。C++的输入输出流,Java的输入输出流等等。   首先我们得学会如何使用Java的输入输出流。首先,它们被封装在Java的一个叫做java.io的包中,编程时也必须导入此包。 我们首先编写一个程序,此程序能够简单的使用到Java语言的输入输出流。 编写一个简单的文件写入 和读出的操作。(源代码如下) impor...

Nice118的博客 1335

Java的并发编程与虚拟线程Java 17中的Record类Java 16中的Switch表达式Java 11中的局部变量类型推断 [包含示咧]

学习教程(传送门)本人详解作者:王文峰,参加过 优快云 2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯转载说明:务必注明来源(注明:作者:王文峰哦)学习教程(传送门)学习教程(传送门)往期文章学习教程(传送门)1、掌握入门到进阶知识(持续写作中……2、学会数据库用法(创作中……3、手把手教你制作(完善中……4、牛逼哄哄的。

王大师企业官方博客 3848

34、Java编程中的继承与文件输入输出

本文深入探讨了Java编程中的核心概念,包括继承机制与类层次结构设计,通过Swing框架展示如何利用继承优化复杂用户界面的开发。文章还详细讲解了Java的文件输入输出操作,涵盖文本文件的读写、常见错误处理及高级特性如文件对话框和网页内容读取。在异常处理部分,介绍了检查型与非检查型异常的区别,并提供捕获、抛出异常以及设计自定义异常类型的实践指导。此外,文章通过多个编程练习和完整案例,帮助读者巩固知识并提升实际应用能力。无论是初学者还是有一定经验的开发者,都能从中获得对Java面向对象特性和数据处理能力的全面理

zeta9的博客 111

11、Java编程中的继承、多态与对象类型处理

本文深入探讨了Java编程中的继承和多态特性,并通过一个投资组合管理系统的示例展示了如何处理不同类型的对象。内容涵盖了继承与方法调用、多态性、异构对象集合的创建与管理、运行时多态性、对象类型检测、类型转换规则以及如何防止方法重写和子类化。这些概念帮助开发者编写更加灵活、可维护和稳定的代码,适用于各种复杂的实际应用场景。

rum55的博客 63

Java编程中的控制流与文件输入输出

本文将探讨Java中的布尔表达式、决策控制流以及磁盘输入输出的基础知识。通过具体的代码示例,我们将了解如何使用switch语句处理键盘输入,以及如何使用Scanner类来读取控制台输入。此外,文章还将介绍如何进行文本文件的顺序读取和写入,为初学者提供编程基础。

weixin_35950531的博客 291

Java编程基础:文件输入输出技术

本文深入探讨了Java中的文件输入输出技术。介绍了如何使用Scanner类和PrintWriter类进行文本文件的数据读取与写入操作。详述了处理文件时可能遇到的问题,如文件存在性检测、顺序文件的读写、文件末尾的检测以及异常处理等。同时,文章还提供了一些实用的代码示例,帮助读者更好地理解和应用Java文件I/O技术。

weixin_35950531的博客 433

CGlib在Java 17+中的完美支持与应用

本文还有配套的精品资源,点击获取 简介:CGlib是一个用于Java字节码操作的库,用于动态生成子类以扩展或修改类的行为。尽管Java不断更新改进,CGlib依然保持与Java 17及更高版本的兼容性,从而让开发者能够利用Java的新特性,如更好的安全性和性能。CGlib依赖ASM库直接操作字节码,提供高性能且无需修改原始源代码的动态代理功能。它对于扩展类和实现AOP具有明...

weixin_42581003的博客 1383

Latex下使用JabRef添加参考文献

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...

sz3076799的博客 3467

CloudFlare CDN优化延迟

这两天在倒腾一个小网站,因为刚注册的域名还没来得及备案,所以就解析到了国外的服务器临时撸代码。为了防止不必要的麻烦,所以在前端套了CloudFlare,但是延迟就比较感人了,通常在150+左右还时不时的抽风,所以就找了点资料来优化一下这个延迟问题。然后再新增一些CloudFlare的亚太地区节点ip的A解析,有耐心的可以分为电信线路和联通线路,我比较懒,所以只分了境内和默认。众所周知CloudFlare是智齿cname解析的,那么我们今天就要用到这个办法了,这里要注意一下,默认的解析是不能动的。

Zuozi - 网络从业者长见识就来Zuozi.NET 1085

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

通过精密的事件监听、状态管理和对系统动画 API 及 Launcher 内部组件的协调,实现了复杂而流畅的手势导航体验。它的抽象设计允许子类(如。是 Quickstep (Launcher3 的手势导航实现) 中处理。的核心逻辑抽象基类。这个非常核心且复杂的类。)定制特定的回家动画逻辑。好的,我们来深入分析。

Micheal_Yang's Blog 1519

智能汽车竞赛摄像头处理(4)——摄像头循迹思路讲解

智能汽车竞赛摄像头处理(4)对摄像头循迹思路进行讲解。

weixin_62261692的博客 7059

Camera(5)metadata

Metadata 是整个 Android camera 中类似于高楼大厦中的管道系统一样,贯穿了整个 Camera 的 Framework 和 vendor HAL。Metadata 里面包含了所有的控制、参数、返回值等等。Metadata分为Android原生的Metadata和芯片商或者用户自定义的Metadata,即Android Tag和Vendor Tag。Vendor Tag在Hal中定义,并在camx和chi目录中使用。

qq_55893245的博客 3052

蓝桥杯算法:打印图形——六芒星

【输入格式】 输入一行包含一个整数 n。 【输出格式】 输出一个六芒星,表示满足题意的图形。 【样例输入】 3 4 【样例输出】 【评测用例规模与约定】 对于所有评测用例,1 ≤ n ≤ 20。 总结: 第一次做图形题,做了蛮久,图形题有很多的方式去完成,它考验的是你能不能找到更简单的那一种方式. 我初看到这个图形,第一种想法是把这个六芒星当做六个小三角形来做,然后以某种规则排列一下,就能做出来,但是尝试了一下感觉太麻烦了。 然后我的第二种想法是,这个图形是对称图形,怎么能写出一半吗? 这样另一半想办

KeepCodeing 3835

天龙八部TLBB系列 - 网单用数据库修改为其他门派

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等) --- 天龙八部修改门派

空名先生 9430

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 26、抗自适应对手的非可塑性隐写方案
下一篇: 17、C语言文件输入输出、调试与优化全解析
cherry
博客等级 码龄27年 59粉丝 1688原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值