栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

7.面向对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7.面向对象

文章目录
  • 今日内容
  • 一、面向对象概念
  • 二、类和对象
  • 三、类的设计
  • 四、封装
  • 五、构造器
  • 六、JavaBean标准类


今日内容
  • 面向对象
  • 类与对象
  • 三大特征——封装
  • 构造器

一、面向对象概念

面向对象程序设计: (核心: 设计)
  简称: OOP (Object Oriented Programming)


面向对象思想的分类:

第一阶段: 面向对象基础思想(JavaSe阶段, JDBC, Web阶段), 掌握时间: 前一个月
第二阶段: 面向接口思想(Web阶段, 框架, 项目), 掌握时间: 前6个月
第三阶段: 面向切面思想(Spring框架源码), 掌握时间: 至少5-8年

面向过程思想:

代表语言: C语言
核心单位: 函数(其实就是Java中方法)
思想体系: 比喻"执行者"身份, 强调的是"过程", 偏重事情"怎么做"

面向对象思想:

代表语言: Java语言
核心单位: 类
思想体系: 比喻"指挥者"身份, 强调的是"对象", 偏重事情"找谁做"

思想的实际应用:

● 如果解决一些较小的问题, 往往选择"面向过程思想";
● 如果解决一些较大的问题, 往往选择"面向对象思想";
● 无论是面向对象思想还是面向过程思想没有好坏之分, 都是人们解决问题的思考习惯;

面向对象三大特征:

  封装, 继承, 多态


二、类和对象

类:

含义: 事务在程序中抽象的表现形式
	举例: 人类, 猫类, ......
属性: 事务的属性信息
	例如: 人类: 姓名, 年龄, 身份证号, 地址, ......
行为: 事务的行为动作
	例如: 人类: 吃, 睡, 喝, 玩, 工作, 学习, ......

对象:

含义: 是这一类事务的具体体系
属性: 例如: 人类: 小明, 18, 410101159985484, 河南, ......
行为: 例如: 人类: 怎么吃, 怎么睡, ......

类与对象的关系:

● 类是对象的抽象, 模板;
● 对象是类的实例, 实体;
● 对象是通过类创建的, 先有类, 后有对象;

三、类的设计

类的分类:

● API系统中提供好的类
● 程序员自行设计类(自定义的类)

类的设计:

步骤:
	1.根据事务的属性和方法设计最基础的"模板类";
	2.在模板类的基础上添加封装思想
	3.根据实际需求, 加入构造器, 完成最基础的JavaBean标准类的设计
	4.根据实际需求, 加入静态的概念
	5.根据实际需求, 加入继承思想
	6.根据实际需求, 加入抽象概念
	7.根据实际需求, 加入"最终"概念
	8.根据实际需求, 加入接口概念
	9.根据实际需求, 加入内部类的概念
	10.根据实际需求, 加入枚举的概念
	11.根据实际需求, 加入注解概念
	12.根据实际需求, 加入构造器代码块
	13.根据实际需求, 加入静态代码块

设计模板:

成员: 类作为模板的一部分
	例如: 字段(成员量)、成员方法、成员内部类
内容: 写在类中, 但不会作为模块的一部分, 只作为工具进行使用
	例如: 构造器、构造器代码块、静态代码块

类的成员:

成员量(归属于: 属性)
	含义: 类中成员变量和成员常量的统称
成员方法(归属于: 行为)
成员内部类(归属于: 暂不涉及)

**成员量(属性): ** 声明在类中代码块外的变量, 包含"实例变量"和"静态变量"

成员变量/常量:
	实例变量/常量:
		没有static关键字修饰的成员变量, 实例变量归属于"对象";
	静态变量/常量: 
		被static关键字修饰的成员变量, 静态变量归属于"类";	

成员方法(行为): 声明在类中的方法, 包含"实例方法"和"静态方法"

成员方法:
	实例方法:
		没有static关键字修饰的成员方法, 实例方法归属于"对象";
	静态方法: 
		被static关键字修饰的成员方法, 静态方法归属于"类";	

成员内部类():

暂不涉及

类的设计格式:

public class 类名{
    //实例变量
    //实例方法
}

**练习: **学生类的设计

public class Student{
    //实例变量
    String name;
    int age;
    //实例方法
    public void show(){
        System.out.println("我叫" + name + ", 今年" + age + "岁了!");
    }
}

对象的创建和使用:

创建格式:
	类名 对象名 = new 类名(实参);
使用格式:
	对象名.实例变量;
	对象名.实例方法(实参);

练习: 创建和使用学生类

public class Test{
    public static void main(String[] agrs){
        //创建学生对象
        Student s1 = new Student();
        System.out.println(s1);
        
        //给s1进行赋值
        s1.name = "小明";
        s1.age = 13;
        
        //获取s1对象的姓名和年龄
        System.out.println(s1.name);
        System.out.println(s1.age);
        
        //调用s1对象的方法
        s1.show();
    }
}

对象使用的内存图解:


实例变量和局部变量的区别:

● 实例变量: 声明在类中代码块外, 且没有static关键字修饰符的成员变量
● 局部变量: 声明在代码块内或者方法声明上的变量

