面向对象基础
发布日期:2021-06-27 12:55:44 浏览次数:28 分类:技术文章

本文共 2693 字,大约阅读时间需要 8 分钟。

面向对象基础

一、面向对象思想

面向对象即把相关的数据和方法组织为一个整体来看待。

面向过程关注的是执行的过程,面向对象关注的是具备功能的对象

总结:面向过程到面向对象,是程序员思想上从执行者到指挥者的转变

面向过程,需要关注很繁琐的过程;而面向对象不用关注具体的细节,更关注统筹架构。

面向对象三大思想:

  1. OOA:面向对象分析
  2. OOD:面向对象设计
  3. OOD:面向对象设计

面向对象三大特征:

  1. 封装性:所有的内容对外部不可见
  2. 继承性:将其他的功能继承下来继续发展
  3. 多态性:方法的重载本身就是一个多态性的体现

二、类与对象

1、关系

类必须通过对象才可以使用,对象的所有操作都在类中定义。类由属性和方法组成:- 属性:就相当于人的一个个的特征- 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

2、类的定义的格式

class 类名称{	成员属性	成员方法}

注意:

类必须编写在.java文件中,一个.java文件中可以存在N个类,但是只能存在一个public修饰的类。

.java文件的文件名称必须与public修饰的类名完全一致

3、属性与方法

属性定义格式:	数据类型 属性名;属性定义并赋值的格式:	数据类型 属性名 = 初始化值; 方法定义格式:	权限修饰符 返回值类型 方法名(形式参数列表){		//方法体		return 返回值;		}

当方法没有返回值,出现return,表示方法结束。

void xman(){
if(true){
return; }//if(true)判断正确,则直接结束方法,不执行后续打印指令 System.out.println("还好"); }

4、对象的创建和使用

一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:	类名称 对象名称 = new 类名称();	如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:	访问类中的属性:		对象.属性;	调用类中的方法:		对象.方法(实参);

三、对象创建时的内存分析

1、栈

Java中一个线程就是一个栈区,每一个栈中的元素都是私有的,不被其他栈所访问。栈有先进后出的特点,栈中的数据大小与生存周期都是确定的,缺乏灵活性,但是存取速度比堆要快,仅次于CPU中的寄存器。

存储速度快的原因:栈内存, 通过 ‘栈指针’ 来创建空间与释放空间 。指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 ,但是这种移动的方式, 必须要明确移动的大小与范围

存储的内容基本数据类型的数据 以及 引用数据类型的引用

2、 堆

存放的是类的对象 .创建对象时 , 不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占用时长 !堆内存中内存的释放是由GC(垃圾回收器)完成的垃圾回收器 回收堆内存的规则:当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

3 方法区

存放的是

  • 类信息
  • 静态的变量
  • 常量
  • 成员方法

方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

4 PC寄存器与本地方法栈

PC寄存器保存的是 当前正在执行的 JVM指令的 地址,在Java程序中, 每个线程启动时, 都会创建一个PC寄存器

本地方法栈 保存本地(native)方法的地址

public class Demo3 {
public static void main(String[] args) {
Book b1 = new Book(); b1.name = "金苹果"; b1.info = "讲述了果农辛勤种植金苹果的过程。"; Book b2 = new Book(); b2.name = "银苹果"; b2.info = "讲述了果农辛勤种植银苹果的过程。"; b2 = b1; b2.name = "铜苹果"; b1.say(); }}class Book{
String name; String info; void say() {
System.out.println("书名:"+name+" , 简介:"+info); }}/*此时将b1的地址赋给b2,b1和b2的内存地址指向相同,只不过名称不同b1的堆内存由于缺少栈内存的指针指引而被当作垃圾回收因此,执行方法打印的内容为:书名:铜苹果 , 简介:讲述了果农辛勤种植金苹果的过程。*/

四、构造器

1、概述

作用:	相当于对象的初始化执行时机:	在创建对象时,自动调用特点:	所有的Java类中都会至少存在一个构造方法	如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码	如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

2、格式

与普通方法基本相同, 区别在于: 方法名称必须与类名相同, 没有返回值类型的声明
public class Demo3{
public static void main(String[] args){
Person p = new Person(); p = new Person(); p = new Person(); p = new Person(); }}class Person{
public Person(){
System.out.println("对象创建时,此方法调用"); }}

五、方法重载

方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载方法的重载与返回值类型无关作用:方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能
/***一个类中定义的方法,是允许重载的(相同的方法名称)*1、方法名称相同*2、参数列表长度 或 参数列表类型 或 参数类型顺序不同 */class Math{
int sum(int x ,int y){
int z = x+y; return z; } double sum(double x,double y){
double z = x+y; return z; } }

构造方法的重载

一个类, 可以存在多个构造方法 :参数列表的长度或类型不同即可完成构造方法的重载作用:构造方法的重载 ,可以让我们在不同的创建对象的需求下, 调用不同的方法来完成对象的初始化!

转载地址:https://blog.csdn.net/weixin_43454088/article/details/115678039 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:面向对象2
下一篇:Java基础测试问题

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月27日 10时39分22秒