java学习之面向对象和封装
面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情。
面向过程强调步骤,面向对象强调对象(结果)。
面向对象的思想更加符合我们思考的习惯,它可以将复杂的事情简单化,并且将我们从执行者变成了指挥者。
面向对象的语言中包含了三大基本特征:封装、继承和多态。
类和对象
- 类
类是一组相关属性和行为的集合。可以把类看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中描述一类事物主要从两个方面:
1. 属性:该事物的状态信息
2. 行为:该事物能够做什么
- 对象
对象是一类事物的具体体现,对象是类的一个实例,必然具备该类事物的属性和行为。
- 类和对象的关系
类是对一类事物的描述,是抽象的
对象是一类事物的实例,是具体的
类是对象的模板,对象是类的实例
例如:现在定义一个类来模拟“学生”事物,那么其中就有两个组成部分:
★ 属性(是什么)
姓名 、年龄
★ 行为(能做什么)
吃饭 、睡觉 、学习
对应到java的类当中:
★ 成员变量(属性)
String name ;
int age ;
★ 成员方法(行为)
public void eat(){ }
public void sleep(){ }
public void study(){ }
注意:1. 成员变量是直接定义在类当中的,在方法外边
2. 成员方法不要写static关键字
- 通常情况下一个类并不能直接使用,需要根据类创建一个对象才能使用:
1. 导包:即指出需要使用的类在什么位置
import 包名称.类名称
对于和当前类属于同一个包的情况,可以省略导包语句不写
2. 创建
格式: 类名称 对象名 = new 类名称() ;
Student stu = new Student() ;
3. 使用:分为两种情况
★ 使用成员变量 :对象名.成员变量名
★ 使用成员方法:对象名.成员方法名(参数)
注意:如果成员变量没有进行赋值,则会有一个默认值,规则和数组一样
当一个对象作为参数传递到方法当中去时,实际上传递进去的是对象的地址。
当使用对象作为方法的返回值时,实际上返回的是对象的地址。
- 局部变量和成员变量
1. 定义的位置不一样(重要)
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中
2. 作用的范围不一样(重要)
局部变量:只有在方法中才可以使用,出了方法就不可以再使用
成员变量:整个类都可以通用
3. 默认值不一样(重要)
局部变量:没有默认值,如果想要使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,默认值的规则和数组一样
4. 内存的位置不一样(了解)
局部变量:位于栈内存
成员变量:位于堆内存
5. 生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象的创建而诞生,随着对象被垃圾回收而消失
【有static的是普通方法,普通方法直接调用;没有static是成员方法,成员方法要通过对象来调用】
- 面向对象三大特征:封装 、继承 、多态
--- 封装性在Java中的体现:
1. 方法就是一种封装
2. 关键字private也是一种封装
【 封装就是将一些细节信息隐藏起来,对于外界不可见 】
--- 封装的好处在于可以取到保护代码和数据的作用,增强了代码的安全性,同时也让代码更容易理解与维护。
- 封装的操作 -- private关键字
private使用格式: private 数据类型 变量名 ;
一旦使用了private进行修饰,则本类当中仍然可以随意访问,但是超出了本类范围之外就不可以直接访问成员变量了,但是可以间接访问,间接访问private成员变量是通过定义一对Getter / Setter 方法
其中命名规则必须是:setXX 或 getXX
对于Getter来说 ,不能有参数 ,返回值类型和成员变量对应
对于Setter来说 , 不能有返回值,参数类型和成员变量对应
public class Student {private String name ;private int age ;public void setName(String n){name = n ;}public String getName(){return name ;}}
- this 关键字
this的含义:this代表所在类的当前对象的引用(地址值)
当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量,如果此时需要访问本类当中的成员变量,需要使用格式: this.成员变量名 【this帮助在重名的情况下起到区分的作用】
【记住:方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。】
- 构造方法
--- 当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
( 即专门用来创建对象的方法,当通过关键字new来创建对象时,其实就是在调用构造方法 )
【无论是否定义构造方法,所有的类都有构造方法,因为java自动提供一个无参数构造方法,一旦自己定义了构造方法,java自动提供的默认无参数构造方法就会失效 】
--- 格式: public 类名称(参数类型 参数名称){
方法体;
}
public class Student {private String name ;private int age ;// 无参数的构造方法public Student(){}// 有参数的构造方法public Student(String name , int age){this.name = name ;this.age = age ;}}
--- 注意:
1. 构造方法的名称必须和所在类的名称完全一样,连大小写也要一样
2. 构造方法不用写返回值类型,连void都不用写
3. 构造方法不能return一个具体的返回值
4. 如果没有编写任何的构造方法则编译器会赠送一个构造方法,赠送的构造方法没有参数,
方法体什么都不做
public Student(){ }
5. 一旦编写了至少一个构造方法则编译器将不会再赠送构造方法
6. 构造方法也是可以进行重载的
重载:方法名称相同,参数列表不同
全参数构造方法的好处在于可以直接将现存的数据传入而不使用Setter方法,但如果要修
改数据还是要Setter方法(获取还是要用Getter方法)
标准代码 -- JavaBean
JavaBean 是 java 语言编写类的一种标准规范
一个标准的类通常要拥有下面四个组成部分:
1. 所有的成员变量都要使用private关键字修饰
2. 为每一个成员变量编写一对Getter/Setter方法
3. 编写一个无参数的构造方法
4. 编写一个全参数的构造方法
以学生类为例编写符合 JavaBean 规范的类 ,标准代码如下:
public class Student{// 成员变量private String name ;private int age ;// 构造方法public Student(){}public Student(String name , int age ){this.name = name ;this.age = age ;}// 成员方法public void setName(String name){this.name = name ;}public String getName(){return name ; }public void setAge(int age){this.age = age ;}public int getAge(){return age ;}}
测试类代码如下:
public class TestStudent{public static void main(String[] args){// 无参数构造使用Student s = new Student() ;s.setName("小池") ; s.setAge(22) ; System.out/println(s.getName() + "-----" + s.getAge()) ;// 带参数构造使用Student st = new Student("小君",22);System.out.println(st.getName() + "-----" + st.getAge()) ;}}
java学习之面向对象和封装相关推荐
- 深圳Java学习:面向对象【重点知识】
深圳Java学习:面向对象[重点知识] 在Java的学习中,面向对象应该是Java技术的重中之重,虽然在生活中没有对象可以面对,但在技术中还是要一直接触面对对象,而且不可避免.今天千锋小编对面向对象来 ...
- Java学习笔记——面向对象
声明:文章首发于我的个人微信公众号Java编程社区,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人类是 ...
- Java学习笔记——面向对象 1
声明:本文首发于我的个人微信公众号[Java编程社区],查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人 ...
- #Java学习总结面向对象+抽象+接口
1.类和对象 类 类是对现实生活中一类具有共同属性和行为的事务的抽象:类是对象的数据类型,类是具有相同属性和行为的一组对象的集合.简单理解:类就是对现实事务的一种描述. 类的组成: 属性:指事物的特征 ...
- Java学习:面向对象编程
探索面向对象编程 面向对象 任务1.采用面向对象方式求三角形面积 (一)编程实现 (二)讲解知识点 (三)拓展练习 任务1.创建学生类并测试 任务2.采用面向对象求解一元二次方程 面向对象 面向对象( ...
- Java学习第十二天<封装详解><继承><super详解><方法重写><多态>
封装详解 //类 public class Student {//名字 学号 性别 属性私有(new 以后不能赋值)private String name;private int id;private ...
- day8 Java学习(面向对象.多态接口)
面向对象 多态: 概述:事物存在的多种形态. 多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问: 编译看左边(父类),运行左边(父类) ...
- 【java学习】 面向对象编程+java购物车系统
文章目录 一.设计对象 二.内存机制 三.购物车系统 四.构造器 构造器 this关键字的作用 一.设计对象 类和对象是什么? 类:是共同特征的描述(设计图); 对象:是真实存在的具体实例; 如何设计 ...
- Java学习_day009面向对象(oop):对象和类(下)
方法的签名:方法名+参数列表 在一个类中不允许出现多个方法签名重复的情况 一.方法的重载(overload) 发生在同一个类中,方法名称相同,参数列表不同,方法体就不同. 编译器在编译时会根据方法的签 ...
最新文章
- GBDT和GNN结合,结果怎么样?
- [ML]--梯度下降 GD 的理解和探究
- 为什么我的对象被 IntelliJ IDEA 悄悄修改了?
- php js 比较,PHP与JS的比较
- android手机安装python并写代码运行
- 使用画图软件gunplot出现的问题和解决办法
- 激活函数、损失函数及其优化方法总结
- Maple 教程(一)---初认识
- 数据库实验一:创建数据库和表
- MIUI主题风格_一种Android系统换肤功能的设计
- Win7系统自动关机设定让你更轻松
- 运放电路的工作原理_一文教你巧识滤波、稳压、比较、运放电路
- FMRI及NMR简介
- Android图像处理-像素化的原理及实现
- NFT 的价值从何而来
- js和java导出txt文件怎么打开文件_JS本地文件操作,JS读写txt文件
- 一元多项式式计算器(哈工大数据结构实验)
- c语言程序图书检索源代码,C语言程序设计(图书管理系统)源代码 倾情奉献
- amp;#9733;《唐琅探案》后记【2】
- Matlab绘制面积堆叠图/面积图