Java面向对象部分 个人学习记录
注:此博客是个人学习记录,会有错的地方,面向对象部分我可能会画很多图来加深我的理解
不引出了,直接开始
class Dog{String name;int age;String type;public Dog(String name,int age,String type){this.name=name;this.age=age;this.type=type;}
}
类的使用以及内存分配
Dog dog =new Dog(“豆豆”,1,“未知”);
内存中的变化

使用属性:对象名.属性名
接下来看代码
Person p = new Person();
p.age=10;
p.name="小明";
Person p1 = p;
System.out.println(p1.age);
//问题:上述代码输出是多少?
//答案:10,p1与p引用的地址相同,不懂的话看下面的图class Person{int age;String name;
}
看内存

创建对象的流程简单分析
- 先加载Person类信息(属性和方法信息,只会加载一次
- 分配堆空间,进行默认初始化
- 把地址赋给p,p指向对象
- 进行指定初始化,将name初始化为小明
看代码:
Person a = new Person();
a.age=10;
a.name="小明";
Person b =a;
System.out.println(b.name);//输出的是小明
b.age=200;
b=null;
System.out.println(a.age);//输出的是200
System.out.println(b.age);//抛出空指针异常
看图



类的成员方法
就是一句话,类名.方法名([参数列表]),若有参数就传,没有就不写
调用原理
每次调用的时候,操作系统会开辟出一块独立空间,执行完毕之后或者执行到return返回到调用方法的地方
以一个简单的例子举例
Person p = new Person();
p.add(11,10);public int getSum(int n1,int n2){return n1+n2;
}
看图

类方法的传参机制
非引用类型是值传递,就是把实参的值赋值一份给形参,引用类型是一i你用传递,就是把实参的地址传递给形参,这样对形参的操作会直接作用到实参上面
main 函数部分
int a = 11,b=23;
Test t = new Test();
t.swap(a,b);
System,out.printf("a = %d\tb=%d\t",a,b);class Test{public void swap(int a,int b){System,out.printf("a = %d\tb=%d\t",a,b);a = a - b;b = a + b; a = b - a;
System,out.printf("a = %d\tb=%d\t",a,b);
}
看图,这张图我就不画堆和方法区了,因为重点不是这个

引用类型传参机制
class Person{String name;int age;public void toString(){System.out.printf("name = %s\tage=%d\n",name,age);}
}
class B{public void test100(int[] arr){arr[0]=-1;System.out.println(Arrays.toString(arr));}public void test200(Person p){p = new Person();p.name = "java";p.age=10;}
}
class conduct{public static void main(String[] args){B b = new B();int[] arr = new int[]{2,1,1};b.test100(arr); System.out.println(Arrays.toString(arr));Person xy = new Person("zs",12);b.test200(xy);System.out.println(xy);}
}
xy的值没有变,这张图画的不咋地

方法的递归调用
这里我不画图了,画了也不好看
猴子吃桃与斐波拉契

main方法
System,out.println(peach(1));
System,out.println(fibonacci(10));public static int fibonacci(int n){if(n>=1){if(n==1 || n==2))return 1;else {return fibonacci(n-1)+fibornacci(n-2);}
}
public static int peach(int n){if(n==10)return 1;else{return (peach(n+1)+1)*2;}
}
迷宫
public class sample {public static void main(String[] args) {int[][] map = new int[8][7];//第一行(列)与最后一行(列)是墙for(int i=0;i<7;i++){map[0][i]=1;map[7][i]=1;}for(int i=0;i<8;i++){map[i][0]=1;map[i][6]=1;}map[4][1]=map[4][2]=1;findWay(map,1,1);for(int i=0;i<8;i++){for(int j=0;j<7;j++)System.out.printf("%d\t",map[i][j]);System.out.println();}}/*** @param map 地图* @param i 初始坐标(row)* @param j 初始坐标(column)* @return 若能找到路就返回true,反之false* */public static boolean findWay(int[][] map,int i,int j){// 0:没有走过 1: 墙 2:走过 3:走过但走不通// 根据上右下左的策略 上下左右的试一下if(map[6][5]==2){return true;}else {if(map[i][j]==0){map[i][j]=2;if(findWay(map,i-1,j) || findWay(map,i+1,j)|| findWay(map,i,j-1) || findWay(map,i,j+1))return true;else{map[i][j]=3;return false;}}else{//1:墙 2:走过了(既然还没有到终点,这里走过了也等于走不通,上面尝试了那么多次) 3:走过但是不通return false;}}}
}
汉诺塔
若是两个盘子,就把最上面的移动到b,把最下面的移动到c,再把b上面的移动的c
若是多个盘子,看成两个盘子,就是1,n-1
code
public static void main(String[] args) {hanno(5,'a','b','c');}public static void hanno(int n,char a,char b,char c){if(n==1)System.out.printf("第%d个盘子从%c->%c\n",n,a,c);else{hanno(n-1,a,c,b);System.out.printf("第%d个盘子从%c->%c\n",n,a,c);;hanno(n-1,b,a,c);}
八皇后
代码
main
int[] position = new int[length];public static void place(int n){for(int i=0;i<n;i++){arr[i]=i;if(check(i))place(n+1);}
}
public static boolean check(int n)
{for(int i=0;i<n;i++){if(arr[n]==arr[i] || n-i==Math.abs(arr[i]-arr[n])return false}return true;
}
重载
就一句话
方法名必须相同,形参个数,类型顺序有一个必须不同
可变参数
必须在最后面,当作数组来用
public int add(int… arr){
int sum =0 ;
for(int i=0;i<arr.length;i++)
sum+=arr[i];
return sum;
}
构造器
必须与类名相同,且没有返回值,如果写了有参的构造函数,无参的哪个会被干掉,若要使用无参的得自己手写
例如
public Person(String name){
this.name = name;
}
this关键字的使用
可以区分本类的属性、方法、构造器
访问构造器语法
this(参数列表),但是只能在构造函数中使用
酝酿中
相关文章:
Java面向对象部分 个人学习记录
注:此博客是个人学习记录,会有错的地方,面向对象部分我可能会画很多图来加深我的理解 不引出了,直接开始 class Dog{String name;int age;String type;public Dog(String name,int age,String type){this.namename;this.ageage;this.typetyp…...
MySQL数据库——对Linux MySQL软件包的一些说明
Linux 操作系统的发行版很多,不同发行版下的 MySQL 版本也是不同的。MySQL 主要支持的 Linux 版本有 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server。这里主要介绍不同 Linux 发行版下 MySQL 支持的版本。 Linux 操作系统的 MySQL 软件包一般分为以下…...
【JavaEE进阶】——第二节.Spring核心和设计思想
文章目录 前言 一、Spring是什么? 二、什么是容器? 三、什么是IoC? 3.1 初始loC 3.2 举例解释loC 3.3 Spring IoC思想的体现 四、什么是DI? 4.1DI的概念 4.2 Ioc和DI的区别 总结 前言 今天我们将进入到有关spring的认识当中&…...
twitter开源算法(1)For You推荐系统架构
1 Twitter’s Recommendation Algorithm 我们的推荐系统由许多互相关联的服务(services)和工作(jobs)组成,本节这要是聚焦home timeline的for you feed流。 the-algorithm开源地址:https://github.com/twitter/the-algorithm 本篇博客来源&…...
A General Framework for Uncertainty Estimation in Deep Learning源码阅读(二)
接上文 ResNet定义: 代码使用 def ResNet18ADF(noise_variance1e-3, min_variance1e-3):return ResNet(BasicBlock, [2,2,2,2], num_classes10, noise_variance1e-3, min_variance1e-3, initialize_msraFalse)定义模型,其中ResNet定义为: …...
串行通信协议---HART协议
实际应用中,HART协议是仅次于Modbus协议的最接近统一现场总线的标准,主要是在4~20mA电流信号上面叠加数字信号,物理层采用Bell 202标准的FSK技术成功实现模拟信号和数字信号双向同时通信而互不干扰。HART协议规定了传输的物理形式、消息结构、…...
【独家】华为OD机试 - 寻找密码(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本期题目:寻找密码 题目 小王在进行游…...
FPGA有哪些优质的带源码的IP开源网站?
这是某乎上的一个问题,我觉得还不错,今天就系统性的总结一下1、fpga4funhttps://www.fpga4fun.com/你能在这个网站上找到什么?您可以找到信息页面,以及使用 FPGA 板构建的 FPGA 项目。注重点:项目。FPGA 项目使用一种称…...
基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Postman接口测试之Mock快速入门
一、Mock简介 1.Mock定义 Mock是一种比较特殊的测试技巧,可以在没有依赖项的情况下进行接口或单元测试。通常情况下,Mock与其他方法的区别是,用于模拟代码依赖对象,并允许设置对应的期望值。简单一点来讲,就是Mock创建…...
分享一个国内可用的免费ChatGPT网站
背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个程序员,我也忍不住做了一个基于ChatGPT的网站,免费!免登陆!!国内可直接对话ChatGPT,也…...
15. 三数之和(Java)
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 …...
Navicat Premium 16安装教程
1.鼠标右击【Navicat Premium 16(64bit)】压缩包(win11及以上系统需先选择“显示更多选项”)选择【解压到 Navicat Premium 16(64bit)】。 2.打开解压后的文件夹,鼠标右击【setup】选择【以管理员身份运行】。 3.点击【下一步】。 4.选择【我…...
蓝桥杯刷题冲刺 | 倒计时8天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.三角形的面积2.图中点的层次1.三角形的面积 题目 链接: 三角形的面积 - 蓝桥云课 …...
四.JAVA基础面试题:重要知识
四.JAVA基础面试题:重要知识 1.为什么JAVA只有值传递 2.JAVA获取运行时类的四种方式 四.JAVA基础面试题:重要知识 1.为什么JAVA只有值传递 实参:传递给形参的实际参数。 形参:接受实参的参数。值传递:方法接受实参…...
某面试官分享经验:看求职者第一眼,开口说第一句话,面试结果就差不多定了,准确率高达90%以上...
我们以前分享过许多经验,但大多是站在打工人的视角上,今天给大家带来一个面试官的经验:1. 看求职者第一眼,开口说第一句话,面试结果就差不多定了,准确率高达90%以上。2. 绝不考八股文,如果问技术…...
Java开发 - 消息队列之RabbitMQ初体验
目录 前言 RabbitMQ 什么是RabbitMQ RabbitMQ特点 安装启动 RabbitMQ和Kafka的消息收发区别 RabbitMQ使用案例 添加依赖 添加配置 创建RabbitMQ配置类 RabbitMQ消息的发送 RabbitMQ消息的接收 测试 结语 前言 前一篇,我们学习了Kafka的基本使用&#…...
蓝桥杯入职项目(HTML + springBoot)
文章目录需要解决npm包安装axioshttp-servedebug开发下个阶段测试运行方式注意清理磁盘缓存问题解决HTML Web项目的结构通常是基于MVC(Model-View-Controller)模式设计的。下面是一般的项目结构:index.html:项目的入口文件&#x…...
【IAR工程】STM8S208RB基于ST标准库下按键检测
【IAR工程】STM8S208RB基于ST标准库下按键检测📍相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》🎈《【IAR工程】STM8S208RB基于ST标准库下EXTI外部中断》🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号:2.3.1&…...
【5】深度学习之Pytorch——如何使用张量处理文本数据集(语料库数据集)
在计算机领域,不断崛起的两个领域,一个是CV一个是NLP,下面我们可以探索一下深度学习在NLP的应用和特点。 深度学习在自然语言处理(NLP)领域有广泛的应用。以下是一些主要的应用和特点: 语音识别࿱…...
C语言入门知识全解析:基本结构、数据类型及示例特点
1. C语言简介 C语言是一种通用的、过程式的编程语言,由贝尔实验室的Dennis Ritchie在1972年开发。来源:不全面,仅供参考 http://nanhaitongcheng.com/kx/8106.html它被广泛应用于系统软件开发、嵌入式系统、游戏开发等领域。 2. C语言的基本结…...
推理神器Phi-4-mini-reasoning实测:解方程、逻辑题一键生成答案
推理神器Phi-4-mini-reasoning实测:解方程、逻辑题一键生成答案 1. 模型介绍与核心能力 Phi-4-mini-reasoning是一款专注于逻辑推理和数学计算的轻量级AI模型。与通用聊天模型不同,它被专门设计用于处理需要分步推理的任务,能够将复杂的解题…...
从混淆矩阵到Kappa系数:实战解析土地利用分类精度评估全流程
1. 土地利用分类精度评估入门指南 当你完成了一张精美的土地利用分类图,最常被问到的问题往往是:"这个结果到底有多准?"作为从业多年的GIS分析师,我见过太多人只关注分类过程却忽视精度验证,最后在项目汇报时…...
Contriever论文精读:手把手拆解对比学习与MoCo如何‘炼成’通用文本嵌入
Contriever技术解析:对比学习与MoCo如何重塑文本嵌入模型 在自然语言处理领域,文本嵌入模型一直是核心基础技术之一。传统的有监督训练方法虽然在某些特定领域表现出色,但当面临跨领域应用时,其性能往往大幅下降。Facebook Resear…...
解决打印机标签尺寸匹配问题
在开发应用程序时,经常会遇到与打印机相关的各种问题,尤其是当需要打印特定尺寸的标签时。如果您正在开发一个可以打印产品标签的应用,并且遇到标签尺寸不匹配的问题,那么本文将为您提供详细的解决方案。 问题背景 假设您正在与同事开发一个可以打印产品标签的应用。您需…...
OMO·赶考小状元AI自习室:破解线下自习室困局,引领学习新范式
近年来,一个有趣的现象在教培领域悄然发生:传统线下自习室逐渐遇冷,客流量与用户粘性面临挑战;而与此同时,一种名为“AI自习室”的新形态却异军突起,展现出强大的市场吸引力。这背后,并非简单的…...
学网络安全需要学编程吗?
作为数字化时代的守护者岗位,网络安全一直备受瞩目并引发热议,那么学网络安全需要学编程吗?学多久才可以就业?我们通过这篇文章来了解一下。学网络安全需要学编程吗?当然需要,网络安全需要学习编程。编程能力是网络安全领域的基础技能之一…...
HarmonyOS6 半年磨一剑 - RcCheckbox 实战下篇:问卷调查表单与参数使用指南
文章目录前言一、场景:问卷调查表单1.1 需求分析1.2 数据结构设计1.3 表单校验联动1.4 第三题:计数器与数量限制的配合1.5 结果页与状态重置1.6 三道题的样式差异化对比1.7 完整代码二、参数使用频率参考2.1 高频参数(必须掌握)2.…...
B+W 模块 BWU1664
BW (BihlWiedemann) BWU1664 是一款 ASi-3 专用模拟量输入模块,专为连接 Leuze ODSL 30 系列长距离激光测距传感器 设计,直接将测距数据接入 ASi 总线。一、核心定位系列:ASi-3 专用模拟量从站模块功能:2 路专用输入,直…...
保姆级教程:用YOLOv11+PyQt5打造你的专属天气识别桌面应用(附完整源码)
从零构建基于YOLOv11的智能天气识别桌面应用 窗外阴云密布,你是否曾好奇此刻的天气状况究竟如何?现代计算机视觉技术让机器也能像人类一样"看懂"天气。本文将带你完整实现一个能识别11种天气类型的桌面应用,从模型加载到界面交互&a…...
