IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaSE总结基础语法之 - 面向对象上 -> 正文阅读

[Java知识库]JavaSE总结基础语法之 - 面向对象上

1. 类与对象

1.1面向对象的三条主线

  1. Java类及类成员: 属性、构造器、方法、代码块、内部类
  2. 面向对象的三大特征: 封装、继承、多态(抽象)
  3. 与面向对象相关关键字: this、super、extends、implements、static、final、abstract、interface、package、import

1.2 面向对象与面向过程的理解

面向过程: 强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象: 强调的是具备功能的对象,以类、对象作为最小单位,考虑谁做

1.3 面向对象的两个重要概念

  1. 类: 对一类事物的描述, 是抽象的、概念上的定义
  2. 对象: 是实际上存在的该类事物的每个个体, 因而也称为实例
  3. 面向对象最重要的就是设计类
  4. 设计类, 就是设计类的成员

1.4 二者的关系

对象: 是类 new出来的,是类的派生
类: 是根据一类事物的描述设计出来的

  1. 创建类, 设计类的成员
  2. 创建类的对象
  3. 通过对象调用类的属性、类的方法

1.5 对象的创建与内存解析

在这里插入图片描述

1.6匿名对象的理解

匿名对象: 实际上就是创建类的对象后并没有显示的赋值给一个变量名
特点: 是一次性的,每次创建一个匿名对象就在内存中开辟了一块空间

		new Phone().sendEmail();
		new Phone().playGame();
		new Phone().price = 1999;
		new Phone().showPrice();//0.0

1.7 理解万事万物皆对象

  1. 在Java语言中,我们都将功能封装到类中,通过类创建对象,调用类中的功能。
  2. 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

2. 属性

类的设计中,两个重要结构之一: 属性

2.1 属性是什么?

  • 属性的结构拆分: 数据类型、变量名、变量值
  • 属性的数据类型: 基本数据类型、引用数据类型
  • 属性的变量名: 遵守驼峰命名规范、用于给同类型进行赋值、运算
  • 属性的变量值: 填充的变量值要与数据类型相匹配
  • 按定义位置分类: 成员变量、局部变量

2.2 属性 vs 局部变量

  • 相同点:

    • 定义格式: 数据类型 变量名 = 变量值
    • 先声明,后使用
    • 变量都对应其作用域
  • 不同点:

    • 按类中定义的位置不同:
      • 属性: 是在类中的{ }进行定义,作用的范围里自然是在类中都能使用
      • 局部变量: 是在类中的方法的{ }定义的,作用范围之内在方法里
    • 关于权限修饰符的不同:
      • 属性: 能被public、private、缺省、protect进行修饰
      • 局部变量: 不能被权限修饰符进行修饰
    • 默认初始化值的情况:
      • 属性: 定义时可以不用显示初始化值,默认的初始化值为基本数据类型或引用类型的初始化值
      • 局部变量: 没有默认初始化值,意味着我们必须显示的初始化变量
    • 在内存中加载的位置:
      • 属性:加载到堆空间中(非static)
      • 局部变量:加载到栈空间

属性分为: 实例变量、类变量
在这里插入图片描述

3. 方法

类的设计中,两个重要结构之二: 方法

3.1 什么是方法?

  • 方法是类具体要实现功能的体现
  • 就像是一个人的类, 具有走路、呼吸、吃饭等功能,这些是用方法进行定义

3.2 创建方法的格式

在这里插入图片描述

    权限修饰符 修饰符 返回值类型 方法名(参数类型 参数名...){
        方法体
        return 返回值名
    }

3.3 关于权限修饰符:默认方法的权限修饰符先都使用public

  • Java规定的4种权限修饰符:private、public、缺省、protected -->封装性再细说

3.4 返回值类型: 返回值 vs 没返回值

  • 3.4.1 如果方法返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return 数据”。
  • 如果方法没返回值,则方法声明时,使用void来表示。通常,没返回值的方法中,就不需要使用return 但是,如果使用的话,只能“return;”表示结束此方法的意思。
  • 3.4.2 我们定义方法该不该返回值?
    • ① 题目要求
    • ② 凭经验:具体问题具体分析

3.5 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

  • 3.5.1 形参列表: 方法可以声明0个,1个,或多个形参。
  • 3.5.2 格式:数据类型1 形参1,数据类型2 形参2,…
  • 3.5.3 我们定义方法时,该不该定义形参?
    • ① 题目要求
    • ② 凭经验:具体问题具体分析

3.6 方法体:方法功能的体现

3.6.1 方法的使用中,可以调用当前类的属性或方法

  • 特殊的:方法A中又调用了方法A:递归方法。
  • 方法中,不可以定义方法。

3.7 return 关键字

使用范围: 使用在方法体中
作用: ①、针对返回值类型的方法,返回所需要的**类型数据;**②、结束当前方法

4. 方法的重载

4.1 方法重载的概念

  • 方法重载: Override
  • 即为相同的方法名同一个类参数类型不同就构成了重载
  • 两同一不同: 相同(方法名、类), 不同(参数类型)

4.2 构成方法的重载的举例

public class MethodOverride {
    public void getInfo(int age) {
        System.out.println("我的岁数: " + age);
    }

    //相同的方法名、同一个类、不同的参数类型构成重载
    public void getInfo(int age, String name) {
        System.out.println("我的岁数: " + age);
        System.out.println("我的名字: " + name);
    }

    //参数类型顺序不一样,也构成了重载
    public void getInfo(String name, int age) {
        System.out.println("我的名字: " + name);
        System.out.println("我的岁数: " + age);
    }

    public void getInfo(String name, char gender) {
        System.out.println("我的名字: " + name);
        System.out.println("我的性别: " + gender);
    }

