奇怪而又无可厚非的类加载顺序

昨天看到这样一篇帖子,讨论类加载顺序的,也可以说是初始化顺序的,今天早上找不到了,本来想回复的,现在自己写博客回复了,呵呵

public class Singleton {
private static Singleton obj = new Singleton();
public static int counter1 ;
public static int counter2 = 0;
private Singleton()
{
counter1++;
counter2++;
}
public static Singleton getInstance()
{
return obj;
}
public static void main(String[] args) {
Singleton.getInstance();
System.out.println("obj.counter1=="+counter1);
System.out.println("obj.counter2=="+counter2);
}

}

我不了解为什么obj.counter1=1,obj.counter2=0.希望给我说说 

刚开始也很迷茫,我想不通的问题是什么时候声明的变量count1、count2?

以前的理解它的执行顺序应该是这样的:

1、加载类,当然首先执行的是

private static Singleton obj = new Singleton();

2、所以出现了对中对象的创建,于是执行构造方法:

private Singleton()
{
counter1++;
counter2++;
}

 3、按照顺序,应该执行下一条语句,即:

public static int counter1 ;
public static int counter2 = 0;

好了,类的加载过程完成了。

现在才开始执行main方法的第一条语句,随后的结论都成立了。

现在的问题出现了:什么时候声明的变量count1、count2?

 

查询了一些资料,终于解决了,我认为应该是这样的:

类加载的顺序其实以上的说法是有误的,也就是以前的理解是存在偏差的,除非出现想文章这样的程序才会暴露出来。好了,废话少说,看看真正的类加载顺序:

类加载分为三个过程:装载、链接、初始化。

 

装载的过程就是将class文件读入内存的过程,并且提取其中的类关键信息,比如:方法、变量等等。

 

而在链接中存在三个步骤:

a、进行字节码的检查,看是否符合class文件规范;

b、对类中的类变量进行分配空间,附初始值。此处专指基本类型。

c、对类中的引用变量进行分配空间。

 

随后才进行初始化,现在的初始化才是真正的,将按照语句一句一句执行了。

 

也就是说,在初始化执行以前所有的类变量以及引用变量都是分配了存储空间的,只是他们的数值是不可信任的,也就是系统默认的数据。

现在问题终于搞明白了。

 

所以有这样一个建议,或者说以前有人提醒的问题:

在进行构造方法中不允许进行业务逻辑的处理,只是进行简单的数据初始化,不然会出现意想不到的结果。

 

这个程序说明了这个问题。

如果将

private static Singleton obj = new Singleton();
public static int counter1 ;
public static int counter2 = 0;

 变换为

public static int counter1 ;
public static int counter2 = 0;
private static Singleton obj = new Singleton();

则执行结果则由

obj.counter1=1,obj.counter2=0

变成了

obj.counter1=1,obj.counter2=1.

 

这下明白了吧。

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值