黑马程序员----面象对象及封装
来源:互联网 发布:plc梯形图编程规则 编辑:程序博客网 时间:2024/06/05 19:40
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
第一讲 面向对象的概述
一.概述
面象对象是一种符合人类思维习惯的编程思想.。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
面向过程: 步骤和过程
面向对象: 对象
面向对象基于面向过程
举例:
洗衣服:
面向过程: 脱下衣服 --- 放进盆里 --- 加点水 ---- 加点洗衣粉 --- 泡一会儿 --- 搓一搓 --- 涮一下 --- 捞出来晾干
面向对象: 脱下衣服 --- 放进全自动洗衣机里面 --- 捞出来晾干
吃饭:
面向过程: 买菜 --- 摘菜 --- 洗菜 --- 切菜 ---- 炒菜 --- 盛出来 --- 吃
面向对象: 上餐馆 --- 服务员点餐 ---- 厨师做饭 --- 服务员盛出来 --- 吃
我们在现实生活中怎么描述一个事物的呢?
描述学生:
姓名 , 年龄, 性别 .....
学习 , 吃饭, 睡觉 ....
属性: 事物的描述信息
行为: 该事物可以做什么事情
而我们java语言的最小单位是类,那么我们就应该将事物和类对应起来
事物 类
属性 成员变量
行为 成员方法
成员变量: 和之前定义变量的方式一样,只不过位置不同,在类中方法外
成员方法: 和之前定义方法一样,只不过去掉static(以后在讲解)
类: 就是一组相关属性和行为的集合,是一个抽象的东西
对象: 就是该类的一个具体体现
举例: 学生: 类
班长: 对象
二,下面用代码说下成员变量跟成员方法
<span style="color:#000099;">class Student {// 成员变量String name = "张三";// 姓名int age = 24 ;// 年龄String sex = "女";// 性别// 成员方法// 学习public void study(){System.out.println("学生在学习....");}// 吃饭public void eat(){System.out.println("学习饿了该吃饭了....");}// 睡觉public void sleep(){System.out.println("学习累了该睡觉了....");}}</span>第二讲 面向对象类的使用及成员方法的调用
一,类的使用
类是一个抽象的东西,我们不能直接使用,我们需要该类的一个具体体现(对象)
怎么得到这个对象: 格式: 类名 对象名 = new 类名();
二,获取成员变量
格式: 对象名.变量名
三,成员方法的调用
格式: 对象名.方法名(...)
四,下面用代码加注释实现
<span style="color:#000066;">// 学生类class Student {// 成员变量/*String name = "张三";// 姓名int age = 24 ;// 年龄String sex = "女" ;// 性别*/String name ;// 姓名// nullint age ;// 年龄// 0String sex ;// 性别// null// 成员方法// 学习public void study(){System.out.println("学生在学习....");}// 吃饭public void eat(){System.out.println("学习饿了该吃饭了");}// 睡觉public void sleep(){System.out.println("学习累了该睡觉了");}}// 测试类class StudentDemo {public static void main(String[] args){// 创建学生对象// 类名 对象名 = new 类名();Student s = new Student();// 给对象赋值s.name = "张三";s.age = 24 ;s.sex = "男";// 如何获取成员变量// 格式: 对象名.变量名/*String name = s.name ;System.out.println(name);*/System.out.println(s.name + "----" + s.age + "----" + s.sex);// 调用成员方法// 格式: 对象名.方法名(...)s.study();s.eat();s.sleep();System.out.println("----------------------------");// 类名 对象名 = new 类名();Student s2 = new Student();// 给成员变量赋值s2.name = "李四";s2.age = 21 ;s2.sex = "女";System.out.println(s2.name + "----" + s2.age + "----" + s2.sex);// 格式: 对象名.方法名(...)s2.study();s2.eat();s2.sleep();</span>第三讲 成员变量与局部变量的区别及this关键字
一,在类中的位置不同
局部变量: 在方法定义中或者方法声明上
成员变量: 在类中方法外
<span style="color:#000066;">class student{int a = 10;//这是成员变量}public class studentDemo {public static void main(String[] args) {int a = 10;//这是局部变量}}</span>
二,在内存中的位置
局部变量: 在栈内存
成员变量: 在堆内存
三,生命周期不同
局部变量: 随着方法的调用而产生,随着方法的消失而消失
成员变量: 随着对象的创建而产生,随着对象的消失而消失
四,默认值不同
局部变量: 局部变量在使用的时候必须对其赋值
成员变量: 系统会为其分配一个默认值
注意;局部变量是可以和成员变量同名的,我们变量的访问遵循一个"就近原则"。为解决成员变量与局部变量的冲突,java给我们提供了一个关键字this,它可以明确的去访问同一个类的成员变量 this: 代表的是本类对象的一个引用
谁调用方法,这个方法中的this代表的就是谁
第四讲 参数传递
一,java语言的的参数传递问题:
基本数据类型的传递,形式参数的改变,对实际参数没有直接影响
引用数据类型的传递,形式参数的改变,对实际参数是有直接影响的
如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
<span style="color:#000066;">class Demo {public int add(int a , int b){return a + b ;}}class Student {public void method(){System.out.println("student...method方法被调用了");}}class Demo2 {// 如果以后看到方法上需要的是一个类类型的变量,那么这里其实需要的是该类的一个对象public void function(Student s){// Student s = new Student();s.method();}}// 测试类class StudentDemo {public static void main(String[] args){// 创建Demo对象Demo d = new Demo();// 赋值调用int result = d.add(10 , 30);System.out.println(result);// 创建Demo2的对象Demo2 d2 = new Demo2();// 创建Student对象Student s = new Student();//调用function方法d2.function(s);}}</span>第五讲 匿名对象
一,匿名对象:
就是没有名字的对象
作用:
调用方法,仅仅调用一次的时候
作为方法的参数传递
<span style="color:#000066;">class Student {public void show(){System.out.println("show方法被调用了");}}class Demo {public void method(Student s){s.show();}}// 测试类class NoNameDemo {public static void main(String[] args){// 创建学生对象Student s = new Student();// 调用show方法s.show();s.show();System.out.println("----------------");// 匿名对象new Student().show();new Student().show();//输出结果是一样, 每new一次会重新创建一个对象,这两个对象是不同的,不相等的System.out.println("----------------");// 创建Demo对象Demo d = new Demo();// 创建Student对象Student s1 = new Student();// 调用method方法d.method(s1);System.out.println("----------------");// 使用匿名对象调用method方法d.method(new Student());System.out.println("----------------");new Demo().method(new Student());}}</span>第六讲 面向对象三大特征之一 封装
一,概述
我们使用成员变量对其赋值,出现了问题,我们需要对数据进行校验.
StudentDemo是一个测试类,测试类测试的时候需要包含所有的数据: 正确数据 ,错误数据,临界数据.
那么我们就不能将校验逻辑写在测试类
我们只能写在Student类中: 我们校验的时候需要编写一些逻辑语句,语句只能写在方法里面
我们只是定义了一个方法,如果我们不使用方法对其赋值,而是使用属性对其赋值,那么还没有达到一个安全的效果
于是乎,我们就需要其强制使用方法来对其年龄赋值,我们就需要这个age不能被外界访问
这时候java就给我们提供了一个关键字: private(私有的)
封装的思想:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装好处
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
二,private关键字
1 private的特点:
A: private是一个修饰符(私有的)
B: 可以用来修饰成员变量和成员方法
C: 被private修饰的成员只能在本类中访问
<span style="color:#000066;">class Private {// 成员变量// int num = 10 ;private int num = 20 ;public void show(){System.out.println(num);}private void function(){System.out.println("Private...function方法被调用了");}public void function2(){function();}}// 测试类class PrivateDemo {public static void main(String[] args){// 创建Private对象Private p = new Private();// 输出num// 错误的: 因为num被private修饰了// System.out.println(p.num);// 调用show方法p.show();// 调用function方法// 错误的: 因为function被private修饰了// p.function();// 调用function2方法p.function2();}}</span>private最常见的应用:
A: 把成员变量通过private修饰
B: 提供对应的getXxx()和setXxx()方法
<span style="color:#000066;">class Student {// 成员变量private String name ;// 姓名private intage ;// 年龄private String sex ;// 性别// 提供get和set方法public String getName(){return name ;}public void setName(String n){name = n ;}public int getAge(){return age ;}public void setAge(int a){age = a ;}public String getSex(){return sex ;}public void setSex(String s){sex = s ;}// 提供一个show方法显示所有的成员变量public void show(){System.out.println(name + "---" + age + "----" + sex);}}// 测试类class StudentDemo {public static void main(String[] args){// 创建学生对象Student s = new Student();// 给成员变量赋值// 错误的: 因为name被private修饰// s.name = "张三";s.setName("刘亦菲");s.setAge(28);s.setSex("女");// 使用show方法显示所有的成员变量s.show();// 使用get方法获取所有的成员变量System.out.println(s.getName() + "---" + s.getAge() + "----" + s.getSex());}}</span>
- 黑马程序员----面象对象及封装
- 黑马程序员--面象对象
- 黑马程序员关于面象对象以及它的三大特性:封装 继承 多态
- 黑马程序员__JDBC事务及将结果封装成对象
- 黑马程序员--对于面象对象的总结
- 黑马程序员--对于面象对象的总结
- 黑马程序员---OC封装
- 黑马程序员_java面向地象-封装
- 黑马程序员-OC语言之封装
- 黑马程序员——Java 面型对象_封装
- 黑马程序员————面象对象的基本知识要点
- 黑马程序员--java面向对象
- 黑马程序员--面向对象
- 黑马程序员 面向对象及三大特性之封装
- 黑马程序员-java面向对象的概念及封装总结
- 黑马程序员_java基础之面向对象封装及继承
- 黑马程序员----java基础面向对象特点及封装
- 黑马程序员-ios学习笔记 oc 封装
- JdbcTemplate + sqlserver 2005 分页+Extjs
- nginx配置tomcat与配置rewrite。
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- Android取消标题栏&强制设置横(竖)屏方法
- 动态数组的模板类/求指定个数的素数
- 黑马程序员----面象对象及封装
- android学习笔记(二)布局
- AlphaAnimation无效
- ethercat Mark一下,后续在写
- 回顾系列2-部落战争
- tfs 安装相关问题
- Java中的instanceof关键字
- iOS唯一标示符引导
- Xcode 配置SVN详细步骤