java 踩雷日记--new
时间:2022-07-23
本文章向大家介绍java 踩雷日记--new,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.数组元素中元素没有 new 导致数组为空
SolutionSet[] Donminant_pop;
Donminant_pop = new SolutionSet[NUMTASK];
Solution newSolution = new Solution(problemSet_);
B_pop[taskID].add(newSolution);
- 错在 B_pop[taskID]应该是一个 SolutionSet,但是我没有 new,所以导致数组中元素为空
B_pop[taskID] = new SolutionSet(ND_eachtask);
2.要用的对象要一次性 new 完,最好不要在调用的过程中或者循环的工程中重复 new 出新的对象
- new 一个对象时,传给一个变量名时,其中的数据会初始化,因此原先的元素都不保留了。对于 List 类型的元素来说有 clear 元素的效果
// Create the initial solutionSet B0
for (int taskID = 0; taskID < NUMTASK; taskID++) {
//初始化所有pop
for (int popindex = 0; popindex < ND_eachtask; popindex++) {
Solution newSolution = new Solution(problemSet_);
problemSet_.get(taskID).evaluate(newSolution);
problemSet_.get(taskID).evaluateConstraints(newSolution);
evaluations++;
// 初始建立种群时,为每个个体随机分配一个合适的任务即SkillFactor
newSolution.setSkillFactor(taskID);
B_pop[taskID] = new SolutionSet(ND_eachtask);
B_pop[taskID].add(newSolution);
}
}
- 例如此处就写错了,此处 B_pop 中只有一个元素,即 B_pop[0],而且 B_pop[0]中只有一个元素,就是 newSolution,因为内层循环时,每次都会更新 B_pop 中的元素,所以 B_pop 中的元素没有保留。而且每次都在这个基础上添加一个元素,然后又重置了。
- 只有将 B_pop 的 new 函数写在循环的外部才是正确的。
// Create the initial solutionSet B0
for (int taskID = 0; taskID < NUMTASK; taskID++) {
//初始化所有pop
B_pop[taskID] = new SolutionSet(ND_eachtask);
for (int popindex = 0; popindex < ND_eachtask; popindex++) {
Solution newSolution = new Solution(problemSet_);
problemSet_.get(taskID).evaluate(newSolution);
problemSet_.get(taskID).evaluateConstraints(newSolution);
evaluations++;
// 初始建立种群时,为每个个体随机分配一个合适的任务即SkillFactor
newSolution.setSkillFactor(taskID);
B_pop[taskID].add(newSolution);
}
}
- 这样 B_pop 中有 NUMTASK 个维度,而每个维度中又有 ND_eachtask 个元素。
3.要注意 new 对象的生命周期
- 对于类型的属性的来说,其生命周期存在于该类型变量的所有函数,但是局部变量只存在于变量域中。
- 手机支付每天限额500块钱?“我刷你”和“你刷我”限额不一样
- 原始UDP封包发送
- Elasticsearch——Rest API中的常用用法
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
- Elasticsearch——多索引的使用
- 路由跟踪技术
- 手把手教你编写Logstash插件
- ping 实现设计---ICMP
- Elasticsearch增删改查 之 —— mget多文档查询
- Elasticsearch 之 数据索引
- AngularJS 国际化——Angular-translate
- MFC中注释含义
- Elasticsearch Span Query跨度查询
- 2017年重写人类两端时长的科技大事记
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!
- Kubernetes控制器--副本集ReplicaSet
- Awesome Kubernetes 系列:第一期
- Mongodb多键索引之数组文档
- 在 Cocos Creator 里画个炫酷的雷达图
- 用shader做一个柿子颜色的过场动画
- mysql 找出最新时间的一条数据
- 【NPM库】- 0x05 - 文件、路径操作
- MySQL中insert阻塞问题的分析
- Fedora32下编译安装Qemu5.1并创建ARM版本Linux虚拟机
- 面试官想问的HashMap,都在这一篇里面了!
- CentOS7下使用Mondo Rescue实现系统全备份
- CentOS7下搭建Rsyslog Server记录远程主机系统日志
- 企业运维经典面试题汇总(4)
- 使用QEMU模拟树莓派Raspberry Pi