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)领域有广泛的应用。以下是一些主要的应用和特点: 语音识别࿱…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...