工作遇到的小问题

1:为什么要重写tostring()方法。

toString 方法来自于Object 类,作用是:返回一个字符串,是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。
不写直接调用

ackage com.zout.toString;  
public class Test {  
    public static void main(String[] args){  
        Object zt = new Object();  
        System.out.println(zt.toString());  
    }  
}  
输出结果:java.lang.Object@7852e922  

写了再调用

//重写tostring方法
		@Override
		public String toString() {
			return "toStringTest [name=" + name + ", sex=" + sex + ", No=" + No + "]";
		} 
这是有tostring重写实体类的时候!
调用实体类返回的是:toStringTest [name=zout, sex=man, No=1]

总结
返回的就是我们正常的业务代码。我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法。
重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。

2:往list集合里面放多个map,每次都是最后一个。

下面这样就可以,注意一个是list的初始化和map的初始化

List<Map<String, String>> ListMap = new ArrayList<>();
//   Map map = new HashMap<>();这样不行
//由于是在循环外创建对象,对象所以在循环中的赋值,对于对象来说是共享的,对象只创建了一个,指向同一地址。
for (String sql : sqlList) {
       Map<String, String> map = new HashMap<>();
       for (int i = 0; i < columnExprs.size(); i++) {
       map.put(columnExprs.get(i).toString(),valueExprList.get(i).toString());        
       }
	   ListMap.add(map);
}

3:String,StringBuffer与StringBuilder的区别?

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

//这里循环里面要常改变sb这个的值,所以用StringBuffer
  StringBuffer sb = new StringBuffer();
  List<String> list = new ArrayList<String>();
  for(SQLExpr expr:columnExprs){
  	expr.output(sb);
    list.add(sb.toString());
    sb.delete(0,sb.length());
         }

而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。

4:java对象转换String类型(方便把这个对象放到list或map里面)

一、采用Object.toString()
toString方法是java.lang.Object对象的一个public方法。在java中任何对象都会继承Object对象,所以一般来说任何对象都可以调用toString这个方法。这是采用该种方法时,派生类会覆盖Object里的toString()方法。但是在使用该方法时要注意,必须保证Object不是null值,否则将抛出NullPointerException异常。
二、采用(String)Object
该方法是一个标准的类型转换的方法,可以将Object转换为String。但是在使用该方法是要注意的是需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误。

复制代码代码如下:
Object o = new Integer(100);
String string = (String)o;

这段程序代码会出现java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String。因为将Integer类型强制转换为String类型,无法通过。
三、String.valueOf(Object)
上面我们使用Object.toString()方法时需要担心null问题。但是使用该方法无需担心null值问题。因为在使用String.valueOf(Object)时,它会判断Object是否为空值,如果是,则返回null。下面为String.valueOf(Object)的源码:

复制代码代码如下:
public static String valueOf(Object obj) {
     return (obj == null) ? "null" : obj.toString();
}

从上面我们可以看出两点:一是不需要担心null问题。二是它是以toString()方法为基础的。
但是一定要注意:当object为null时,String.valueOf(object)的值是字符串对象:“null”,而不是null!!

5:工具类不一定是要返回值的,也可以对传进来的list处理。

List<CsfSrvServiceParam> CsfParam = new ArrayList<CsfSrvServiceParam>();
List<CsfSrvServiceInfo> CsfServiceinfo = new ArrayList<CsfSrvServiceInfo>();
List<CsfRegisterbycodeInfo> registerbycodeInfo = new ArrayList<CsfRegisterbycodeInfo>();
 //根据sql的前缀提取三个表的list
 //下面这个工具类就是对传入的3哥list处理,往里面加入值。这时候外边这个类的list就有值了。
CSFBeanUtils.getCSFServiceBeanList(insertSqls,CsfParam,CsfServiceinfo,registerbycodeInfo);
 //拿到三个list之后 分出每个list的service信息 入审核表
System.out.println(CsfParam);

6:java IO流

IO流概念
流是从一端到另一端,连接了源头和目的地。
IO流可以理解为连接程序与文件/数组/网络连接/数据库。
(1)按流向分类:
输入流
输出流
(2)按处理数据不同分类:
字节流:二进制,可以处理一切文件,包括:纯文本、doc、音频、视频等。
字符流:文本文件,只能处理纯文本。
工作遇到的小问题_第1张图片流的本质就是数据传输
工作遇到的小问题_第2张图片

代码报黄包围(不是黄线)

虽然不会影响运行效果,但也要处理,比如加泛型,jsonArray(阿里的fastjson),来转换数据类型这些。

你可能感兴趣的:(java基础,java)