黑马程序员—Java入门学习日记基础篇-面向对象总结2

------- android培训java培训、期待与您交流! ----------

-- Java面向对象编程知识点总结

一:面向对象概述。

  面向对象:使复杂的事物变得简单,使程序的开发人员从程序的被动者变为了程序的指挥者。

  • 类:

类是对现实世界事物的抽象化描述。

  • 对象:

对象是类的实实在在的实体。

  • 面向对象的特点1.开发的过程:其实是不断的创建对象,使用对象,指挥对象。2.设计的过程:其实就是在管理和维护对象之间的关系的过程。

  • 面向对象:(对象+对象+对象......n+对象)+消息(消息就是对对象的控制)。

  • 基于过程:算法+数据结构,是单一的通过设定好的步骤一步一步的实现

  • 面向对象的特征:封装、继承、多态。

.类的实现过程:

例如以人为例,先分析人具有的静态属性(属性)和动态行为(行为)。

人:属性有:姓名、性别、肤色、国籍、年龄、学历等。

行为有:编程、学习、吃饭、睡觉、打篮球等。

1.从以上属性和行为中抽取你关心或者说是需要用的属性和行为。

V

V

                     VVVV

Class {

    姓名

    性别

    年龄

    学习();

    编程();

}   使用Java程序实现:              

v

v

                   VVVV

classPerson {

       String name;

       String sexy;

       Int age;

       void learn(){}

       void Coding(){}

}

2.创建对象的过程(也称作类的实例化过程)

class PersonDemo{

 publicstatic void main (String[] args){

         Personman = new Person();//实例化对象使用new关键字

//其实是在内存的堆内存中开辟对象的存储空间。

//下面是对实例化的对象进行详细的描述和使用。

         Man.name= “xiaoqiang”//调用man对象中的属性

man.age = 20;   

         man.sexy= “male”;

         man.learn();//调用man中的方法行为。

         man.coding();

}


创建对象的过程如下图所示:

 

 

三:类中的元素:

成员变量:作用于整个类中(存在于堆内存中因对象的存在而存在)。

局部变量:作用于函数中或符合语句中,存在于栈内存中。

匿名对象: Person man = new Person();可以写为:new Person().age = 20

匿名对象的使用方法1:调用属性是无意义的,单调用方法只调用一次时可以使用,当对象调用多个方法时,必须声明引用类型即句柄。

使用方法2:可以将匿名对象作为实参进行传递。

三:封装:

   封装是指隐藏对象的属性和方法,仅提供公共的访问方式。

1.封装的优点:1.提高了代码的重用性。2.将变化隔离。3.提供了安全性便于使用。

封装的原则:1.将不需要对外提供的内容隐藏起来。2.提供公共的访问方式对其进行访问。

例如:某大型汽车零配件公司建立了的网络交易平台。

Class零件类{

             零件价格;

             零件销量;

             零件的购买方;

}

B厂客户可以从此类中获取零件的价格、零件的销量,当客户获得某种型号的零件大部分被A厂客户购买(B厂客户的禁止对手)时,B厂有可能停止购买,因为与竞争对手的货源相同,这时如果该公司对该类中的零件的购买方进行私有化(private)也就是进行封装,则就不会出现上述情况。但某些客户是需要通过交易平台对购买方的

信息进行获得,比如公司的老板有获得购方的权限,此时就要建立一个共有的(public)方法给老板,让老板可以获得这个属性。

Class零件类{

         Publicint零件价格;

         Publicint零件销量;

         PrivateString零件的购买方;

public String bossCan (){

         return零件的购买方;

}

}

2.在类中一个私有的成员变量通常会对应两个方法:1.设置器2.访问器。

如:class LearnDemo{

          private int age;

          public void setAge(int a){

   age= a;

}

          public void getAge(){

   returnage;

}

 

}

3.构造函数:

     1.构造函数与类名一致。

    2.不需要定义返回值。

