一.Java中的对象

1.1 对象的概念:

对象是将数据和操作数据的函数进行了封装。

1.2 成员变量和局部变量:

在对象中,变量分为成员变量(在类中定义)和局部变量(在方法中定义)

区别\分类 成员变量 局部变量
定义位置不同 成员变量直接定义在类中 局部变量定义在方法中,参数上,语句中
作用范围不同 成员变量在类范围中有效 局部变量只在自己所属的大括号内有效,大括号结束,局部变量的生命周期就结束
底层运行原理不同 成员变量存在于堆内存中,生命周期和对象的生命周期相同 局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放

1.3 构造函数:

用于给特定对象(和函数名称相同的对象)进行初始化,是函数中的一种。所有对象创建时,都需要初始化,初始化需要调用构造函数

public class Construct{Construct(){//初始化操作}
}

1.3.1 构造函数的特点:

  • 该函数的名称和所在类的名称相同(构造方法的方法名首字母大写)
  • 不需要定义返回值类型
  • 该函数没有具体的返回值

1.3.2 构造函数的使用:

1)一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。
2)一个类中,可以有多个构造函数,它们的函数名称都相同,参数不同。一个类中如果出现多个构造函数。它们的存在是以重载体现的。

1.3.3 构造函数和一般函数的区别:

区别\分类 构造函数 一般函数
格式不同 构造函数函数名和类名相同,不需要定义返回值 一般函数函数名和类名不相同,需要定义返回值
使用方式不同 构造函数是在对象创建时,就被调用,用于初始化,只执行一次 一般函数,是对象创建后,需要调用才执行,可以被调用多次

1.3.4 构造代码块

public class Construct{{//初始化操作}
}

没有参数,定义有构造代码块的类,创建对象并初始化时都需要调用构造代码块。而构造函数则只在参数对应的情况下在初始化时执行

1.4 创建对象的过程:

创建一个对象:

Person person = new Person();

1)先将硬盘上指定位置的Person.class文件加载进内存。
2)执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区空间中分配了一个变量person。
3)在堆内存中开辟一个实体空间,分配了一个内存首地址值。
4)在该实体空间中进行属性的空间分配,并进行了默认初始化。
5)对空间中的属性进行显示初始化。
6)进行实体的构造代码块初始化。
7)调用该实体对应的构造函数,进行构造函数初始化。
8)将首地址赋值给person ,person变量就引用了该实体。(指向了该对象)

1.5 static关键字

修饰符,用于修饰成员(成员变量和成员函数),静态修饰的数据可以被所有的对象调用。

1.5.1 静态成员:

1)被静态修饰的成员,可以通过类名调用,即:类名.静态成员(Person.name)
2)静态成员随着类的加载而加载,而且优先于对象存在。

1.5.2 static关键字使用时的注意事项:

静态方法只能访问静态成员,不可以访问非静态成员。因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。同理静态方法中不能使用this,super关键字来获取指定的对象

1.5.3 静态修饰的使用的条件:

1)成员变量

如果成员变量的数据所有对象都需要使用,那么该变量就需要被静态修饰,因为是共享的数据。

2)成员函数

如果函数内访问了对象中特有的属性数据,那该方法不能被静态修饰。

1.5.4 成员变量和静态变量的区别:

区别\分类 成员变量 静态变量
使用方式不同 成员变量在对象中使用,也称为实例变量。 静态变量在类之间使用,也称为类变量。
底层运行原理不同 成员变量存在于堆内存中 静态变量存在于方法区中
生命周期不同 成员变量的生命周期和对象相同 静态变量的生命周期和类相同
调用方式不同 成员变量只能被对象所调用 静态变量可以被对象调用,也用类名调用

1.5.5 静态代码块

一个有静态关键字标示的代码块区域,定义在类中。对类进行初始化。静态代码块随着类的加载而执行,而且只执行一次。如果和主函数在同一类中,优先于主函数执行(主函数也是静态的)。
静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 > 构造代码块 > 构造函数

二.面向对象的特点—–封装

隐藏对象的属性和实现细节,对外提供公共的访问方式。达到将隐藏细节,提高重用性和安全性的目的。

2.1 成员的访问权限:

通过几个关键字实现权限控制:

1)private关键字:

将成员定义为私有,私有的访问权限最低,只有在本类中的方法才可以访问,其他类只有通过本类对外提供的访问方式来完成对私有属性的访问

2)public关键字:

将成员定义为共有,其他类和属性可以访问并更改该属性的值

三.面向对象的特点—–继承

提高了代码的复用性,让类与类之间产生了关系,是多态的前提。
父类:是由多个类不断向上抽取共性内容而定义的。

3.1 Java中的继承机制:

1)Java只支持单继承

C++支持多继承,但是多继承有安全问题的弊端

2)Java支持多重继承

Java支持多重继承因此出现了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的是该体系最基本的共性功能。
所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。使用一个体系时,需要建立对象。建议建立最子类对象(继承体系最下面的子类的对象),因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。即对于一个继承体系的使用,先查阅顶层父类中的内容,创建最底层子类的对象使用。

3.2 继承体系中的成员:

3.2.1 成员变量

当子父类中出现一样的属性时(实际开发中基本不会遇到这种情况),子类类型的对象,调用该属性获取到的值是子类的该属性的值。
如果想要调用父类中的属性值,需要使用super关键字
this:代表是本类类型的对象引用。
super:代表是子类所属的父类中的内存空间引用。

3.2.2 成员函数。

当子父类中出现了相同的方法时,建立子类对象会运行子类中的方法。即父类中的方法被覆盖(复写,重写)了。当一个类的功能内容需要修改时,通过覆盖来实现。