    //多个参数类型,构成方法重载
    public void getInfo(String name, char gender, int age, double height) {
        System.out.println("我的名字: " + name);
        System.out.println("我的性别: " + gender);
        System.out.println("我的岁数: " + age);
        System.out.println("我的身高: " + height);
    }
}
    //可变形参的类型与形参类型相同,构成方法重载
    public void getInfo(String name, char gender,Object ... obj) {
        System.out.println("我的名字: " + name);
        System.out.println("我的性别: " + gender);
    }
    public void getInfo(String name, char gender,Object obj) {
        System.out.println("我的名字: " + name);
        System.out.println("我的性别: " + gender);
    }

4.3 以下是不构成重载的修改:

不构成重载
在这里插入图片描述
在这里插入图片描述

4.4 如何判断构成方法重载

把握好"两同一不同"的规定,能够清晰的分别重载方法

4.5 如何确定类中某一个方法调用

  • 关键点: 方法名、方法名的参数类型
  • 通过以上两点确定方法的调用

5. 可变个数形参的方法

5.1 可变个数形参的理解

  • 可变个数形参的格式: 参数类型 … 变量名
  • 当调用可变个数形参的方法时,传入的参数可以是0个、1个、2个…n个
  • 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
  • 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
  • 可变个数形参在方法的形参中,必须声明在末尾
  • 可变个数形参在方法的形参中,最多只能声明一个可变形参。

5.2 举例说明可变形参

 	public void show(int i){
	}
	//形参
	public void show(String s){
		System.out.println("show(String)");
	}
	//可变个数形参
	public void show(String ... strs){
		System.out.println("show(String ... strs)");
		for(int i = 0;i < strs.length;i++){
			System.out.println(strs[i]);
		}
	}

6. Java的值传递机制

  1. 如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
  2. 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

6.1 针对于方法的参数概念

形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据

6.3 针对值传递的举例

	System.out.println("***********基本数据类型:****************");
	int m = 10;
	int n = m;

	System.out.println("m = " + m + ", n = " + n);
	
	n = 20;
	
	System.out.println("m = " + m + ", n = " + n);
	
	System.out.println("***********引用数据类型:****************");
	
	Order o1 = new Order();
	o1.orderId = 1001;
	
	//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。
	Order o2 = o1;
	
	System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);
	
	o2.orderId = 1002;
	
	System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

7. 封装性

7.1 为什么要引入封装性

引入: 我们程序设计最求"高内聚,低耦合"

  • 高内聚: 类的内操作数据有自身完成,不允许有外部干涉

  • 低耦合: 进对外暴露少量的方法用于使用
    隐藏类内部的复杂性,仅对外暴露少量的接口,从而提高程序的可扩展性、可维护性
    这就是对封装性的体现,把该隐藏的隐藏起来,把该暴露的暴露出去

  • 封装性问题: 当我们创建一个类的时候,在通过对象调用该类的属性时,除了类型限制之外,并没有任何其他的限制,当然我们是需要对一个类的属性赋值时进行限制,但仅在类声明的属性中是做不到的

  • 所以就有了使用方法对属性进行调用,从而在方法体内进行一些限制

  • 而我们有必要让用户不能直接在外部调用属性,使用private修饰符对属性进行修饰,这里就体现了权限修饰符的好处

7.2 封装性具体代码的体现

  • 体现一: 通过私有化(private)对属性进行修饰,同时,提供对属性的获取(get)和设置(set)的共有(public)方法
  • 体现二: 不对外暴露私有的方法,仅对类内部使用
  • 体现三:单例模式(将构造器私有化)
  • 体现四:如果不希望类在包外被调用,可以将类设置为缺省的。

7.3 Java规定的4种权限修饰符

权限又大到小: public < protect < 缺省 < private

具体的使用范围:
在这里插入图片描述
权限修饰符可用来修饰的结构说明:

  • 4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类修饰类的话,只能使用:缺省、public

8. 构造器

8.1 什么是构造器

  1. 在实例对象时,调用的相当于是构造器里面的参数
  2. 构造器是类中独有的方法,它没有返回值类型
  3. 构造器能够被重载

8.2 构造器的作用

  1. 创建对象
  2. 初始化对象的属性

说明:

  • 如果没有显示的定义构造器的话,那么隐式的构造器为空参构造器
  • 定义构造器的格式: 权限修饰符 类名(参数类型 变量名){};
  • 一个类中定义多个构造器,彼此构成重载
  • 如果显示的定义的带参构造器,系统的不会在提供空参构造器
  • 一个类中至少有一个构造器

8.3 构造器举例

public class ConstructorTest {
    String name;
    int age;
    char gender;
    //空参构造器
    public ConstructorTest(){
        
    }
    //带参构造器
    public ConstructorTest(String name,int age,char gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    //重载构造器
    public ConstructorTest(String name,int age){
        this.name = name;
        this.age = age;
    }
}

8.4 属性赋值的先后顺序

①默认初始化、②显示初始化、③构造器初始化、④通过对象.属性与对象.方法赋值
排序在最后的赋值输出在控制台上

8.5 JavaBean的概念

所谓JavaBean是符合标准的Java类:

  1. 类是公共的
  2. 提供对应属性的get/set方法
  3. 一个空参构造器
  4. 实现了序列化、声明了独有序列化UID的常量

9. 关键字 this

  1. 可以调用的结构:属性、方法;构造器
  2. this调用属性、方法:
  3. this理解为:当前对象 或 当前正在创建的对象

在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是,通常情况下,我们都择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参

this调用构造器:

  1. 我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器
  2. 构造器中不能通过"this(形参列表)"方式调用自己
  3. 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了"this(形参列表)"
  4. 规定:"this(形参列表)"必须声明在当前构造器的首行
  5. 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:13:47  更:2021-08-21 15:16:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:03:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码