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

news2024/11/17 20:19:11

学习记录🤔

  • 类与对象
    • 内存中的布局
    • 堆栈
  • 成员方法 = 类内的函数
    • 传参机制
      • 传进来的是一个数组/对象,类似于py的list
  • 调用递归-在栈空间方法递归
    • 汉诺塔
    • 八皇后
  • 方法重载overload
  • 可变参数
  • 作用域**scope
  • 构造器/构造方法:新对象的初始化
    • 构造器细节
    • 对象创建流程
    • this关键字 == py.self
    • trick
  • 讨论总结
    • 谢谢点赞交流!(❁´◡`❁)

更多代码: 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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch 笔记:torch.nn.init

这个模块中的所有函数都是用来初始化神经网络参数的,所以它们都在torch.no_grad()模式下运行,不会被autograd所考虑。 1 计算gain value 1.1 介绍 这个在后面的一些nn.init初始化中会用到 1.2 用法 torch.nn.init.calculate_gain(nonlinearity, para…

【LeetCode】回溯算法总结

回溯法解决的问题 回溯法模板 返回值:一般为void参数:先写逻辑,用到啥参数,再填啥参数终止条件:到达叶子节点,保存当前结果,返回遍历过程:回溯法一般在集合中递归搜索,集…

使用DiskGenius进行硬盘数据迁移

克隆硬盘 - DiskGenius 1.迁移磁盘 选择自己想要迁移的磁盘,点击工具-克隆磁盘 首先选择源硬盘,点击确定 之后选择想要迁移到的硬盘,点击确定 检查一下原硬盘和目标硬盘是否正确,此外还可以对这个空间进行二次调整。最终如果没有…

Android 中关于 FileObserver类监听文件状态的实践

文章目录需求背景走进源码实现示例参考需求背景 当某一个目录的文件发生变化(创建、修改、删除、移动)时,需要给一个回调事件给其他端调用。 其他场景:阅后即焚等等。 比如在 Android 的 VR 设备中,有一个用于部署的文…

Oracle P6 Professional专业版 22.12 中的热门新功能

目录 并排查看项目 在复制与 WBS 元素的关系时具有更大的灵活性 更轻松地确定要分配的正确基线 复制并粘贴电子表格中的单元格区域 更好地控制导入数据 检查 P6 专业版中提供的时间表报告 在排序对话框中排列字段顺序 创建导入和导出模板的副本 指定完成日期筛选器如何…

光流估计(一) 光流的简介与操作

今天是大年29,明天要贴春联了!算是在年前赶出来一篇文章发(太长时间没发东西了O。o),也算是自己在光流估计深度学习部分研究的开始~ 明年开学就是研二下学期了,时间过得飞快,毕设、实习、工作等…

MyBatis | 使用插件better-mybatis-generator自动生成dao、pojo

0️⃣简介🗼简介在我们编写MyBatis的项目时,常常需要为数据表编写大量的SQL语句以及dao类。better-mybatis-generator作为一款IDEA插件,可以自动为我们生成所需要的pojo类、dao类,并提供相当多的SQL单表查询操作。利用该插件&…

Python小技巧:富比较方法的妙用,__lt__、__le__、__eq__、__ne__、__gt__、__ge__。。。

前言 这里是Python小技巧的系列文章。这是第二篇&#xff0c;富比较方法的妙用。 在 Python中&#xff0c;富比较方法共6个&#xff0c;如下表所示&#xff1a; 见名知意&#xff0c;富比较主要用于比较。 富比较方法使用释义释义object.__lt__(self, other)x.__lt__(y)x<…

Springboot+mybatis使用PageHelper实现vue前端分页

Springbootmybatis使用PageHelper实现vue前端分页1、未分页前的vue前端效果图2、Springbootmybatis使用PageHelper分页逻辑&#xff1a;&#xff08;1&#xff09;Springboot、mybatis、PageHelper的版本&#xff1a;&#xff08;2&#xff09;yml文件配置pagehelper&#xff1…

带你了解docker是什么----初始篇

docker容器docker简介docker、虚拟环境与虚拟机docker 的核心概念Docker 镜像Docker 仓库Docker容器镜像、容器、仓库&#xff0c;三者之间的联系容器 容器一词的英文是container&#xff0c;其实container还有集装箱的意思&#xff0c;集装箱绝对是商业史上了不起的一项发明&…

11.3 关联容器操作

文章目录关联容器迭代器关键字成员不可修改&#xff0c;值可修改关于泛型算法添加元素向set插入元素向map插入数据insert操作总结检测insert的返回值展开递增语句向multiset和multimap添加元素删除元素map下标操作访问元素类型别名&#xff1a;类型别名说明key_type关键字类型&…

第一个Spring、第一个SpringBoot、Spring-Mybatis整合、SpringBoot-Mybatis整合

目录一、第一个Spring程序二、第一个SpringBoot三、Spring-Mybatis整合四、SpringBoot-Mybatis整合第一个程序一、第一个Spring程序 添加依赖——用以支持spring <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</a…

线程池的简单介绍以及实现一个线程池

文章目录1、线程池存在的意义2、什么是线程池&#xff1f;3、线程池的使用2、java标准库中的线程池3、认识一下不同的线程池&#xff1a;4、认识一下线程池里的参数&#xff1a;4、实现一个简单的线程池1、线程池存在的意义 线程存在的意义&#xff1a;使用进程来实现并发编程…

鼠标右键没有git bash here(图文详解)

升级Win11后突然发现右键没有git bash here了解决&#xff1a;1. winr键&#xff0c;打开命令窗口,输入regedit打开注册表2. 在注册表中按照路径打开\HKEY_CLASSES_ROOT\Directory\Background\shell\3. 在shell上右键新建项&#xff0c;取名Git Bash Here&#xff0c;再点击Git…

SpringCloudConsul

上篇文章注册中心选出了Consul 和 K8S&#xff0c;现在我需要把他们集成到SpringCloud里&#xff0c;体验一下他们的服务注册发现、动态配置与权限分配难易 问题&#xff0c;以便选出更适合我们的。SpringCloudConsul首先用Docker搭建出Consul集群&#xff0c;这一步忽略了&…

8、Ubuntu22.4Server安装MariaDB10.10初始化密码Navicat远程登录

安装MariaDB10.10 查找源 apt search mariadb 在Ubuntu系统上从MariaDB存储库安装MariaDB10.10时&#xff0c;需要运行以下命令 sudo apt-get install apt-transport-https curl sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc https://mariadb.org…

【微服务】Feign远程调用

本系列介绍的是Spring Cloud中涉及的知识点&#xff0c;如有错误欢迎指出~ 一.引子 我们以前基于RestTemplate发起的http请求远程调用服务&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护&#xff0c;字符串拼接硬编码…

逆卷积(ConvTranspose2d)是什么?

上图是一个卷积操作&#xff08;蓝色为输入&#xff0c;绿色为输出&#xff09;。 输入的特征图为x&#xff1a;( 4&#xff0c;4 &#xff0c;channels_in&#xff09;其中channels_in表示通道数。 卷积核设置&#xff1a;无padding&#xff0c; kernel size为3*3&#xff0c…

<关键字(1)>——《C语言深度剖析》

目录 关键字 - 第一讲 1.关键字分类 2.定义与声明 2.1 什么是变量(是什么) 2.2如何定义变量(怎么用) 2.3为什么要定义变量(为什么) 2.4 变量定义的本质 2.5 变量声明的本质 3. 最宽宏大量的关键字 - auto 3.1 变量的分类 3.2 变量的作用域 3.3 变量的生命周期 …

汇编语言(第四版)第八章 实验7 习题解答

Power idea 公司从1975年成立一直到1995年的基本情况如下&#xff1a; 下面的程序中&#xff0c;已经定义好了这些数据&#xff1a; assume cs:codesg,ds:datasgdatasg segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983db 1984,1985,1986,1987,1988,1989,1990,1991,19…