Java基础漏洞(四)

news2024/9/24 9:20:37

(1)递归调用的内存

我们定义一个类A,在类A中定义方法test来验证递归。在程序中,当条件符合的时候会不断的递归,只有遇到终止条件时才不再递归,然后便会执行递归语句之下的语句。

如以下程序:当我们输入5时,会不断的递归直到为2时,然后便执行递归语句之下的语句输出2,然后在栈中依次执行当n=3,4,5的时候。

程序:

public class Main{
	public static void main(String[] args) {
   A a=new A();
   a.test(5);
	}
	
 
}
class A{
	public void test(int n) {
		if(n>2) {
			test(n-1);
		}
		System.out.println("n="+n);
	}
	
	
}

结果: 

内存图: 

 

(2)可变参数

假设我们要设计程序来进行加法运算,在类Adder编写方法add进行累加,但在方法的参数列表中参数个数是限定的,意味着我们事前要知道累加多长的长度。但是如果不知道呢?

1.不用可变参数

public class Main{//假设要设计一个程序进行累加。分别对2、3、4个数进行累加。
	public static void main(String[] args) {
	int a=1;
	int b=2;
	int c=3;
	int d=4;
	Adder adder=new Adder();
	adder.add(a, b);
	adder.add(a, b,c);
	adder.add(a, b,c,d);
		
	}
}
class Adder{//对两个数进行累加
   public int add(int a,int b) {
	   return a+b;
	   
   }
   public int add(int a,int b,int c) {//对三个数进行累加
	   return a+b+c;
   }
  public int add(int a,int b,int c,int d) {//对四个数进行累加
	  return a+b+c+d;
  }
}

2. 使用可变参数 

其实使用可变参数和使用数组差不多。

public class Main{
	public static void main(String[] args) {

	int []a= {1,2,3,4};//我们每次只需要改变数组就可以对其进行累加
	Adder adder=new Adder();
	
	System.out.println(adder.add(a));
	
	}
}
class Adder{
   public int add(int...a) {//使用可变参数
	   int end=0;
	   for(int i=0;i<a.length;i++) {
		   end=end+a[i];
	   }
	   return end;
   }
  
}

(3)全局变量和局部变量

对于全局变量和局部变量,相信大家都很熟悉,但还是有几处需要注意的地方。 

1.全局变量可以不赋值,直接使用,因为有默认值。但局部变量必须赋值后才能使用,因为没有默认值。

2.全局变量可以加修饰符,而局部变量不可以加修饰符(修饰符:如public、protected、private)

(4)对象的创建流程

图片源自韩顺平老师 

当我们创建一个对象时,他会怎么分配内存,分为以下四步

(1)加载该类的信息,只会加载一次。

(2)在堆中分配空间

(3)完成对象初始化

(4)对象在堆中的地址,返回给在栈中的对象(对象的引用)

(5)this关键字

 图片源自韩顺平老师

特别需要注意的是第三和第四点。

 用this来调用方法,格式是this.方法名(参数列表)。

public class Main{
	public static void main(String[] args) {
    Test a=new Test();//创建对象a
    a.testB();//在对象a中调用方法testB()
  
}
	
}
class Test{
	public void testA() {
		System.out.println("执行testA方法");
	}
	public void testB() {
		this.testA();//在方法testB中用this调用testA
		System.out.println("执行testB方法");
	}
	
}

 在构造器中调用另一个构造器用this(参数列表),需要注意的是this语句必须在第一句,而且只能是在同一类中一个构造器调用另一个构造器,不能在方法中。

public class Main{
	public static void main(String[] args) {
    Test a=new Test();//创建对象a
  

  
}
	
}
class Test{
	public Test() {
		this(1,2);//用this去调用其他的构造器,必须放在第一句
		System.out.println("执行Test构造器");
		
	}
	public Test(int a,int b) {
		
		System.out.println("执行Test(int a,int b)构造器");
	}
	
	
}

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

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

相关文章

高效节能 | 智慧灯杆综合管理解决方案

智慧灯杆的应用越来越广泛&#xff0c;园区、景区、道路照明&#xff0c;三站一场等户外场所大规模铺设路灯&#xff0c;通过智慧物联平台远程控制&#xff0c;可以实现高效节能和智能化运维管理。以解决传统运维管理中&#xff0c;不同路线路灯设备控制不统一&#xff0c;设备…

Yjs解析

本文引用自 摸鱼wiki 1. YATA算法解析 YATA算法是Yjs库的核心冲突解决算法&#xff0c;这里主要讲解下这个算法成立的三个规则&#xff1a; 规则1&#xff1a;禁止发生冲突的插入操作之间的origin连线&#xff08;红线&#xff09;发生交叉。 如上图所示&#xff0c;图中展示…

IDEA创建SpringBoot的Web项目,并使用外部Tomcat

IDEA创建SpringBoot的Web项目&#xff0c;并使用外部Tomcat 目录IDEA创建SpringBoot的Web项目&#xff0c;并使用外部Tomcat一、创建工程二、使用外部Tomcat一、创建工程 1.首先新建一个springboot的war工程&#xff0c;并且将外部的Tomcat整合进我们的idea中&#xff0c;我们…

GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯

环境 pwm.v $ cat pwm.v module Pwm( input clk, input [31:0] period, input [31:0] duty, output pwmout ); reg [31:0] counter; reg r_pwmout; always (posedge clk) begin if(counter < duty) begin r_pwmout 1; end…

裸机与RTOS到FreeRTOS基础 | FreeRTOS一

