当前位置:主页 > 查看内容

java面向对象编程

发布时间:2021-07-17 00:00| 位朋友查看

简介:一、面向对象 面向过程指的是面对与一个问题的解决方案 更多的情况下是不会做出重用的设计思考的 而面向对象的主要设计模式为模块化设计 并且可以进行重用配置。在整个的面向对象的设计里面更多情况下考虑的是标准 在使用的时候根据标准进行拼装。 面向对象……
一、面向对象

面向过程指的是面对与一个问题的解决方案 更多的情况下是不会做出重用的设计思考的

而面向对象的主要设计模式为模块化设计 并且可以进行重用配置。在整个的面向对象的设计里面更多情况下考虑的是标准 在使用的时候根据标准进行拼装。

面向对象设计的三个主要特征

1.封装性 内部操作对外部而言不可见 当内部的操作都不可直接使用的时候才是最安全的

2.继承性 在已有的结构的基础上继续进行功能的扩充

3.多态性 是在继承性的基础上扩充而来的概念 指的是类型的转换处理。

在进行面向兑现程序的开发之中一般还有三个步骤

OOA 面向对象分析

OOD 面向对象设计

OOP 面向对象编程

二、类与对象

类是对某一类事物的共性的抽象概念 而对象描述的是一个具体的产物。

每一个属性的集合就构成了一个对象 而每一个属性的定义都应该是群体的定义 而群体的定义就形成了一个类

在类中一般都会有两个属性 1.成员属性 2.操作方法

三、对象内存分析

两块常用的内存空间

1.堆内存 保存的是对象的具体信息 在程序之中 堆内存空间的开辟是通过new来完成的.

2.栈内存 保存的的是一块堆内存的地址 即 通过地址找到堆内存。

对象实例化有两种语法 一种是声明并实例化对象 另一种是分布完成的操作

需要特别注意 所有的对象在调用类中的属性和方法的时候 必须要实例化完成后才可以实行 只声明 但是不实例化的话 就会产生空指针异常。

四、对象引用分析

类本身属于引用数据类型 既然是引用数据类型 那么就牵扯到内存的引用传递 所谓的引用传递 同一块堆内存可以被不同的栈内存指向。

五、引用传递与垃圾产生分析

引用传递的本质就是一场堆内存的调戏游戏 但是对于引用传递如果处理不当 也会造成垃圾的产生。

Person per1 new Person(); per1.name 张三 per.age 18;

Person per2 new Person(); per1.name 李四 per.age 18;

per2 per1;//当讲per1的地址赋值给per2的时候 per2的内存地址也就被覆盖了 per2原来所指向的堆内存没有指向了 产生垃圾。

所谓的垃圾空间指的就是没有任何栈内存所指向的堆内存 所有的垃圾将被GC 垃圾收集器 不定期进行回收并释放无用空间

六、成员属性封装

类是由属性和方法组成 一般而言方法都是对外提供服务的 所以是不会进行封装处理的 但是成员属性需要较高的安全性 所以往往需要对其进行保护 这个时候就需要采用封装性对属性进行保护。

在默认的情况下 对于类中的属性是可以通过其他类利用对象进行调用的。有可能设置错误的数据 这就需要通过private修饰词进行封装处理。

属性一旦封装之后将不能直接访问 即 对外部不可见 但是对类的内部是可以调用的 通过在类内部设置get和set方法来实现外部调用 可以在方法内添加条件来限制对成员属性的修改。

七、构造方法与匿名对象

现在的程序使用类的时候一般先声明并实例化对象 实例化对象的时候 属性多的情况下就要调用多个set方法 太繁琐 所以就有了构造方法的概念。

构造方法的方法名与类名相同 没有返回值。对类的对象进行初始化。如果类中没有构造方法 那么会默认提供一个无参构造 如果定义了一个有参构造 那么默认的无参构造就不会被创建。

构造函数为什么没有返回值 而且为什么不用void 程序编译器是根据代码结构来进行编译的 执行的时候也是根据代码结构来执行的。如果没有void就和普通方法一样了 最大区别是构造方法是在类实例化的时候调用的 普通方法是在对象实例化之后调用的。

只通过实例化对象来进行类的操作也是可以的 由于该对象没有任何的引用 所以只使用一次就会成为垃圾 被CG处理并释放空间。

只要是方法都可以传递任意的数据类型 基本数据类型、引用数据类型

八、this调用本类属性和方法

this可以算是Java里面比较复杂的关键字 使用方法

1.当前类中的属性 this.属性

