当前位置: 首页 > news >正文

【Java基础(六)】面向对象与类的基础知识

面向对象编程

特点:

  1. 万事万物皆对象。
  2. 对象:具体的事务或实体,例如人。
  3. 类:对对象向上抽取出像、公共的部分,类是抽象的,是一个模板,例如人类。

类包含什么

类由属性、方法、构造器、代码块、内部类组成

属性

用于定义类包含的数据,即静态特征

属性声明格式

[修饰符] 属性类型 属性名 = [默认值]

方法

用于定义类的行为特征和功能实现,即能做什么事

属性

变量

在类里面分为成员变量和局部变量

  • 成员变量:类中方法或代码块外定义的变量
  • 局部变量:类中方法或代码块中定义的变量

区别如下:

成员变量局部变量
代码位置不同类中方法或代码块外定义的变量类中方法或代码块中定义的变量
作用范围不同当前类中所有地方当前方法或代码块中
是否有默认值有默认值(具体参考各类型变量默认值),未设置时将使用默认值没有默认值,必须设置初始值,否则使用时将会报错
内存中位置不同堆内存栈内存
作用时间不同当前对象从创建到销毁当前方法从开始执行到执行完毕

注意点:

就近原则

  • 当方法形参名字(局部变量)和 属性(成员变量)名字重复时,发生就近原则,优先使用局部变量,如果要使用成员变量,需要加上this.成员变量名来修饰

方法

1. 构造器

类中的一个特殊的方法,其方法名与类名相同,在创建类的具体对象时自动调用,用于为对象进行初始化操作。

默认构造器:

  1. 如果类没有显示定义构造器,系统将默认分配一个空参数构造器
  2. 如果显示定义了构造器后,默认分配的空参数构造器将取消,如果需要使用,需要手动定义。(大多数框架需要使用,建议手动显示设置)

与其他方法的区别:

  1. 没有方法的返回值类型
  2. 方法体内部不能有return语句
  3. 构造器名字必须跟类名一样

2. 重写与重载

重写:

发生在子类和父类中,当子类对父类提供的方法不满意的时,可以对父类的方法进行重写

重写的格式要求:
子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。

重载
同一个类中,当方法名相同、形参列表不同时,多个方法构成了重载。

重写与重载的区别

英文位置修饰符返回值方法名参数抛出异常方法体
重载overload同一个类中无关无关必须相同必须不同无关不同
重写override子类和父类中父类的权限修饰符要低于子类的父类的返回值类型要大于子类必须相同必须相同小于等于不同

代码块

代码块分类:普通块、构造块、静态块、同步块

普通块

位置位于方法中,由{}包括起来的代码,主要用于限制了局部变量的作用范围

构造块

位于类中,方法外,由{}包括起来的代码

静态块

位于类中,方法外,由{}包括起来的代码,{}前面加上了static修饰

注意:静态块中只能使用静态属性和静态方法

类中代码执行顺序

  1. 执行静态块
    • 在类加载时执行,只执行一次
  2. 执行构造块
    • 不常用,通常使用构造器来替代
  3. 执行构造器
  4. 执行方法中的普通块

修饰符

1. 权限修饰符

在类中一共支持4种权限修饰符,权限从低到高分别为 private、default、protected、public,

注:default为缺省修饰符,即未显示定义修饰符时即为default修饰符,并且default修饰也不允许显示定义。

属性和方法:四种修饰符均支持

类:只支持default(缺省)、public修饰符

四种修饰符权限控制如下表

同一个类同一个包子类所有类
private
default
protected
public

2. 静态修饰符 static

被static修饰的属性和方法为静态内容,静态内容先于对象存在,被所有该类的对象共享,共用一块内存。

访问方式: 类名.属性名 或 类名.方法名

注意:

  1. 静态方法中不能使用this关键字
  2. 静态方法中不能访问非静态的方法
  3. 静态方法中不能访问非静态的属性

3. this 修饰符

