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;
}

看内存
在这里插入图片描述
创建对象的流程简单分析

  1. 先加载Person类信息(属性和方法信息,只会加载一次
  2. 分配堆空间,进行默认初始化
  3. 把地址赋给p,p指向对象
  4. 进行指定初始化,将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(参数列表),但是只能在构造函数中使用

酝酿中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全志V3S嵌入式驱动开发(准备)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 要学好嵌入式&#xff0c;其实最好自己可以画板子、调试板子、写软件、调试软件这样来学习。简单的51单片机、stm32这样的mcu或许画起来不是很复杂…

Python 自动化指南(繁琐工作自动化)第二版:零、前言

关于作者 Al Sweigart 是一名软件开发人员和技术书籍作者。Python 是他最喜欢的编程语言&#xff0c;他是该语言的几个开源模块的开发者。他的其他书籍可以在他的网站上根据知识共享许可免费获得。他的猫现在重 11 磅。 关于技术评审 Philip James 从事 Python 工作已经超过…

MobTech 秒验|本机号码一键登录会泄露隐私吗

本机号码一键登录是一种新型的应用登录方式&#xff0c;它可以利用运营商的数据网关认证能力&#xff0c;实现手机号免密登录&#xff0c;提高用户体验和转化率&#xff0c;降低验证成本和流失率。本机号码一键登录支持三大运营商号码认证&#xff0c;3秒内完成手机号验证&…

Java小课堂:自定义注解(案例:自定义DecimalFormat注解)

文章目录 引言I 预备知识1.1 元注解1.2 Target注解的ElementType枚举1.3 Retention注解的RetentionPolicy枚举II 自定义注解2.1 基本条件2.2 注解自定义属性的格式III 案例3.1 自定义DecimalFormat注解3.2 自定义json序列化解析引言 需求: 编辑费率限制的值时填写几位就保存几…

如何在前端中实现精美的图片和文字的垂直对齐

&#x1f31f;所属专栏&#xff1a;前端只因变凤凰之路 &#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚 &#x1f62e;前言&#xff1a;该系列将持续更新前端的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步~&#x1f449;文章…

关于线性与条带化下LVM增加磁盘数据分布的讨论

关于线性与条带化下LVM增加磁盘数据分布的讨论一、环境介绍二、线性模式逻辑卷创建逻辑卷删除三、条带化逻辑卷创建逻辑卷删除LVM有两种模式&#xff1a;线性模式&#xff1a;先写满组成线性逻辑卷的第一个物理卷&#xff0c;再向第2个物理卷中写入数据&#xff0c;以此类推&am…

必看>>>>Linux数据库被其他服务器远程访问(修改权限、开设端口)

目录 一&#xff1a;修改权限 1.1 进入Linux数据库 1.2 修改数据库的远程连接权限 1.2.1 数据库远程权限修改命令 1.2.2 数据库远程权限查看命名 1.3 给Linux机添加端口 1.4 远程数据库连接 注意mysql中的中英文输入 一&#xff1a;修改权限 1.1 进入Linux数据库 文章…

【职场热点】软件测试岗位,真正达到月收入1万以上的有多少

在某一线城市相亲角&#xff0c;有位阿姨自称孩子是程序员、36岁、月入3万8&#xff0c;并直言“月入1万如讨饭”&#xff0c;引来大量互联网人自嘲式认领“乞丐”身份。今年2月&#xff0c;“月收入一万”的鄙视链压力给到了二线城市&#xff0c;有位入行2年的软件测试员发帖称…

1-python基础

1.字面量 被写在代码中固定的值 2.注释 # 单行注释""" 多行注释1&#xff1a;三对双引号 """ 多行注释2&#xff1a;三对单引号 3.变量与输出 age10 # 变量赋值 print("我今年",age,"岁") &#xff08;1&#xff09;pri…

Java数据类型与变量

1.字面常量 public class Demo{ public static void main(String[] args){ System.Out.println("hello world!"); System.Out.println(300); System.Out.println(3.1415926); System.Out.println(T); System.Out.println(true); System.Out.println(false); } 其中…

【CocosCreator入门】CocosCreator组件 | ParticleSystem (粒子)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中ParticleSystem组件是一个用于创建粒子效果的工具&#xff0c;可用于实现火花、爆炸、雪花等效果。 目录 一、组件属性 二、组件使用 三、效果演示 四、性能优化 一、组件属性 属性…

迅为3A5000_7A2000工控主板,龙芯自主指令集架构全国产工业级板卡性能

迅为iTOP-3A5000开发板核心板底板方式&#xff0c;底板资料开源&#xff0c;提供底板的原理图和PCB工程文件&#xff0c;可以根据需求定制属于自己的开发板。 核心板也支持工业级核心板定制开发。 根据二进制翻译功能使用&#xff0c;可流畅运行WIN和Android系统APP。 支持Loo…

renderdoc resource manager说明

*写在前面 只针对renderdoc opengl es 场景进行说明&#xff0c; vukan的没有&#xff0c;不过其实应该也差不多啦&#xff0c;若有必要后面再考虑补上。本文使用 文字图代码 的方式叙述&#xff0c;若只想了解原理过程&#xff0c;可忽略代码部分&#xff0c; 由于renderdoc代…

文章生成器-免费的文章生成器

随着信息爆炸的时代&#xff0c;自媒体人员不仅需要创造性的策略&#xff0c;还需要快速产生具有高质量文章的能力&#xff0c;这样才能快速响应趋势并保持优势。文章生成器&#xff0c;一款基于人工智能和自然语言处理技术的文本生成软件&#xff0c;可在没有任何人工干预的情…

企业搭建帮助中心的额方式有哪些?

帮助中心对于企业价值的重要性在于提高客户满意度和忠诚度&#xff0c;增强企业品牌形象&#xff0c;促进业务增长和提高利润率。通过提供详细的帮助文档和客户支持&#xff0c;企业可以向客户传达其专业知识和技能&#xff0c;并帮助客户更好地使用其产品或服务。这将提高客户…

C++(Qt)软件调试---使用任务管理器导出Dump(6)

C(Qt)软件调试—使用任务管理器导出Dump&#xff08;6&#xff09; 文章目录C(Qt)软件调试---使用任务管理器导出Dump&#xff08;6&#xff09;1、前言2、软件下载3、使用三款软件导出Dump4、软件下载地址更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f44…

『.NET Tools』在.NET中实现汉字转拼音,只要一个方法就够了!

&#x1f4e3;读完这篇文章里你能收获到 傻瓜式扩展方法直接使用可实现汉字转拼音及汉字转拼音首字母功能感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录一、代码引用Step 1 : 安装包&#xff0c;通过Nuget安装包Step 2 : 代码通过扩展方法/帮助类实现实现汉字转拼音实现汉…

谷粒商城-redis分布式锁系列

1.压力测试出的内存泄漏及解决&#xff08;可跳过&#xff09; 使用jmeter对查询产品分类列表接口进行压力测试&#xff0c;出现了堆外内存溢出异常。 我们设置的虚拟机堆内存100m&#xff0c;并不是堆外内存100m 产生堆外内存溢出&#xff1a;OutOfDirectMemoryError 原因是…

2023.4.3

ctrlf:全局替换 alt鼠标左键&#xff1a;整列编辑 ctrlaltl&#xff1a;格式化 AJAX 简介 概念&#xff1a;AJAX&#xff1a;异步&#xff08;客户端不用等待服务端的反应&#xff09;的Javascript和XML AJAX的作用&#xff1a; 与服务器进行数据交互&#xff1a;通过AJA…

Adaptive AUTOSAR——Execution Management(VRTE 3.0 R21-11)

ChatGPT回答&#xff1a; Adaptive AUTOSAR Execution Management 模块是用于管理软件执行的模块&#xff0c;其主要功能包括&#xff1a; 任务调度&#xff1a;支持对任务进行调度和执行&#xff0c;以实现系统中各个功能的协调运行&#xff1b;软件组件管理&#xff1a;支持对…