3.2.3 构造函数。

子类对象在创建并初始化时,先调用父类的构造函数,再调用子类的构造函数。
子类的所有构造函数中的第一行,其实都有一条没有显示的语句super( ),调用父类的空参构造函数,如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。

3.3 继承的使用场合:

当类与类之间存在着所属关系时,才具备了继承的前提,不要仅仅为了获取其他类中的成员进行继承。

继承的方法覆盖

1)子类的方法覆盖父类的方法时,必须要保证,子类方法的权限必须大于等于父类方法权限
2)静态修饰的成员只能覆盖静态成员,或者被静态成员覆盖

继承的弊端

打破了封装性。对于一些类,或者类中私有的功能或属性,是需要被继承或者复写的,这些属性需要使用final关键字修饰

Final关键字

修饰符,可以修饰类,方法,变量。
被final修饰的类是一个最终类,不可以被继承。
被final修饰的方法是一个最终方法,不可以被覆盖。
被final修饰的变量是一个常量,只能赋值一次。

JavaSE基础-01-对象相关推荐

  1. JavaSE基础篇 | 对象的创建和使用

    目录

  2. JavaSE基础01

    标识符 概要: ​ Java对包.类.方法.参数和变量等元素命名时使用的字符序列称为标识符:其实呢就是为类.接口.方法.变量命名制定的一套规范. 规则(等于法律的作用): ​ 由字母.数字.下划线.美 ...

  3. JavaSE基础笔记——常用API、Lambda、常见算法

    日期与时间 时间日期是在任何一个程序系统里几乎都不可能忽略掉的数据量,而且大量的算法在底层都会使用到时间日期数据值作为算法的基本种子(随机数算法或加密算法都经常用到). 计算机里,时间日期的本质 作为 ...

  4. Java 基础-01 Java语言入门

    文章目录 Java 基础-01 Java语言入门 1.计算机基本概念 1.1 计算机概述 1.2 计算机组成 1.3 CPU.内存与硬盘 2.软件基本概念 2.1 软件概述 2.2 人机交互方式 2. ...

  5. 【JavaSE 基础知识盲点小结】

    [JavaSE 基础知识盲点小结] 一.第一天: 1. 在 cmd 命令窗口问题: ①编译是: javac HelloWorld.java ②运行时是: java HelloWorld (类名 不加 ...

  6. JAVASE基础模块三十三(Scanner 扫描流 RandomAccessFile随机访问流 ObjectInputStream序列流 Properties集合流 Sequence顺序流

    JAVASE基础模块三十三(Scanner 扫描流 RandomAccessFile随机访问流 ObjectInputStream序列流 Properties集合流 SequenceInputStre ...

  7. Java面试题全集(上)+JavaSE基础

    三重:代码.底层内存.源码 第一阶段:开发常用 JavaSE基础.IDE.Maven.Gradle.SVN.Git.Spring.Spring MVC.Spring Boot.Spring Cloud ...

  8. 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用

    [重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别.强软弱虚引用 文章目录 [重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别. ...

  9. JavaSE基础练习题

    JavaSE基础练习题 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 选择题:(3*10) 1) 下列说法正确的是(C) A.运算符优先级最高的是关系运算 B.数组的长度在使用过程中 ...

  10. javaSE基础重点知识点总结 持续更新

    javaSE基础重点知识点解析 文章目录 javaSE基础重点知识点解析 前言 1.重载和重写 2.匿名对象 3.可变个数形参的方法 4.MVC设计模式 5.java.lang.Object类 6.自 ...

最新文章

  1. 学习MongoDB(Troubleshoot Replica Sets) 集群排除故障
  2. Linux配置免密登录
  3. MySQL5.6 主从复制配置
  4. 实时屏幕监控 linux面板,分享|LXDE、Xfce 及 MATE 桌面环境下的又一系统监视器应用:Multiload-ng...
  5. windows运行linux脚本命令,Windows PowerShell:通过命令而不是脚本完成操作
  6. 青少年迷恋上短视频 如何防沉迷?
  7. 英特尔推出新CPU架构!3D封装打破摩尔定律限制,10nm芯片明年上市
  8. 彻底封杀讯雷下载,做好网络管理
  9. php中传址调用,PHP中foreach引用传地址
  10. 学生:无效文件.dsn问题
  11. Linux设备驱动 | LED字符设备驱动(platform平台总线)
  12. Java———猴子偷桃(递归函数)
  13. android studio 添加图片进入mipmap文件包
  14. Storage of multidimensional arrays based on arbitrary tiling
  15. 大数据的概念、特点及应用场景
  16. 我与工具--阅读和知识管理
  17. MOOS程序解析记录(6)uSimMarine解析2
  18. wilf tree java_伴读 | 牛津树【2-9】New Trees
  19. VR数字沙盘高度还原未来房屋实景
  20. python爬取大量百度图片

热门文章

  1. ensp 移动主机搜索不到AP信道_【分享】规模不同,无线AP覆盖方式有何不同?
  2. SQL:解决PostgreSQL数据库传输出现ERROR: invalid byte sequence for encoding “UTF8“: 0xe5 0x9b 0x20
  3. Jquery ajax, Axios, Fetch区别之我见
  4. SLAM_数据集_EuRoC数据集简介与使用
  5. 多视几何_计算一副图像上的点在另一福图像上的对应点
  6. 随手记_常用coding软件的快捷键-clion/vs code/vs/kdevelop
  7. 高等数学复习笔记(二)- 一元函数微分学的概念、计算以及几何应用
  8. 第五次作业11111
  9. 浅谈PHP数字字符串比较
  10. OS开发(Objective-C)常用库索引