JAVA关于static静态

static:

static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量

被static修饰的成员变量,叫做静态变量
特点:
1.被该类所有对象共享
2.不属于对象,属于类
3.随着类的加载而加载,优先于对象存在
调用方式:
1.类名调用(推荐)
2.对象名调用

举个例子

创造一个学生类,变量有校长,在一个学校的学生都共用一个校长吧?

所以可以定义校长为static String name; 

被static修饰的成员变量,叫做静态变量
特点:
多用在测试类和工具类中
Javabean类中很少会用
调用方式:
类名调用
对象名调用

这里提到了工具类回顾一下三种类

Javabean类:用来描述一类事物的类
测试类:检查其他类是否是写正确,带有main方法的
工具类:不是用来描述一类事物的,而是帮助我们做一些事的

在这里介绍一下方法类 

有三个特点:

1.类名见名知意

2.私有化构造方法,(不创造对象,因为只是个方法,之调用其中的方法)

3.方法定义为静态(都可以用)

package pdsu_zjh;

import java.util.StringJoiner;

public class CeShi {

	private CeShi() {
		// TODO Auto-generated constructor stub
	}
	public static  String printarr(int[] arr) {
		StringBuilder sd=new StringBuilder( );
		sd.append("[");
		for(int i=0;i<arr.length;i++)
		{
			if(i ==arr.length-1)sd.append(arr[i]);
			else sd.append(arr[i]).append(",");
		}
		sd.append("]");
		
		return sd.toString();
		
	}
}

这是个方法类,可以看到构造方法用private修饰不能创建对象,不过能用方法

这样用 

package pdsu_zjh;
import java.util.Random;
public class Youxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[]= {1,2,3};
		String aString=CeShi.printarr(arr);
		System.out.println(aString);
	}

}

static注意事项 

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中没有this关键字
  • 在创建类的时候随着类的加载而加载的,他会在方法去创建一个空间存储static

 解释

静态方法只能访问静态变量和静态方法:

可以看作静态的就是共享的,共享的谁都能用,不过创建的对象的属于私有的,能用共享的,不过共享的不能用私有的。

静态方法中没有this关键字:因为this是指的某个对象的成员变量是私有的,

package pdsu_zjh;
import java.util.StringJoiner;
public class CeShi {
	String nameString;//成员变量名字
	static String teacherString;//静态变量:老师名字
	private CeShi() {//空参构造
		// TODO Auto-generated constructor stub
	}
	
	public CeShi(String nameString) {//在这里我是自动生成的有参构造,没有teacherString的原因是,静态变量是随着类加载而加载的。比对象先出现
		super();
		this.nameString = nameString;
	}
	public void show(/*CeShi this*/) {/*这里括号内有CeShi的原因是系统默认用的就是这个,你如果创造了一个对象C1,那么C1.show();默认就是用的C1的show方法,里面输出的也就是C1的变量,this也是方法调用着的地址所以就相当于有this*/
		System.out.println(nameString);//输出的是方法调用者的nameString.
	}

	public static  String printarr(int[] arr) {/*静态方法在里面不能有成员变量因为成员变量是私有的,不过静态方法能调用静态变量*/
		StringBuilder sd=new StringBuilder( );
		sd.append("[");
		for(int i=0;i<arr.length;i++)
		{
			if(i ==arr.length-1)sd.append(arr[i]);
			else sd.append(arr[i]).append(",");
		}
		sd.append("]");
		
		return sd.toString();
		
	}
}

    ### 解决 PP-OCRv4 出现的错误 当遇到 `WARNING: The pretrained params backbone.blocks2.0.dw_conv.lab.scale not in model` 这样的警告时,这通常意味着预训练模型中的某些参数未能匹配到当前配置下的模型结构中[^2]。 对于此问题的一个有效解决方案是采用特定配置文件来适配预训练权重。具体操作方法如下: 通过指定配置文件 `ch_PP-OCRv4_det_student.yml` 并利用已有的最佳精度预训练模型 (`best_accuracy`) 来启动训练过程可以绕过上述不兼容的问题。执行命令如下所示: ```bash python3 tools/train.py -c configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_student.yml ``` 该方案不仅解决了参数缺失带来的警告,还能够继续基于高质量的预训练成果进行微调,从而提升最终检测效果。 关于蒸馏的概念,在机器学习领域内指的是将大型复杂网络(teacher 模型)的知识迁移到小型简单网络(student 模型)。这里 student 和 teacher 的关系是指两个不同规模或架构的神经网络之间的指导与被指导的关系;其中 teacher 已经经过充分训练并具有良好的性能,而 student 则试图模仿前者的行为模式以达到相似的效果但保持更高效的计算特性。 至于提到的 `Traceback` 错误信息部分,由于未提供具体的跟踪堆栈详情,难以给出针对性建议。不过一般而言,这报错往往涉及代码逻辑错误或是环境配置不当等问题。为了更好地帮助定位和解决问题,推荐记录完整的异常日志,并仔细检查最近修改过的代码片段以及确认依赖库版本的一致性。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值