【学习笔记】面向对象和封装
一、面向对象思想概述
面向对象不好理解,不如我们来举个例子,有一家餐馆,如果它是面向大众的,那么它可能售一些平价菜;如果是面向高端人群,那么可能售价格相对较高的菜品。因此,面向谁可以理解为看重谁、关注谁,在编程中,有两种主流思想:面向过程和面向对象。
面向过程:当需要实现一个功能时,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
面向对象:当需要实现一个功能时,不关心具体的步骤,而是找一个已经具有该功能的“人”来帮助。
下面通过一个例子来理解:(要求打印格式为:[10, 20, 30, 40, 50])
public static void main(String[] arg){int[] array = { 10, 20, 30, 40, 50 };//使用面向过程,每一个步骤细节都要亲力亲为System.out.print("[");for (int i=0;i<array.length;i++){if(i==array.length-1){//如果是最后一个元素System.out.println(array[i]+"]");}else{//如果不是最后一个元素System.out.print(array[i]+", ");}}System.out.println("######################");//使用面向对象//找一个JDK给我们提供好的Arrays类,//其中有一个toString方法,直接就能把数组变成想要的格式的字符串System.out.println(Arrays.toString(array));}
二、类和对象
环顾四周,我们会发现很多对象,比如桌子、椅子、同学、老师等。桌椅属于办公用品,师生都是人类。而我们需要用Java语言来模拟现实世界的事物,那么如何模拟?什么是类?什么是对象?
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
属性:该事物的状态信息:名字、体重、年龄...(成员变量)
行为:该事物能做什么:走、跑...(成员方法)
对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
现实中,一类事物的一个实例
类和对象的关系:
类是对一类事物的描述,是抽象的。
对象的一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
下面通过一个例子来理解:(定义一个类,用来模拟“学生”事物)
分析:
属性(是什么) :姓名,年龄
行为(能做什么) :吃饭,睡觉,学习
对应到java的类中,
成员变量(属性): String name;//姓名
int age;//年龄
成员方法(行为): public void eat(){}//吃饭
public void sleep(){}//睡觉
public void study(){}//学习
注意: 1、成员变量是直接定义在类当中的,在方法外边
2、成员方法不用写static关键字
3、如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样
代码实现:
public class Student {//成员变量String name;//姓名int age;//年龄//成员方法public void eat(){System.out.println("吃饭!");}public void sleep(){System.out.println("睡觉!");}public void study(){System.out.println("学习!");}
}
public static void main(String[] args){//1.导包//需要使用的Student类,和本类位于同一个包下,可以省略导包语句不写//2.创建,格式://类名称 对象名 = new 类名称();//根据Student类,创建了一个名为stu的对象Student stu = new Student();//3.使用其中的成员变量,格式://对象名.成员变量名System.out.println(stu.name);//nullSystem.out.println(stu.age);//0System.out.println("##################");//改变对象当中的成员变量数值内容//将右侧的字符串,赋值交给stu对象当中的name成员变量stu.name="xiaobai";stu.age=18;System.out.println(stu.name);System.out.println(stu.age);System.out.println("##################");//4.使用对象的成员方法,格式:// 对象名.成员方法名(参数)stu.eat();stu.sleep();stu.study();}
三、其他
(1)局部变量和成员变量:
1、定义的位置不一样【重点】
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中
2、作用范围不一样【重点】
局部变量:只有方法当中才可以使用,出了方法就不能再用
成员变量:整个类全部都可以通用
3、默认值不一样【重点】
局部变量:没有默认值,如果要想使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样
4、内存的位置不一样(了解)
局部变量:位于栈内存
成员变量:位于堆内存
5、生命周期不一样(了解)
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
【注】1、方法的参数就是局部变量
2、当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。
(2)面向对象三大特征:封装性、继承性、多态性
封装性在java当中的体现:(封装就是将一些细节信息隐藏起来,对于外界不可见。)
1、方法就是一种封装
2、关键字private(提高代码安全性)也是一种封装
【注】1、一旦使用了private进行修饰,那么本类中仍然可以随意访问。但是,超出本类范围之外就不能直接访问!(用get,set方法)
2、对于基本类型当中的boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变
(3)this
如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名
“通过谁调用的方法,谁就是this。”
(4)构造方法
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
格式:public 类名称(参数类型 参数名称){
方法体
}
【注】
1、构造方法的名称必须和所在的类名称完全一样,就连大小写也是一样
2、构造方法不要写返回值类型,连void都不写
3、构造方法不能return一个具体的返回值
4、如果没有编写任何构造方法,那么编译器将会默认一个构造方法,没有参数、方法体什么事情都不做
public Student() {}
5、一旦编写了至少一个构造方法,那么编译器将不再默认一个构造方法
6、构造方法也是可以进行重载的。(重载:方法名一样,参数列表不一样)
public static void main(String[] args){Student stu1=new Student();//无参构造System.out.println("##########");Student stu2=new Student("小白",20);//全参构造System.out.println("姓名:"+stu2.getName()+",年龄:"+stu2.getAge());//如果需要改变对象中的成员变量数据内容,仍然需要使用setXxx方法stu2.setAge(21);System.out.println("姓名:"+stu2.getName()+",年龄:"+stu2.getAge());}
(5)一个标准的类(Java Bean)通常要拥有下面四个组成部分:
1、所有的成员变量都要使用private关键字修饰
2、为每一个成员变量编写一对Getter/Setter方法
3、编写一个无参数的构造方法
4、编写一个全参数的构造方法
public class Student {//成员变量private String name;//姓名private int age;//年龄//无参构造方法public Student() {}//全参构造方法public Student(String name, int age) {this.name = name;this.age = age;}//Getter、Setter方法public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}//成员方法public void eat(){System.out.println("吃饭!");}public void sleep(){System.out.println("睡觉!");}public void study(){System.out.println("学习!");}
}
【学习笔记】面向对象和封装相关推荐
- Java学习笔记——面向对象
声明:文章首发于我的个人微信公众号Java编程社区,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人类是 ...
- Java学习笔记——面向对象 1
声明:本文首发于我的个人微信公众号[Java编程社区],查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人 ...
- java学习之面向对象和封装
面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情. 面向过程强调步骤 ...
- [学习笔记]面向对象VS面向过程
1.编程范式 为了实现同一个任务不同的编程方式类别称为编程范式 2.面向过程编程 面向过程从上到下运行,将一个大问题分解成小问题,再将小问题继续分解成足够简单在一定范围内可以解答的小问题为止! 3.面 ...
- 系统架构师学习笔记-面向对象方法
目录 基本概念 统一建模语言(UML) 基本概念 对象(Object):它是系统用来描述客观事物的一个实体,是构成系统的一个基本单位. 类(Class):它是具有相同属性和方法的一组对象的集合. 继承 ...
- python学习笔记(面向对象,类)
一.类的定义 1.类的基本结构 #命名规则: 驼峰法 class Student(): # 使用class 定义类a= 1 # 变量name = '小明'def aa(self): # 函数print ...
- SV学习笔记—类的封装和继承
1.类的封装 面向对象(OOP)编程的核心思想就是封装,封装就是指将对象的属性和方法封装起来,类就是这个封装的载体.通过封装可以将程序实现细节隐藏起来,并通过public/protected/loca ...
- 我的学习笔记 —— 面向对象的SOLID原则
面向对象SOLID原则的学习心得 单一职责原则:Single Responsibility Principle 开闭原则 :Open Closed Principle 里氏替换原则:Li ...
- JavaScript学习笔记---面向对象编程-JS高级部分(pink老师)
目录 一.面向对象编程介绍 1.1 两大编程思想 1.面向过程编程POP(Process-Oriented Programming) 2.面向对象编程OOP(Object Oriented Progr ...
- Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式
一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...
最新文章
- 如何在 7 天内写一个程序? | 每日趣闻
- 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
- hdu 4640(状压dp)
- centos7 文件名中文乱码_解决Centos7下中文显示乱码
- vmware_vcenter_api
- (1)kendo UI使用基础介绍与问题整理——简单说明
- 十大WordPress安全设置技巧
- Node.js 模块系统
- 剑指offer (05):替换字符串中空格 (C++ Python 实现)
- Django中的form模块的高级处理
- 玩了一年多电子商务,接触各种品类产品
- 什么情况下需要搭建大数据平台
- ubuntu16.04安装python3.6-dev超时_vitrualBox+ubuntu16.04安装python3.6最新教程及详细步骤...
- Nodejs 获取本机IP地址
- Vue中调用LiverPlayer H5播放器实现萤石云视频监控
- 分析如何编写一个timer程序(以blt_soft_timer为例)
- 计算机组成原理免费阅读,计算机组成原理1.docx
- 详解spring的IOC控制反转和DI依赖注入
- 杨令云玩过的那些FC游戏-三国志英烈传(三)
- [Shade] 官方例子:includes-excludes