java积累的细节问题
一、将几个数字进行拼接,拼接成字符串
一定要将""放到几个数字之前,否则就会把数字相加之后的数转化成字符串
如你需要拼接年份,月份,和日
如果:2018+12+13+"" 将会转化成 2043的字符串
改正:"'+2018+12+13 将会转化成20181213
二、如何随机获得一个范围内的整数如[x,y)
根据左右区间开闭情况,分为以下几种
[x,y) (Math.random()*(y-x)+x)
(x,y] (Math.random()*(y-x)+1+x)
[x,y] 还没想到
三、将一个对象传入方法中,在方法中 对该对象的操作将影响该对象。对象传入相当于指针。
四、格式化时间为的格式字符串大小写是必须严格的,不然肯定会出错
yyyy:年
MM:月
dd:日
hh:12小时制
HH:24小时制
mm:分
ss:秒
S:毫秒 五、关于通过映射给两个对象中相同名称属性赋值的问题
public static void Copy(Object source, Object dest)throws Exception {
BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(), java.lang.Object.class);
PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors();
BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(), java.lang.Object.class);
PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors();
try{
for(int i=0;i<sourceProperty.length;i++){
for(int j=0;j<destProperty.length;j++){
if(sourceProperty[i].getName().equals(destProperty[j].getName())){
if (!sourceProperty[i].getName().equals("class")) {
destProperty[j].getWriteMethod().invoke(dest, sourceProperty[i].getReadMethod().invoke(source));
break;
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
通过测试发现,在两个类中有一个相同属性,class.但是class并没有get、set方法,导致方法报错,在程序中多加一个判断条件,即可完成本功能
六、新导入一个项目,类中不报错,项目有红叉号的解决方法:右击项目->buildpath->瞎几吧乱选,看有没有那种红叉的删掉试试
七、在项目中遇到的一个有意思的代码
代码一、
for(Menu m:fatherMenu){
//将父亲节点信息放到menuTree中
MenuTree mt=new MenuTree();
mt.setMenuId(m.getMenuId());
mt.setMenuName(m.getMenuName());
mt.setChildList(map.get(m.getMenuId()));
treeList.add(mt);
}
代码二、
MenuTree mt=new MenuTree();
for(Menu m:fatherMenu){
//将父亲节点信息放到menuTree中
mt.setMenuId(m.getMenuId());
mt.setMenuName(m.getMenuName());
mt.setChildList(map.get(m.getMenuId()));
treeList.add(mt);
}
这两段代码的区别就是把MenuTree mt=new MenuTree()放到循环里面和循环外面的区别,但是这两个的执行结果却是完全不同的
第一段代码执行完毕之后放入treeList中的三个东西是不同的,但是第二段代码执行完毕之后放入treeList中的三个东西却是完全一样的,这就导致了错误的发生。
错误的原因:MenuTree类型的对象是一个地址,而这个地址中的属性也会分配一定的内存空间,m.getMenuId(),m.getMenuName()得到的应该是这个三个属性存放的地址,当mt这个变量中的内容发生了变化时,那么地址中的内容也就变化了,导致以前添加的也就改变了。总的来说,set方法设置的不是一个值,而是一个对象。当这个对象改变的时候,引用这个对象的东东也会变化。地址共用了。可能String的值设置成final类型就是这种原因吧,只要当前地址设置为一个值,就不会改变,避免其他引用炸了。。。。

这段代码也是同样的道理。以后写代码的时候一定要这一这种问题。
八、磁盘中明明是有文件的,但是new File却报文件找不到的错误
查看是不是隐藏了后缀。
java积累的细节问题的更多相关文章
- Java总结——常见Java集合实现细节(1)
Java提高——常见Java集合实现细节(1) 2018年04月18日 15:07:35 阅读数:25 集合关系图 Set和Map set代表一种集合元素无序.集合元素不可重复的集合 map代表一种由 ...
- java 代码的细节优化
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用 ...
- java基础部分细节
访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. 私有的,以 ...
- Java集合详解8:Java的集合类细节精讲
Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- 35个Java代码优化的细节,你知道几个?
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- Java 代码注意细节
代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...
- Java 积累复习用
1.jvm 默认编码:Java的默认编码 2.jvm heap : Java虚拟机的内存组成以及堆内存介绍 3.Java命令学习系列(一)--Jps 4.Java命令学习系列(二)--Jstack 5 ...
- java protected 的细节
1. java的权限控制--大部分人都被错误洗脑了. 一个重大的坑,或者一个重大的误区,或者说一个洗脑了成千上万java编程者的错误概念就是: public private protected 是基于 ...
随机推荐
- 快速打造自己的PHPStorm主题
---恢复内容开始--- 一个优雅和舒适的界面,可以增加过多写入代码的动力. Phpstorm小型的白色主题比较简陋.为了打造一个优雅和舒适的界面,我们安装一件叫Material Theme UI的插 ...
- Dockerfile 指令 WORKDIR介绍
Dockerfile中的WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行. 相当于设置容器的工作目录了.我们来看一个dockerfile文件 #test FROM ub ...
- zoom:1的常见作用
zoom是IE专用属性,firefox等是不支持的.它的本来作用是设置或检索对象的缩放比例,但这作用几乎用不到. 可以让网页实现IE7中的放大缩小功能.比如你想让你的网页缩小为原来的一半,那么就在bo ...
- fdisk交互
fdisk交互 命令 说明 指令 a 设置可引导标记 toggle a bootable flag b 编辑bsd磁盘标签 edit bsd disklabel c 设置DOS操作系统兼容标记 tog ...
- redis之为什么redis是单线程?
官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽.既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的 ...
- python datetime库使用和时间加减计算
datetime库使用 一.操作当前时间 1.获取当前时间 >>> import datetime >>> print datetime.datetime.now( ...
- DMA详解
1.DMA由来DMA(Direct Memory Access,直接存储器访问).在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式.中断传送方式.CPU是通过系统总线与其他部件连接并进行 ...
- OpenJudge计算概论-大象喝水
/*========================================================= 大象喝水 总时间限制: 1000ms 内存限制: 65536kB 描述 一只大象 ...
- JEECG中修改时间相关自定义定时器
JEECG中使用,如下: @InitBinder public void initBinder(ServletRequestDataBinder binder) { binder.registerCu ...
- .Net Core 常用开发工具
组件名 描述 可选版本 推荐版本 Visual Studio Community 社区免费版 For Visual Studio 2017 For Visual Studio 2019 Visual ...