this指代当前对象,this可以修饰属性、方法、构造器

举例:this修饰构造器

同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行

public class Person {
    String name;
    Int age;

	public Person(){}

	public Person(String name){
		this.name = name;
	}

    public Person(String name, int age){
        // 同一个类中的构造器可以相互用this调用
        this(name);
        // this修饰构造器必须放在第一行
        this.age = age;
    }
}

4. super 修饰符

super指代当前对象的父类。

super修饰属性和方法:

  1. 在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。

  2. 在通常情况下,super.可以省略不写

  3. 特殊情况下,当子类和父类的属性或方法重名时,你要想使用父类的属性或方法,必须加上修饰符super.,只能通过super.属性或方法来调用

super修饰构造器:

调用父类构造的代码

super()
  1. 所有构造器的第一行默认情况下都有super()。
  2. 但是一旦你在构造器中显示使用super调用了父类构造器,那么这个super()就不会给你默认分配了。
  3. 如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写。
  4. 在构造器中,由于this()和super()都必须放在第一行,所以这两者冲突,只能存在一个

import 导包

包的作用

  1. 解决重名问题
  2. 解决权限问题

包名定义规范

  1. 全部小写,中间用逗号隔开
  2. 不能使用系统关键字
  3. 一般在非注释性代码的第一行声明

包的使用

  1. 使用不同包里的类需要导包
  2. 导包以后,还想使用其他包下同名的类,就必须要手动写全所在的包
import java.util.Date;

public class Demo {
    public static void main(String[] args) {
        new Date();
        // 导包以后,还想使用其他包下同名的类,就必须要手动写全所在的包
        new java.sql.Date(10L);
    }
}
  1. 同一个包下的类可以直接使用,不用导包
  2. 在java.lang包下的类,可以直接使用,不用导包
  3. 可以直接导入*,表示引用所有的包
import java.util.*
  1. Java中的导包没有包含和被包含的关系

设置目录平级格式(不显示包含关系),便于查看需要导入的包

在这里插入图片描述
7. 静态导入

导包时加上static修饰符

import static java.lang.Math.*;

静态导入后,同一个类中有相同方法时,优先使用自己定义的方法

相关文章:

  • Python爬虫——BeautifulSoup的基本使用
  • Acwing 802. 区间和
  • 传统方式连接数据库的弊端和数据库连接池原理
  • 什么叫 “雪碧图”?
  • 公众号网课搜题题库使用方法
  • Excel中身份证号码相关操作详解
  • 如何用4行 C 代码实现一个跨平台的命令行 mp3 播放器
  • ES 查询用法
  • golang泛型
  • 如何快速安装JDK 1.8 以及配置环境变量
  • DataGrip 如何导出和恢复整个数据库数据,使用单个 SQL 文件
  • 基于SpringBoot+MyBatisPlus+DynamicDatasource+mysql的多数据源本地事务方案
  • 计算机毕业设计ssm+vue基本微信的健康食谱交流 论坛小程序
  • 天龙八部科举答题问题和答案(全5/8)
  • Python Matplotlib库:基本绘图补充
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • bootstrap创建登录注册页面
  • Cookie 在前端中的实践
  • Kibana配置logstash,报表一体化
  • windows下如何用phpstorm同步测试服务器
  • yii2权限控制rbac之rule详细讲解
  • 精彩代码 vue.js
  • 跨域
  • 蓝海存储开关机注意事项总结
  • 前端性能优化——回流与重绘
  • 听说你叫Java(二)–Servlet请求
  • 微服务核心架构梳理
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 自定义函数
  • 国内开源镜像站点
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #define用法
  • (10)STL算法之搜索(二) 二分查找
  • (4)logging(日志模块)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (windows2012共享文件夹和防火墙设置
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (南京观海微电子)——COF介绍
  • (七)Java对象在Hibernate持久化层的状态
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .cfg\.dat\.mak(持续补充)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • /*在DataTable中更新、删除数据*/
  • @requestBody写与不写的情况