runxinzhi.com
首页
百度搜索
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、可以方便的加入存取的控制语句,限制不合理的操作
相关阅读:
HDU1266 Reverse Number
codevs1380 没有上司的舞会
codevs1163 访问艺术馆
codevs2144 砝码称重 2
codevs1553 互斥的数
codevs1230 元素查找
codevs3118 高精度练习之除法
codevs1245 最小的N个和
codevs1063 合并果子
codevs1052 地鼠游戏
原文地址:https://www.cnblogs.com/holly8/p/5497918.html
最新文章
UVA10340 POJ1936 ZOJ1970 All in All【字符串匹配】
UVA1587 UVALive3214 POJ2160 Box
UVA1587 UVALive3214 POJ2160 Box
UVA202 UVALive5141 Repeating Decimals
UVA202 UVALive5141 Repeating Decimals
UVA1368 UVALive3602 ZOJ3132 DNA Consensus String【贪心】
UVA1368 UVALive3602 ZOJ3132 DNA Consensus String【贪心】
UVA232 UVALive5171 POJ1888 Crossword Answers
UVA232 UVALive5171 POJ1888 Crossword Answers
UVA227 Puzzle
热门文章
UVA227 Puzzle
UVA455 Periodic Strings
UVA455 Periodic Strings
UVA1225 UVALive3996 Digit Counting
UVA1225 UVALive3996 Digit Counting
UVA1585 UVALive3354 Score
UVA1585 UVALive3354 Score
UVA1584 UVALive3225 Circular Sequence
UVA1584 UVALive3225 Circular Sequence
HDU1266 Reverse Number
Copyright © 2020-2023
润新知