面向对象基础
发布日期:2021-06-27 12:55:44
浏览次数:28
分类:技术文章
本文共 2693 字,大约阅读时间需要 8 分钟。
面向对象基础
一、面向对象思想
面向对象即把相关的数据和方法组织为一个整体来看待。
面向过程关注的是执行的过程,面向对象关注的是具备功能的对象
总结:面向过程到面向对象,是程序员思想上从执行者到指挥者的转变
面向过程,需要关注很繁琐的过程;而面向对象不用关注具体的细节,更关注统筹架构。
面向对象三大思想:
- OOA:面向对象分析
- OOD:面向对象设计
- OOD:面向对象设计
面向对象三大特征:
- 封装性:所有的内容对外部不可见
- 继承性:将其他的功能继承下来继续发展
- 多态性:方法的重载本身就是一个多态性的体现
二、类与对象
1、关系
类必须通过对象才可以使用,对象的所有操作都在类中定义。类由属性和方法组成:- 属性:就相当于人的一个个的特征- 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉
2、类的定义的格式
class 类名称{ 成员属性 成员方法}
注意:
类必须编写在.java
文件中,一个.java
文件中可以存在N个类,但是只能存在一个public
修饰的类。
.java
文件的文件名称必须与public
修饰的类名完全一致
3、属性与方法
属性定义格式: 数据类型 属性名;属性定义并赋值的格式: 数据类型 属性名 = 初始化值; 方法定义格式: 权限修饰符 返回值类型 方法名(形式参数列表){ //方法体 return 返回值; }
当方法没有返回值,出现return,表示方法结束。
void xman(){ if(true){ return; }//if(true)判断正确,则直接结束方法,不执行后续打印指令 System.out.println("还好"); }
4、对象的创建和使用
一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下: 类名称 对象名称 = new 类名称(); 如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式: 访问类中的属性: 对象.属性; 调用类中的方法: 对象.方法(实参);
三、对象创建时的内存分析
1、栈
Java中一个线程就是一个栈区,每一个栈中的元素都是私有的,不被其他栈所访问。栈有先进后出的特点,栈中的数据大小与生存周期都是确定的,缺乏灵活性,但是存取速度比堆要快,仅次于CPU中的寄存器。
存储速度快的原因:栈内存, 通过 ‘栈指针’ 来创建空间与释放空间 。指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 ,但是这种移动的方式, 必须要明确移动的大小与范围
存储的内容:基本数据类型的数据 以及 引用数据类型的引用
2、 堆
存放的是类的对象 .创建对象时 , 不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占用时长 !堆内存中内存的释放是由GC(垃圾回收器)完成的垃圾回收器 回收堆内存的规则:当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !
3 方法区
存放的是
- 类信息
- 静态的变量
- 常量
- 成员方法
方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)
4 PC寄存器与本地方法栈
PC寄存器保存的是 当前正在执行的 JVM指令的 地址,在Java程序中, 每个线程启动时, 都会创建一个PC寄存器
本地方法栈 保存本地(native)方法的地址
public class Demo3 { public static void main(String[] args) { Book b1 = new Book(); b1.name = "金苹果"; b1.info = "讲述了果农辛勤种植金苹果的过程。"; Book b2 = new Book(); b2.name = "银苹果"; b2.info = "讲述了果农辛勤种植银苹果的过程。"; b2 = b1; b2.name = "铜苹果"; b1.say(); }}class Book{ String name; String info; void say() { System.out.println("书名:"+name+" , 简介:"+info); }}/*此时将b1的地址赋给b2,b1和b2的内存地址指向相同,只不过名称不同b1的堆内存由于缺少栈内存的指针指引而被当作垃圾回收因此,执行方法打印的内容为:书名:铜苹果 , 简介:讲述了果农辛勤种植金苹果的过程。*/
四、构造器
1、概述
作用: 相当于对象的初始化执行时机: 在创建对象时,自动调用特点: 所有的Java类中都会至少存在一个构造方法 如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码 如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。
2、格式
与普通方法基本相同, 区别在于: 方法名称必须与类名相同, 没有返回值类型的声明
public class Demo3{ public static void main(String[] args){ Person p = new Person(); p = new Person(); p = new Person(); p = new Person(); }}class Person{ public Person(){ System.out.println("对象创建时,此方法调用"); }}
五、方法重载
方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载方法的重载与返回值类型无关作用:方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能
/***一个类中定义的方法,是允许重载的(相同的方法名称)*1、方法名称相同*2、参数列表长度 或 参数列表类型 或 参数类型顺序不同 */class Math{ int sum(int x ,int y){ int z = x+y; return z; } double sum(double x,double y){ double z = x+y; return z; } }
构造方法的重载
一个类, 可以存在多个构造方法 :参数列表的长度或类型不同即可完成构造方法的重载作用:构造方法的重载 ,可以让我们在不同的创建对象的需求下, 调用不同的方法来完成对象的初始化!
转载地址:https://blog.csdn.net/weixin_43454088/article/details/115678039 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月27日 10时39分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小解决办法
2019-04-21
程序员主管之路(1)
2019-04-21
sparkR集群启动脚本的封装。
2019-04-21
mysql分页查询语句怎么写?
2019-04-21
MySQL在linux上的rpm包方式安装方法
2019-04-21
eclipse 安装properties编辑器,显示中文
2019-04-21
Python爬去图片实例,python 爬取图片
2019-04-21
一次tomcat配置参数调优Jmeter压力测试记录前后对比
2019-04-21
Java经典23种设计模式之行为型模式(三)
2019-04-21
设计模式三—抽象工厂模式
2019-04-21
java 线程 错失的信号、notify() 与notifyAll的使用
2019-04-21
数字三角形合集
2019-04-21
python中urllib的urlencode与urldecode
2019-04-21
mysql命令行各个参数解释
2019-04-21
bootstrap bootstrapTable 隐藏列
2019-04-21
Windows7 64bits下安装TensorFlow CPU版本(图文详解)
2019-04-21
Django QuerySet 方法梳理 。model外键 多对多的保存
2019-04-21
cocos2dx --- 在游戏中显示HTML页面
2021-06-24
飞鸽TCP/IP 10106错误解决
2021-06-24