2.当前类中的方法 普通方法、构造方法 this()、this.方法名();

3.描述当前对象

使用this调用当前类中的属性 在java程序中“{}”是作为一个结构体的边界符 那么在程序里进行变量赋值的是偶 将以“{}”作为一个查找边界。

对于本类构造方法的互相调用需要注意

1.构造方法必须在实例化新对象的的时候调用 所以“this ”的语句只允许放在构造方法的第一行

2.构造方法中能够调用普通方法 但是普通方法不能通过this调用构造方法。

3.构造方法互相调用时必须要留程序的出口 别形成死循环。

一个类中含有四个构造函数 可能包含多个重复的赋值语句 可以通过互相调用来减少重复语句。

九、简单Java类

在以后的开发和设计过程中简单Java类都将作为一个重要的组成部分存在 简单java类无处不在 并且有可能会产生一系列的变化。

对于简单Java类而言 其核心开发如下

1.类名称一定要有意义 可以明确的描述某一类事物

2.类之中所有属性都必须使用private进行封装 同时封装后的属性必须要有set和get方法

3.类中可以有无数个构造方法 但是必须要保留有无参构造方法。

4.类之中不允许出现任何的输入语句 所有的内容的获取必须返回。

5.可以创建一个getInfo方法 返回所有的属性。

十、static关键字

1.static修饰属性

static关键字可以用来定义属性和方法 在一个类中所有的属性一旦定义了 都交由各自的堆内存来保存。

重复保存且修改不方便的属性 static修饰的属性保存在全局数据区。由于静态属性本身时一个公共资源 所以应该通过所有类的最高代表 类 来调用。非static属性必须在实例化对象产生之后才可以使用 而static属性可以在没有实例化对象产生的时候由类直接调用。

2.static修饰方法

定义static方法之后 类中方法就有了两种 静态方法和非静态方法。静态方法只能调用静态属性和方法 非静态方法允许调用静态属性和方法。

3.static应用

1 统计创建了几个对象 需要新建static属性

2 实现属性的自动命名的处理 有值的时候返回自己的值 没有值可以直接调用无参构造 然后通过this调用含参构造给赋默认值。

十一、代码块

在程序中使用“{}”定义的的结构成为代码块 根据代码块出现的位置和定义的关键字 分为普通代码块、构造快、静态块 同步代码块。

普通代码块 可以在一个方法之中进行一些结构的拆分 以防止相同变量名带来的相互影响。

构造代码块 构造代码块会优先于构造方法执行 并且每一次实例化新对象的时候都会调用构造快中的代码。

静态代码块 使用static关键字定义的代码块 1.主类中定义的静态代码块 2.非主类中定义静态代码块。静态代码块会优先于构造块执行 不管有多少个实例化对象出现 静态代码块只执行一次 主要目的是为类中的静态属性初始化

十二、数组的定义与使用

概念 如果说我们现在要定义一百个整型变量 那么传统的方式太繁琐 不适合程序维护 没有任何的参考规律 一组相关变量的集合 数组是引用数据类型 涉及内存分配。new

数组的定义格式

数组的动态初始化 声明并初始化数组 数据类型 数组名称 [ ] new 数据类型 [长度]

数据类型 [ ] 数组名称 new 数据类型 [长度]

数组的静态初始化 在数组定义的时候就为其设置好了里面的内容

简化格式 数据类型 数组名称 [ ] {数据1 数据2 数据3.。。。}

完整格式 数据类型 数组名称 [ ] new 数据类型 [ ]{数据1 数据2 数据3.。。。}

十三、数组的引用传递

数组内存分析 数组属于引用数据类型 一定会发生引用传递 必须提供有实例化对象 才能使用下标进行数组的操作 否则一定会出现空指针异常。

十四、foreach输出

增强型的for循环 直接将数组里的每个内容提取出来 不需要通过下标来操作。

十五、二维数组

很少涉及

十六、数组与方法

对于引用数据而言 主要的特点就是可以与方法进行引用传递 而数组也是引用数组。

十七、数组排序

冒泡排序。

进行类设计的时候 如果类中没有属性存在的意义 那么定义的方法就没有必要使用普通方法了 因为普通方法需要在有实例化对下个产生的情况下才可以调用。

十八、数组反转

数组转置 如果再新建一个数组来保存原数组的转置 然后再将转置之后的数组赋值给原数组的话 原数组对应的数组就会变成垃圾。不可取。


本文转自网络,原文链接:https://developer.aliyun.com/article/785401
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