会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
面朝太阳就是光!
博客园
首页
新随笔
新文章
联系
管理
订阅
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、可以方便的加入存取的控制语句,限制不合理的操作
posted on
2019-11-21 16:37
面朝太阳就是光!
阅读(
134
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
公告