    3.不可以写return语句。

对象在建立后首相调用对象的构造函数进行初始化,假如当一个类中没有定义构造函数,系认会默认为该类添加构造函数。

构造函数的作用:构造函数为对象初始化(原因是某些对象在一出现后就具有某些属性。比如:中国人生下来就是黄色的皮肤)。

构造函数的重载:因为某些对象需要初始化多种属性。

重载的方法:函数名必须相同、参数类型和参数个数不能彼此间相同

构造函数与普通函数的区别:1.构造函数在对象一建立时就首先运行,只能运行一次。2.一般函数:调用时执行,并可以执行多次。


<think>嗯,用户想了解CRC32校验算法的实现和使用方法。我需要先回顾一下CRC32的基本原理,然后考虑如何用简单易懂的中文解释清楚。首先,CRC32是基于循环冗余校验的一种算法,主要用于检测数据传输或存储中的错误。用户可能希望知道它的具体步骤,比如如何初始化、处理数据、异或操作以及最终得到校验值。 根据提供的引用资料,CRC32的核心是多项式除法,但实际中通过查表法优化速度。需要解释生成多项式,比如常见的0xEDB88320,以及初始值、输入输出是否反转这些参数。用户提供的代码片段中有两个版本,一个是逐位计算,另一个是查表法,这可能需要在回答中对比说明,突出查表法的效率优势。 接下来,用户可能关心具体怎么使用这个算法,比如在C语言中的实现步骤,或者如何应用到实际项目中,比如文件校验或网络传输。要分步骤讲解,从初始化到处理每个字节,再到最终计算,可能需要示例代码来辅助说明。同时,注意用户要求行内数学表达式用$...$,比如多项式应该写成$0xEDB88320$这样的格式。 另外,用户的问题里提到生成相关问题,我需要考虑相关的问题可能涉及性能优化、不同生成多项式的影响,或者CRC32与其他校验算法的比较。这些可以作为相关问题放在最后,帮助用户进一步探索。 需要确保回答结构清晰,先讲原理,再讲实现步骤,然后使用方法,最后附上相关问题。同时,引用提供的资料,比如引用[^1]和[^2]来支持解释。要避免技术术语过于复杂,保持语言通俗易懂,同时满足LaTeX格式要求,比如多项式用$符号包裹。检查是否有遗漏的步骤,比如输入反转和输出反转的处理,这在代码示例中有所体现,需要解释清楚这些参数的作用。</think>### CRC32校验算法实现及使用方法 #### 一、CRC32基本原理 CRC32通过多项式除法生成32位校验值,用于检测数据传输或存储中的错误。其核心是生成多项式$G(x)$,常用标准为$0xEDB88320$(反向多项式形式)[^1]。算法流程如下: 1. **初始化**:设置32位寄存器初值为$0xFFFFFFFF$ 2. **数据输入**:逐字节与寄存器异或运算 3. **位移处理**:根据多项式进行循环移位和异或操作 4. **结果取反**:最终值与$0xFFFFFFFF$异或 #### 二、算法实现(C语言) ```c // 查表法实现(高效) uint32_t crc32_table[256]; void init_crc32_table() { for (int i = 0; i < 256; i++) { uint32_t crc = i; for (int j = 0; j < 8; j++) { crc = (crc >> 1) ^ ((crc & 1) ? 0xEDB88320 : 0); } crc32_table[i] = crc; } } uint32_t calc_crc32(uint8_t *data, size_t len) { uint32_t crc = 0xFFFFFFFF; while (len--) { crc = (crc >> 8) ^ crc32_table[(crc ^ *data++) & 0xFF]; } return crc ^ 0xFFFFFFFF; } ``` 此实现通过预先生成的256元素查找表,将时间复杂度从$O(n \cdot 8)$优化到$O(n)$。 #### 三、使用场景及方法 1. **文件校验**:计算文件CRC32值验证完整性 ```bash $ crc32 filename.txt ``` 2. **网络传输**:在数据帧尾部附加4字节校验码 3. **存储系统**:RAID、ZFS等文件系统使用CRC32校验数据块 #### 四、参数配置 | 参数 | 说明 | 标准值 | |---------------|---------------------------|-----------------| | 初始值 | 寄存器初始状态 | 0xFFFFFFFF | | 多项式 | 生成多项式 | 0xEDB88320 | | 输入/输出反转 | 字节处理顺序 | 通常需要反转 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值