【java入门系列五】java基础-面向对象**

文章探讨了Java中的类与对象的概念,包括OOP原则、实例化、内存中的堆栈布局。详细阐述了方法区、栈内存和堆内存的区别,以及成员方法、递归调用、方法重载和构造器的工作原理。同时提到了this关键字的作用和对象创建流程。
摘要由CSDN通过智能技术生成


更多代码Gitee主页:https://gitee.com/GZHzzz
博客主页CSDN:https://blog.csdn.net/gzhzzaa

类与对象

Object Oriented Programming:OOP,封装继承多态

  • 类是一种数据类型(int基本类,共有的一些特征【属性,行为】),对象是具体的实例(100,200。。。具体数据)

在这里插入图片描述

  • 创建对象 = 实例化对象 = 实例化类
public class Hello {
//Hello是一个类,public共有的类
//类名、接口名大驼峰
    public static void main(String []args) {
    //主方法,程序入口
    //方法名、对象名小驼峰
       System.out.println("Hello World!");
       //实例化
       Cat cat1 = new Cat();
       Scanner myScanner = new Scanner(System.in);
    }
}
//定义一个类
class Cat{
	String name;
	int age;
	String color;
}
  • 类是一个数据类型,需要类名接收对象的类型
    在这里插入图片描述
  • 变量 = 属性 = field

内存中的布局

在这里插入图片描述

  • 方法区存放调用的(字符串类、数组)的值(常量池)
  • 方法区首先加载类信息
  • 对象名在栈区,对象在堆

在这里插入图片描述

  • 类的copy也是引用传递
  • 加载类信息只会有一次

在这里插入图片描述

public class Hello {
//Hello是一个类,public共有的类
//类名大驼峰
    public static void main(String []args) {
    //主方法,程序入口
    //方法名小驼峰
       System.out.println("Hello World!");
    }
}

堆栈

  1. 功能不同
    栈内存用来存储局部变量和方法调用。
    而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中,用来存放由new创建的对象和数组。
  2. 共享性不同
    栈内存是线程私有的。
    堆内存是所有线程共有的。
  3. 异常错误不同
    如果栈内存或者堆内存不足都会抛出异常。
    栈空间不足:java.lang.StackOverFlowError。
    堆空间不足:java.lang.OutOfMemoryError。

成员方法 = 类内的函数

public class Hello {
//Hello是一个类,public共有的类
//类名、接口名大驼峰
    public static void main(String []args) {
    //主方法,程序入口
    //方法名、对象名小驼峰
       System.out.println("Hello World!");
       //实例化
       Cat cat1 = new Cat();
       int res = cat1.speak(3,4);//调用方法 
    }
}
//定义一个类
class Cat{
	String name;
	int age;
	String color;
	public void/int speak(int n,int m){//形参列表
		sout("输出一句话"+(n+m));
		return m+n;
	}
}
  • void没有返回值,int返回一个,speak方法名,public代表公有

在这里插入图片描述
在这里插入图片描述

  • 返回数组使用int[]

传参机制

在这里插入图片描述

  • 方法内部传进来的基本变量是独立于方法外的变量,不可变类型

传进来的是一个数组/对象,类似于py的list

  • 引用类型传进来的是地址
  • new出来的都是对象,都是引用传递

调用递归-在栈空间方法递归

在这里插入图片描述
阶乘:
在这里插入图片描述

  • 栈空间有独立的方法执行,每个栈空间的局部基本变量是独立的
  • 引用对象不是独立的,共享堆内的数据
  • 随调用随返回

在这里插入图片描述

汉诺塔

在这里插入图片描述

八皇后

在这里插入图片描述

  • DFS+回溯

方法重载overload

在这里插入图片描述

  • 形参不同,调用不同的方法,方法名必须一致,参数类型必须不同

在这里插入图片描述

  • 比大小:三元运算符

可变参数

在这里插入图片描述

  • int 。。。 nums接收可变长度参数
  • 可以接收数组
    在这里插入图片描述
  • 最多只有一个可变参数

作用域**scope

在这里插入图片描述

  • 局部变量(方法内定义的变量)必须赋值才能使用;
  • 全局变量(类内属性),有默认止,可以直接使用;
    在这里插入图片描述
  • 不同作用域可以重名,就近原则
  • 同一作用域不能重名

在这里插入图片描述

  • 局部变量用完就丢

在这里插入图片描述

构造器/构造方法:新对象的初始化

类似__init__();
在这里插入图片描述

  • 没有返回值,不能写void;

构造器细节

在这里插入图片描述
在这里插入图片描述

  • 构造器可以重载,即形参类型/数量进行重载;

对象创建流程

在这里插入图片描述

  • 类在定义时就已经在堆开辟空间,加载类信息
  • age的赋值:默认0-定义时候90-构造器-20

this关键字 == py.self

在这里插入图片描述

  • this是类内的全局变量;

在这里插入图片描述

  • this存放的是本对象的引用地址
    在这里插入图片描述
  • this在构造器中第一行表示重复利用构造器的重构

trick

在这里插入图片描述
在这里插入图片描述

  • new Test()是匿名对象,使用后销毁
    在这里插入图片描述
  • 局部变量在栈空间,调用完即被销毁

讨论总结

191-213–217-233-241–251-262

  • public是访问修饰符:控制方法适用范围
  • 函数方法可以返回一个数组
  • new出来的对象都有独立的内存空间
  • 构造器名与类名必须一致
  • 方法区加载类信息,常量池有字符串类型的值
  • 局部变量在栈空间,调用完即被销毁

时间还很多,每天保持思考、保持进步,跬步至千里!

  • Fighting!😎

在这里插入图片描述

while True:
	Go life

在这里插入图片描述

谢谢点赞交流!(❁´◡`❁)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北郭zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值