1.javaOOP_Part1_抽象和封装
javaOOP_Part1_抽象和封装
javaOOP_Part1_抽象和封装
- 1.1 面向对象
- 1.1.1 为什么使用面向对象
- 1、一切皆对象
- 2、现实世界就是"面向对象的"
- 3、面向对象就是采用“现实模拟”的方法设计和开发程序
- 1.1.2 使用面向对象设计程序 的过程==抽象过程
- 1、发现类
- 2、发现类的属性
- 属性是固有的,不容易变化的,和业务相关的。比如你穿裙子是你,你穿短袖还是你?
- 3、发现类的方法
- 1.2 创建类和对象
- 1.2.1 类和对象的概念
- 1、类
- 类是抽象的看不见摸不着,是对某一事物的描述
- 2、对象
- 对象是具体的,是实际客观存在的
- 3、类和对象的关系
- 类是对象的高度抽象,对象是类的具体实现
- 1.2.2 类名、属性名、方法名以及常量名的命名规范:
- 1、类名由一个或几个单词组成,每个单词的第一个字母大写。
- 2、属性名和方法名由一个或几个单词组成,第一个单词首字母小写,其他单词首字母大写。
- 3、常量名由一个或几个单词组成,所有字母大写。
- 1.2.2 类的组成
- 1、属性=类的成员变量=类的成员属性
- (1)定义属性或变量:数据类型 变量名=属性值;
- (2)定义常量:final 数据类型 变量名=变量值;
- (3)静态常量:static fina 数据类型 变量名=变量值;
- 2、方法=行为=成员方法
- 3、构造方法
- 4、代码块
- 1.2.3 创建对象、调用属性和方法
- 1、创建对象
- 类名 对象名=new 类名( );
- 通过构造方法来创建对象
- 2、调用属性
- 对象名.属性名=属性值;
- 3、调用方法
- 对象名.方法名( );
- 过度:
- 乞丐中的霸主是什么?还是乞丐!那么构造方法是什么?还是方法
- 平时如何给对象的属性赋值?如果对象有几十个属性,是不是要写几十行代码?是不是很麻烦?想不想一行搞定?
- 1.3 构造方法及其重载
- 1.3.1 构造方法语法:
- public 类名(参数列表){ }
- 1.3.1 构造方法
- 1、构造方法的特点
- 方法名与类名一样,没有返回值类型
- 2、构造方法的主要作用
- 在创建对象的时候完成初始化操作,即对属性赋初值
- 3、写构造方法的时候存在的问题
- 参数名和属性名不一样,当参数太多是有点乱,不知道那个参数赋值给那个变量
- 参数名和属性名一样,好像可以解决,但是分不清那个是参数那个是变量
- 解决:本类变量前加this表示某对象的
- 4、分类
- 显示构造
- 在代码中能看到的构造方法
- 可以有多个显示构造方法
- 创建对象时自动匹配参数调用
- 隐式构造
- 看不见的构造方法
- 系统自动在编译时添加一个无参的构造方法,称为隐式构造
- 例子:你代笔(显示构造),没有代笔(隐式构造),你没有带我给你提供一个(系统默认提供)
- 1.3.2 构造方法重载的特点:
- 1、必须在同一个类中
- 2、方法名和类名一样
- 3、相同方法名
- 4、参数个数或参数类型不同
- 5、无返回值类型
- 6、与方法访问修饰符无关
- 总结:同类,方法名同类名,不同参,无返回值类型 ,和访问修饰符无关
- 1.3.3 普通方法重载的特点:
- 1、必须在同一个类中
- 2、方法名相同
- 3、参数个数或参数类型不同
- 4、与方法返回值和访问修饰符无关
- 总结:同类,同名,不同参,和返回值类型和访问修饰符无关
- 1.3.4 构造方法重载的注意事项:
- 1、手动添加有参构造,系统不再提供无参数构造
- 2、使用this调用构造方法时,只能作为第一条语句
- 1.3.5 执行时机
- 对象创建的时候执行
- 1.3.2 构造方法分类
- 1.4 static修饰符
- 1.4.1 static修饰变量
- 1、修饰时它们被称为类属性、类变量
- 2、语法:访问修饰符 static 数据类型 变量名=值;
- 3、调用方法
- 对象名.变量名
- 类名点变量名
- 4、静态的,唯一 的
- 1.4.7 内存空间分配
- 1、堆:存放引用数据类型、对象等
- 2、栈:基本数据类型
- 3、static:永远只有一个副本
- 例子:水杯换着喝水行不行?不行!属于个人! 公共水桶的水能换着喝吗?能,属于个人,又不属于个人。static像公共水桶,非staitc像个人水杯。
- 4、常量区:
- 5、案例:static作用
- Student zhangsan=new Student(学生编号,姓名,班级编号);
- Student zhangsan=new Student(1,"zhangsan","S001");
- Student lisi=new Student(1,"lisi","S001");
- Student wangwu=new Student(1,"wangwu","S001");
- Student tianyi=new Student(1,"tianyi","S001");
- 栈:分配
- zhangsan 35aflisi 36afwangwu 37aftianyi 38af
- 堆:分配
- 35af 1 zhangsan S001
- 36af 2 lisi S001
- 37af 3 wangwu S001
- 38af 4 tianyi S001
- 问题:如果此时有50个学生,内存中占有50个相同班级编号的内存空间
- 解决:把内存空间变成一份,让所使用的 对象指向这份内存空间就可以了
- public static String classno="S001";Student zhangsan=new Student(1,zhangsan); Student lisi=new Student(1,lisi);Student wangwu=new Student(1,wangwu);Student tianyi=new Student(1,tianyi);
- 栈:分配
- zhangsan 35aflisi 36afwangwu 37aftianyi 38af
- 堆:分配
- 35af 1 zhangsan 36af 2 lisi 37af 3 wangwu 38af 4 tianyi
- 方法区:(存放final、staitc,类结构)
- Student类结构
- S001
- 子标题
- 6、解决问题:对象内存空间的浪费
- 7、static变量执行过程:
- JVM在执行的时候要加载这个类,这个类不管你有没有创建对象,他已经在方法去里面形成了类的结构, 也就是说在没有创建对象之前,静态变量已经有值了,而普通对象你只有在堆里面new之后,创建这个对象了,才会在堆内存中给你分配内存空间,你才可以使用它的属性和方法,而只要使用了static即使你没有创建对象,但是只要这个类被加载了,这个static变量就有值了,
- 案例:可以在new对象之前打印静态变量的内容
- 1.4.2 非static修饰变量
- 1、修饰时被称为实例属性、实例变量
- 2、语法:访问修饰符 数据类型 变量名=值;
- 3、调用方法:对象名.变量名;
- 1.4.3 static修饰方法
- 1、修饰时被称为类方法
- 2、特点:
- 静态方法中只能直接访问静态变量和静态方法,不能直接访问普通方法和普通变量
- static方法中不能使用this和supper关键字,因为他它是属于类的,不是属于对象的
- 1.4.4 非static修饰方法
- 1、修饰时被称为实例方法
- 2、语法:访问修饰符 返回值类型 方法名(参数列表){ }
- 3、调用方法:对象名.方法名();
- 1.4.5 static修饰代码块
- 语法:static{ }
- 静态代码块
- 1、执行时机
- 类加载的时候执行(系统运行时自动调用)
- 2、只能调用静态变量和其他静态方法
- 3、静态方法中只能直接访问静态变量和静态方法,不能直接访问普通方法和普通变量
- 4、static方法中不能使用this和supper关键字,因为他它是属于类的,不是属于对象的
- 1.4.6 非static修饰代码块
- 非静态代码块
- 语法:{}
- 总结:
- 1、static方法不能调用非staitc属性,非static可以调用staitc属性
- 2、静态方法中不能使用this或supper关键字
- 1.5 封装
- 1.5.1 什么是封装
- 封装是面向对象的三大特性之一,是将类的状态信息隐藏在类的内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问。
- 1.5.2 封装的步骤
- 1、修改属性的可见性来限制对属性的访问
- 2、对每个属性创建一对赋值setter方法和取值getter方法,用于对这些属性进行存取
- 3、在赋值的setter方法中,加入对属性的存取控制语句。
- 1.5.3 封装的好处
- 1、隐藏类的实现细节
- 2、让使用者通过程序规定的方法来访问数据
- 3、可以方便的加入存取的控制语句,限制不合理的操作
1.javaOOP_Part1_抽象和封装的更多相关文章
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
PHP面向对象三大特点学习 学习目标:充分理解抽象.封装.继承.多态 面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象:我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和 ...
- 抽象和封装_JAVA_OOP
很久没做笔记了,没有以前的刚开始学习软件时候的热情了.包括几年前U盘损坏,数据丢失,通过数据恢复,也只是找回一些零星的碎片. 现在就抽时间把以前的技术笔记找回来,这十条记录在电脑上显示的最后修改日期为 ...
- Java基础-四大特性理解(抽象、封装、继承、多态)
抽象: 象就是有点模糊的意思,还没确定好的意思. 就比方要定义一个方法和类.但还没确定怎么去实现它的具体一点的子方法,那我就可以用抽象类或接口.具体怎么用,要做什么,我不用关心,由使用的人自己去定义去 ...
- Java(13) 抽象和封装
一.简述从现实世界中抽象出类的步骤 第一:找出分类(分析出类) 第二:找出类的特征(分析类的相关属性) 第三:找出类的行为(分析类的方法) 二.常量(经常出现的变量值) 2.1 语法: public ...
- java第一章抽象和封装
面向过程和面向对象有什么区别? 面向过程的核心是函数,以功能为中心,实现了函数级别的代码重用. 面向对象的核心是封装了属性和方法(行为)的类,以数据为中心,实现了类级别的代码重用. 面向对象因为采用了 ...
- java面向对象编程(五)--四大特征之抽象、封装
1.抽象 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 2.封装 封装就是把抽象出来的数据和对数据的操作封装在一起 ...
- Java中的抽象和封装
一.面向对象和面向过程的区别 面向对象: 核心:封装了属性和方法的类,以数据为中心,实现了类级别的代码重用 面向对象因为采用了类,所以具有继承和多态特性,可以进一步重用代码和简化编程 面向过程: 核心 ...
- 牛客网Java刷题知识点之面向对象java的四大特性(抽象、封装、继承、多态)
不多说,直接上干货! 面向对象java的四大特性之抽象 抽象就是有点模糊的意思,还没确定好的意思. 就比如,要定义一个方法和类.但还没确定怎么去实现它的具体一点的子方法,那我就可以用抽象类或接口.具体 ...
- Java之抽象和封装
① 如何从现实世界中抽象出类? 根据软件开发需求: 发现类-->发现类的属性-->发现类的方法 ② 构造方法的作用和特点是什么? 作用:在创建对象时执行一些初始化操作 ...
随机推荐
- TypeScript -- 面向对象特性
.class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...
- ap143 添加复位和重启按钮
1.修改匹配的文件mach-ap143.c 定义按键对应的GPIO(根据原理图来) #define AP143_GPIO_BTN_RESET 12 添加按钮的初始化消息 注册定时轮询按钮动作的函数 2 ...
- Ubuntu14.04安装PHP5
因为任务需要在Ubuntu14.04的server版本下安装PHP5,所以总结一下 使用root进行安装 要么在前面加上sudo进行安装. apt-get install php5-cgi ap ...
- iOS导航标题不居中问题(转载)
前言 一直以来都让我很头痛的一个问题:系统自带的导航条,在标题文字很长时,进入到下一个界面,而下一个界面的标题也很长时,就会出现标题不居中显示. 曾经,我尝试过很多种办法,但是都没有从根上解决问题.下 ...
- Objective-C Runtime 运行时之六:拾遗(转载)
前面几篇基本介绍了runtime中的大部分功能,包括对类与对象.成员变量与属性.方法与消息.分类与协议的处理.runtime大部分的功能都是围绕这几点来实现的. 本章的内容并不算重点,主要针对前文中对 ...
- python绝技 — 用Scapy测试无线网卡的嗅探功能
代码 #!/usr/bin/python #--*--coding=utf-8--*-- from scapy.all import * def pktPrint(pkt): if pkt.hasla ...
- Struts2的通配符配置方式
Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类: 让你的Action类继承自ActionSupport类(项目中最常用这种方式,因为ActionSupport类中 ...
- UNIX基础--Shells
Shells Shell提供了一个和操作系统交互的命令行接口.shell的主要功能就是从输入取得命令然后去执行.FreeBSD内含了一些shell,包括:Bourne shell(sh). exten ...
- 一个view相对于屏幕或者另外一个view 的坐标
如果想知道一个view相对于屏幕或者另外一个view 的坐标,那么可以通过如下的方法得到: UIWindow * window=[[[UIApplication sharedApplication] ...
- C# 正则表达式 结合 委托
使用正则表达式匹配字符串的同时,使用委托事件,处理每一个匹配项 示例代码: string msg = "我的邮箱是zxh@itcast.cn的邮箱是yzk365@chezhihui.com减 ...