zoukankan      html  css  js  c++  java
  • 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却报文件找不到的错误

    查看是不是隐藏了后缀。

    九、

    MultipartFile的transferTo方法

    用来将客户端上传的文件直接放到本地磁盘中

     TEMPPATH是一个相对路径

    如何过transferTo参数是csvTmp1的话,复制不到新的文件中,但是用csvTmp的话(使用了绝对路径),就可以把文件复制到新的文件

    十、子类构造方法会默认先调用父类的无参构造方法。

     11、可以通过classloader去获取项目中的图片

    A.getClass.getClassLoader().getResourceAsStream(相对路径);src为项目的classPath,只要是src下面的classloader都能获取到

  • 相关阅读:
    Python作业之分页显示内容
    Codeforces Round #368 (Div. 2)
    数论专项测试——约数个数和(lucas的数论)
    数论专题测试——逆元
    数论专题测试——幸运数字
    bzoj2219: 数论之神
    bzoj3283: 运算器
    梅森素数
    后缀数组
    Hash_1014: [JSOI2008]火星人prefix
  • 原文地址:https://www.cnblogs.com/heibo/p/11927352.html
Copyright © 2011-2022 走看看