JAVA (static) 简述

news2024/11/25 21:21:45

前言:

在力扣上提交代码,发现用static定义变量,和不用static修饰变量,虽然每次运行的结果都一样,但是提交的结果却有通过与不通过两种情况。

测试题目:组合(力扣)dfs + 回溯 + 剪枝 JAVA

static修饰全局变量:

代码:

class Solution  {
	public static List<List<Integer>> nums = new ArrayList<>();
	public static List<Integer> num = new ArrayList<>();
	public static List<List<Integer>> combine(int n, int k) {
           dfs(1, n, k);
           return nums;
	}
	public static void dfs(int i, int n, int k) {
		if(num.size() + n - i + 1 < k) return;//剪枝
		if(num.size() == k) {
		  nums.add(new ArrayList<Integer>(num));
		  return;
		}//重要的事情最先做
		
		num.add(i);//装
		dfs(i + 1, n, k);
		num.remove(num.size() - 1);//回溯(不装)
		dfs(i + 1, n, k);
	}
}

在这里插入图片描述

不用static修饰:

代码:

class Solution {
    List<List<Integer>> nums = new ArrayList<>();
    List<Integer> num = new ArrayList<>();
	public  List<List<Integer>> combine(int n, int k) {
           dfs(1, n, k);
           return nums;
	}
	public  void dfs(int i, int n, int k) {
		if(num.size() + n - i + 1 < k) return;//剪枝
		if(num.size() == k) {
		  nums.add(new ArrayList<Integer>(num));
		  return;
		}//重要的事情最先做
		
		num.add(i);//装
		dfs(i + 1, n, k);
		num.remove(num.size() - 1);//回溯(不装)
		dfs(i + 1, n, k);
	}
}

在这里插入图片描述

值得注意的是,上述两个代码算法完全一样,不同点出在,全局变量是否用static修饰


抱着些许疑惑我写了一个程序分别测试了两个代码:

代码:

import java.util.*;    
public class Main {         
    public static void main(String args[]) {        
    int i[] = {4, 1};
    int k[] = {2, 1};
   
    for(int x = 0; x < 2; x ++) { 
    	Solution s = new Solution();
    	Solution_promax ss = new Solution_promax();
    	System.out.println(s.combine(i[x], k[x]));
    	System.out.println("\033[36m");
    	System.out.println(ss.combine(i[x], k[x]));
    	System.out.println("\033[0m");
    	 
    }
//    Solution_promax ss = new Solution_promax();
//    System.out.println(ss.combine(4, 2));
//    
//    Solution_promax ss1 = new Solution_promax();
//    System.out.println(ss1.combine(4, 2));
//    
//    System.out.println(ss.combine(4, 2));
    
    }
}
class Solution {
    List<List<Integer>> nums = new ArrayList<>();
    List<Integer> num = new ArrayList<>();
	public  List<List<Integer>> combine(int n, int k) {
           dfs(1, n, k);
           return nums;
	}
	public  void dfs(int i, int n, int k) {
		if(num.size() + n - i + 1 < k) return;//剪枝
		if(num.size() == k) {
		  nums.add(new ArrayList<Integer>(num));
		  return;
		}//重要的事情最先做
		
		num.add(i);//装
		dfs(i + 1, n, k);
		num.remove(num.size() - 1);//回溯(不装)
		dfs(i + 1, n, k);
	}
}
class Solution_promax {
	public static List<List<Integer>> nums = new ArrayList<>();
	public static List<Integer> num = new ArrayList<>();
	public static List<List<Integer>> combine(int n, int k) {
           dfs(1, n, k);
           return nums;
	}
	public static void dfs(int i, int n, int k) {
		if(num.size() + n - i + 1 < k) return;//剪枝
		if(num.size() == k) {
		  nums.add(new ArrayList<Integer>(num));
		  return;
		}//重要的事情最先做
		
		num.add(i);//装
		dfs(i + 1, n, k);
		num.remove(num.size() - 1);//回溯(不装)
		dfs(i + 1, n, k);
	}
}