目录 一、裸机与RTOS 1.1、裸机 1.2、RTOS 二、FreeRTOS简介 2.1、介绍 2.2、特点 2.3、如何查找相关资料 三、FreeROTS基础 3.1、任务调度 3.2、任务状态 一、裸机与RTOS 1.1、裸机 不带操作系统&#xff0c;又称为前后台系统&#xff0c;前台系统指中断服务函数&a…

docker搭建Openldapphpldapadmin

1&#xff1a;拉取镜像 docker pull osixia/openldap:1.5.0 docker pull osixia/phpldapadmin:0.9.0 2: 编写docker-compose.yaml cd /data/docker/ldap vi docker-compose.yaml docker-compose.yaml内容如下&#xff1a; version: 3.1 services:openldap:image: osixia/o…

python入门常用知识

文章目录前言一、定义二、Tips1.常用方法2. 常用modulestatistics 统计分析常用模块SciPy 算法及统计分析库总结前言 本文用来记录在使用python时一些基础的定义、基础用法或Tips。 一、定义 多变量定义&#xff1a; a, b, c 0, 0, 0数组定义&#xff1a; # 变量定义 a …

CANN 2022 | 开放升级,跃升新台阶

每一位开发者&#xff0c;都是改变世界的力量每一位开发者&#xff0c;都在创造一往无前的AI时代每一位开发者&#xff0c;都在2022砥砺前行&#xff0c;期待在2023再露锋芒逆光而行&#xff0c;只为拂晓回忆2022&#xff0c;哪些年度关键事件让你记忆犹新&#xff1f;是披星戴…

聊聊红黑树,B/B+树和键树

RB树 RB树和AVL树类似&#xff0c;是一种自平衡式的平衡二叉搜索树&#xff0c;AVL不是保证平衡因子不能超过1&#xff0c;红黑的话没有这个要求&#xff0c;他的结点非黑即红&#xff0c;可以达到Logn的查找&#xff0c;插入&#xff0c;删除 RB树的五条性质&#xff1a; 1…

【markdown】语法 添加`emoji`表情

&#x1f4bb; 【markdown】语法添加emoji表情&#x1f3e0;专栏&#xff1a;其他 &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&#…

与资源限制有关的题目

文章目录0、资源限制技巧汇总1、题目一&#xff1a;40亿个数&#xff0c;内存限制为1G&#xff0c;如何找到出现次数最多的数2、题目二&#xff1a;40亿个数&#xff0c;内存限制为10MB&#xff0c;找到所有未出现过的数进阶问题1&#xff1a;40亿个数&#xff0c;内存限制为3K…

【计算机体系结构-02】机器模型

1. 机器模型 (Machine Model) 计算机的基本工作就是进行运算&#xff0c;那么计算就需要有用来处理计算方法的处理单元和提供或保存数值的存储单元。一般将用来处理计算方法的处理单元称为 算术逻辑单元 (ALU--Arithmetic Logic Unit)。在一个计算过程中可能会是这样的一个流程…

springboot整合flowable

自动部署 流程图提前画好&#xff0c;放入 指定文件夹 配置&#xff1a; spring.datasource.usernameroot spring.datasource.passwordroot # nullCatalogMeansCurrenttrue 自动生成表 spring.datasource.urljdbc:mysql:///flowable_process?serverTimezoneUTC&nullCat…

CISP_VULHUB_HACK ME PLEASE

vulhub_HACK ME PLEASE简介扫描开放端口探测web服务搜集seedms的信息登录mysql&#xff0c;尝试获得seeddms的密码利用RCE漏洞提权简介 靶机链接&#xff1a;https://www.vulnhub.com/entry/hack-me-please-1,731/难度&#xff1a;简单描述&#xff1a;一个完全为OSCP设计的简…

数据结构之经典八大排序的实现(万字详谈)

文章目录前言1.插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序6.快速排序hoare方式版本快排实现非递归方式实现快排挖坑法实现快排前后指针法(双指针法&#xff09;快排的各种优化1.减少后几层的递归调用(小区间优化&#xff09;2.三数取中优化3.三路划分(处理大量重复数据&a…

信息论复习—信息的度量

目录 离散信源信息的度量&#xff1a; 离散信源的信息量&#xff1a; 单符号离散无记忆信源&#xff1a; 离散无记忆信源及熵&#xff1a; 自信息&#xff1a; 信息量的定义&#xff1a; 信息熵的定义&#xff1a; 熵的性质&#xff1a; 离散信源的最大熵定理&#xf…

Elasticsearch高级查询—— 关键字精确查询文档

目录一、初始化文档数据二、字段匹配查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age&…

LINUX学习之了解系统目录结构(一)

前言 Linux 系统目录结构是一个由各种目录和文件组成的树形结构&#xff0c;每个目录都有特定的用途。在这篇文章中&#xff0c;我们将讨论 Linux 系统中最常见的目录&#xff0c;并解释它们的用途 登录系统后输入ls命令查看系统目录 树状目录结构图 系统常用目录 目录名描述…

单目相机标定实现--张正友标定法

文章目录一&#xff1a;相机坐标系&#xff0c;像素平面坐标系&#xff0c;世界坐标系&#xff0c;归一化坐标系介绍1&#xff1a;概述公式二:实现1&#xff1a;整体流程4&#xff1a;求出每张图像的单应性矩阵并用LMA优化5&#xff1a;求解理想无畸变情况下的摄像机的内参数和…

SpringBoot项目集成liquibase,数据库版本控制解决方案

liquibase 数据库版本留痕解决方案&#xff0c;在实际生产过程中如何高效管理数据库的DDL与DML语句&#xff0c;对这些语句留痕处理。如果能将sql的执行与SpringBoot项目启动结合在一起&#xff0c;每次启动项目自动执行新增的sql语句&#xff0c;这样就可以使得项目组成员各个…