变量根据定义位置的不同,我们给变量起了不同的名字。
● 代码中的位置不同:
	○ 实例变量:类中,方法外
	○ 局部变量:方法内部或者方法声明上(形参列表)
● 内存中的位置不同
	○ 实例变量:堆内存
	○ 局部变量:栈内存
● 默认值不同
	○ 实例变量:有默认值
	○ 局部变量:没有默认值
● 代码中的作用域不同
	○ 实例变量:类中(静态成员除外)
	○ 局部变量:所属方法中
● 内存中的生命周期不同
	○ 实例变量:随着对象的创建而加载,随着对象的消亡而消失
	○ 局部变量:随着方法的调用而加载,随着方法的出栈而消失
● 加载方式和次数不同
	○ 实例变量:随着对象的创建而加载,每创建一次对象就会加载一次
	○ 局部变量:随着方法的调用而加载,每调用一次方法就会加载一次
● 修饰符的使用不同
	○ 实例变量:程序中各种修饰符可以根据需求进行修饰
	○ 局部变量:只能使用final进行修饰

**this关键字的第一种使用方法: **

场景:
	子类的构造器中或子类的实例方法
格式:
	this.实例变量名;
	this.实例方法名(实参);
作用:
	用来区分同一个类中同名的实例变量和局部变量
含义:
	哪个对象调用了this关键字所在的构造器或实例方法, this关键字就代表哪个对象

四、封装

封装:

含义:
   在程序中给不同的声明内容添加不同的权限访问级别, 使之提高程序的安全性和访问性
核心:
   四种权限访问级别

权限访问级别:

分类(按照从小到大):
	private < 缺省(sheng, 什么都不写) < protected < public

private关键字

含义:
	私有的
修饰:
	实例变量, 静态变量, 实例常量, 静态常量, 实例方法, 静态方法, 实例成员内部类, 静态成员内部类
特点:
	被private修饰的内容, 只能在本类中进行访问和使用, 在本类之外无法进行使用

私有实例变量

含义:
	被private关键字修饰的实例变量
特点: 
	被private修饰的内容, 只能在本类中进行访问和使用, 在本类之外无法进行使用
格式:
	private 数据类型 变量名;
步骤:
	1.将"模板类"中所有的实例变量进行私有化
	2.针对每个被private修饰的变量对外提供一对公共访问方式(getXxx()和setXxx())
		setXxx()的两个明确:
				返回类型: void
				形参列表: 存储数据的数据类型 变量名 
		getXxx()的两个明确:
				返回类型: 获取数据的数据类型
				形参列表: 空

练习: 封装学生类

public class Student{
    private String name; //学生姓名
    private int 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;
    }
}
注意:
	IDEA快速创建Get和Set方法: Alt + insert 选择"Getter And Setter"
	IDEA快速创建构造方法: Alt + insert 选择"Constructor"
	IDEA快速创建toString()方法: Alt + insert 选择 "toString()"

五、构造器

构造器 (构造方法)

含义:
	1.关键字new会通过构造器对对象进行堆内存区域的开辟
	2.针对对象的成员进行实例初始化
	3.如果是有参的构造器可以针对对象的属性进行赋值操作
格式:
	修饰符 构造器名() {}
特点:
	1.构造器的名字必须与类名相同
	2.构造器没有返回类型, 而且连void都没有
	3.构造器的格式和方法类似, 也叫做构造方法; 构造器有若干方法, 构造器中的内容共有三个部分
		第一部分(暂不涉及): 隐式或显示的super(参数)或显式的this(实参);
		第二部分(暂不涉及): 隐式加载实例成员和构造代码块
		第三部分: 构造器中除this(实参)或super(实参)的显示代码
		注意: 这三部分执行优先顺序  第一部分 > 第二部分 > 第三部分
	4.当一个类没有任何的构造器时, JVM的编译器会在编译时自动补全一个public的无参构造器, 供其
	   进行创建对象时初始化成员;
 	5.构造器支持方法的重载
注意:
	setXxx和构造器的区别:
    1.setXxx()只有赋值操作, 有参构造器除了赋值操作外, 也有初始化对象成员的作用
    2.setXxx()可以反复调用多次, 构造器只能在创建对象时使用唯一的一次
		

六、JavaBean标准类

含义 + 内容

含义:
	在实际开发中没有上级的特殊说明情况下, 程序员设计类的约定俗称的规范
内容:
	必须有:
		1.类的声明必须由public修饰
		2.一个.java文件中只允许包含一个类
		3.无参构造器
		4.所有的成员量必须进行私有化
		5.针对每个被私有化的成员量提供一对的公共访问方式(setXxx()和getXxx())
	可以有:
		1.根据实际情况需求添加合适有参构造
		2.根据实际需求添加构造器代码块(暂不涉及)
		3.根据实际需求添加静态代码块(暂不涉及)
		4.根据实际需求添加toString()、hashCode()、equals()(暂不涉及)
		5.根据实际需求添加内部类

标准格式

public class 类名{
    //实例变量
    //构造器
    //无参构造器【必须】
    //有参构造器【建议】
    //实例方法
    //getXxx()
    //setXxx()
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号