输出:

在这里插入图片描述
1.惊奇的发现用static修饰的变量,不会因为创建新的对象,而恢复初始化

2.不用static修饰的全局变量创建的新对象,内容会恢复初始化

而力扣测试一组代码,就是不断创建新对象,带入数据比对结果,而static修饰全局变量会导致数据叠加。这就是为什么我用static修饰全局变量无法通过的原因。


那么static修饰得全局变量,只需要每次调用函数人为初始化即可:

代码:

class Solution  {
	public static List<List<Integer>> nums = new ArrayList<>();
	public static List<Integer> num = new ArrayList<>();
	public static List<List<Integer>> combine(int n, int k) {
           nums = new ArrayList<>();
           num = new ArrayList<>();//初始化
           dfs(1, n, k);
           return nums;
	}
	public static void dfs(int i, int n, int k) {
		if(num.size() + n - i + 1 < k) return;//剪枝
		if(num.size() == k) {
		  nums.add(new ArrayList<Integer>(num));
		  return;
		}//重要的事情最先做
		
		num.add(i);//装
		dfs(i + 1, n, k);
		num.remove(num.size() - 1);//回溯(不装)
		dfs(i + 1, n, k);
	}
}

在这里插入图片描述


得出简略结论:

1、static目的:java中的static关键字主要用于内存管理。

2.静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之间的交互性。

3.如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而节省内存空间。

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

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

相关文章

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的&#xff0c;所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表尾…

【Matlab】智能优化算法_流向算法FDA

【Matlab】智能优化算法_流向算法FDA 1.背景介绍2.数学模型3.文件结构4.算法流程图5.详细代码及注释5.1 FDA.m5.2 initialization.m5.3 main.m5.4 Select_Functions.m 6.运行结果7.参考文献 1.背景介绍 在流域中&#xff0c;过量或有效降雨量是指流过地表且未渗入土壤的降雨量。…

使用可视化数据库工具 DBeaver

新建一个名为 test 的数据库&#xff1a;右击数据库点击新增&#xff0c;然后创建一张 test &#xff0c;utf8mb4 字符的&#xff0c;点击确定 在 test 数据库下新建一张数据表&#xff0c;如下所示&#xff1a;右击表&#xff0c;然后点击新建表 鼠标放列上面&#xff0c;右键…

安全狗重磅发布数据资产梳理系统

今年6月&#xff0c;浙江某科技有限公司因违反《中华人民共和国数据安全法》第四十五条及相关规定&#xff0c;公司及项目主管人员、直接责任人员分别罚款100万元、8万元、6万元。这也是《数据安全法》开始运行以来的首例“高额罚单”案件。实际上&#xff0c;这也给我国众多行…

002 Jetpack Compose基础组件学习

1.Text组件 Text组件就是原先的TextView组件&#xff0c;用法还是挺简单的&#xff0c;如下就是简单的Text用法&#xff1a; package com.test.composeimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent im…

(搜狗输入法)自定义输入日期格式

需求 想要按特定格式快速输入当天的日期戳&#xff1a;XXXX-XX-XX&#xff0c;如 2023-07-13 方法 参考链接&#xff1a;搜狗输入时间日期格式输入及自定义 按上述教程操作&#xff0c;自定义短语表达式&#xff1a;#$year-$month_mm-$day_dd 即可实现用搜狗输入法输入“r…

Table Recognition Metric: 表格识别算法评测工具包及相关评测基准数据集

Table Recognition Metric 该库用于计算TEDS指标&#xff0c;用来评测表格识别算法效果。可与魔搭-表格识别测试集配套使用。TEDS计算代码参考&#xff1a;PaddleOCR 和 DAVAR-Lab-OCR 使用说明&#xff1a; Install package by pypi.pip install table_recognition_metricRu…

2023-7-13-第十八式观察者模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

【python手写算法】【多元】利用梯度下降实现线性拟合

本来是想做一个特征缩放的&#xff0c;然鹅发现我那种归一化缩放反而让训练速度变慢了。。先搞一个二元的。 if __name__ __main__:X1 [12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,2.19, 1.35, 10.02, 12.93, 5.93, 2.92, 12.81, 4.88, 13.11, 5.8,29.…

135432-37-0,Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro)多肽合成(化学)方法

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ ---试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;--- 多肽试剂Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro)&#xff08;CAS号&#xff1a;135432-37-0&#xff09;&#xff0c;目前多肽合成中&a…

左神算法中级提升(4) 超级重点:动态规划的空间压缩技巧

【案例1】 【题目描述】【以后出现这种的题型 概率很低】 【案例2】 【题目描述】 【思路解析】 构建两个栈&#xff0c;一个栈存放基本数据&#xff0c;一个栈存放最小值数据。每次加入一个数据时&#xff0c;当前元素和栈顶元素比较&#xff0c;谁小谁进入。 然后弹出时&a…

Hugging News #0710: 体验 MusicGen、Diffusers 库发布一周年、我们的内容政策更新

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

[PyTorch][chapter 44][时间序列表示方法4]

前言&#xff1a; 训练复杂度 OE*T*Q 参数 全称 E 迭代次数 Number of the training epochs T数据集大小 Number of the words in the training set Q 模型计算复杂度 Model computational complexity E,T 一般都认为相同&#xff0c;所以这里面主要讨论Q&#xff0c;模…

maven-依赖管理-下

依赖冲突 特殊优先 特殊优先∶当同级配置了相同资源的不同版本&#xff0c;后配置的覆盖先配置的(提醒&#xff1a;要尽量避免这种没有意义的冲突)修改D:\java_projects\maven_A\pom.xml, 引入mysql5.1 <?xml version"1.0" encoding"UTF-8"?> &…

什么是用电信息采集系统?

用电信息采集系统是一种用于收集、处理和分析电力用户用电信息的系统&#xff0c;旨在提高电力系统的运行效率、可靠性和安全性。该系统主要通过对电力用户的用电数据进行实时监测、分析和处理&#xff0c;为电力公司、政府部门和用户提供有用的信息&#xff0c;以帮助他们更好…

PyTorch 1.13简介

# 1.  PyTorch 1.13 据官方介绍&#xff0c;PyTorch 1.13 中包括了 BetterTransformer 的稳定版&#xff0c;且不再支持 CUDA 10.2 及 11.3&#xff0c;并完成了向 CUDA 11.6 及 11.7 的迁移。此外 Beta 版还增加了对 Apple M1 芯片及 functorch 的支持。 1.1 主要更新 Be…

JavaWeb 前后端分离

AJax 1. 前端视图 ajax\src\main\webapp\ajax-register.html <html><head><meta charset"UTF-8"> </head><body><form class"form-horizontal" role"form"><div><tr><td>账号</td&…

数据库主从同步

目录 一、准备工作1.1 安装或关闭以下服务1.2 本次安装环境 2、主数据库配置2.1主数据库配置2.2创建用户2.3查看信息 三、从主数据库配置3.1从数据库配置3.2连接主服务器3.3测试 4、其他4.1连接完毕后发现Slave_IO_Running值异常&#xff0c;4.2报错Error connecting to source…

第一阶段-第七章 Python的函数进阶

目录 一、函数多返回值  1.学习目标  2.多个返回值的语法  3.本节的代码演示 二、函数多种传参方式  1.学习目标  2.函数参数种类&#xff08;位置参数、关键字参数、缺省参数、不定长参数&#xff08;位置传递、关键字传递&#xff09;&#xff09;  3.本节的代码…

一条命令解决端口占用,开启mysql

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 端口占用开启mysql 端口占用 如果发现 8080 端口被占用可以使用命令 sudo lsof -t -i:8080 | sudo xargs kill -9 查找并杀死相应的进程。 开启mysql 打开命令提示符或终端。如果您已经安装了MySQL&…