1.java获取前端的IP等信息:网络协议:request.getScheme();网络ip:request.getServerName();端口号:request.getServerPort()
2.文件流和普通的数据类型是不能同时传递的,因为文件流是异步上传的;数据类型少的情况下直接将数据放到action的url接口中传递,这样能做到同时上传少量数据和文件流
3.关于java.io.FileNotFoundException异常:在构造一个File对象时,指定的文件路径是什么都可以,就算不存在也能够构造File对象,但是,现在你要对文件进行输入输出操作,也就是InputStream和OutputStream操作时,如果填写的路径不存在,那么就会报系统找不到指定路径,如果指定的是目录时,就会报拒绝访问异常。FileOutputStream读取流的时候如果是文件夹,就会出错,无论怎么读,都拒绝访问
4.想用相对路径时,但是当我将images这个文件夹与我的.class文件(即要执行的webservice)放在同一个目录里时,发现运行失败了,提示找不到这个文件夹。打印了一下当前目录结果是tomcat的bin目录,而并不是tomcat里所部属的webservice目录。所以当作为webservice部署到tomcat里时,若想使用当前目录,最好先使用System.out.println(newFile(".").getAbsolutePath());查看一下当前目录是什么,因为他不一定是你的.class文件存放的目录,通常是tomcat的bin目录,所以需要根据这个目录重新指定你想要到达的目录。
5.mkdir()创建此抽象路径名指定的目录,只会建立一级的文件夹;mkdirs()创建此抽象路径名指定的目录,包括创建必需但不存在的父目录,可以建立多级文件夹。文件上传到目的地创建路径时还是用mkdir()为好,因为mkdirs()会创建不存在的父目录
6.03年和03年之前版本的EXCEL后缀为xls,用HSSFWorkbook操作;03年之后的用XSSFWorkbook操作
7.重载就是创建另一个有相同名字但参数不同的方法
8.String,StringBuilder和StringBuffer的区别:
(1)String在字符串不经常发生变化的业务场景优先使用(代码更清晰简洁),如常量的命名,少量字符串的 操作
(2)StringBuilder在单线程情况下,如有大量的字符串操作,应使用此类,以此来避免产生大量无用的中间对 象,耗费空间且执行效率低下(新建对象,回收对象会花费大量时间),如json的封装
(3)StringBuffer在多线程,如有大量的字符串操作,如HTTP参数解析和封装
9.HashMap的方法:hashMap是基于Map的实现,并且允许null value和null key,它不保证存储的数据的顺序。特别要注意的是hashMap不是同步的,要实现同步除了在外部实现同步外,还可以通过Map m = Collections.synchronizedMap(new HashMap())或者使用ConcurrentHashMap类。
HashMap
HashMap
存值:map.put("demo",1) 取值:map.get("demo")
判断是否为空:map.isEmpty()
判断是否含有key:map.containsKey("demo") 判断是否含有value:map.containsValue(1)
删除key下的value:map.remove("demo") 删除key->value对:map.remove("demo",1)
显示所有的key:map.keySet() 显示所有的key->value:map.entrySet()
所有的values值:map.values() 元素个数:map.size()
添加另一个同一类型的map下的所有值:map.puAll(map2),使用时不能用表达式赋值,而是变量赋值给变量
替换key下的value:map.replace("demo",2) 清空:map.clear()
当前map不存在键key或者该key关联的值为null,则执行put(key,value);否则不变:map.putIfAbsent()
参数为key和逼函数(箭头函数),作用是把箭头函数返回的值赋给key:map.compute("demo",(k,v) -> 表达式?a:b ),举例如下:
map.compute(8, ((k,v) -> (v == null)? "hiu" : v.concat("hahahaha")));
System.out.println(map.get(8));
map.compute(8, ((k,v) -> (v == null)? "hiu" : v.concat("hahahaha")));
System.out.println(map.get(8));
HashMap遍历方法:
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
意思就是当Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue:map.getOrDefault(Object key,String defaultValue)
10.>>和>>>是位移运算符,其中>>为带符号的位移,>>>为不带符号的位移。左移运算符是增大一个数,右移是减小。正数不管是>>还是>>>操作,这两者操作的结果一样。-2在二进制中为10000~00010(32位),进行>>>移位时,先移位成10000~000001(32位),再将移位后的位置前的取相反。则为011111~1111(32位),即int最大值
11.java中 静态方法不可以直接调用非静态方法和成员,也不能使用this关键字(这就是这个问题的原因,我用静态的main方法调用了非静态的的get方法)。
原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中”寄居”,不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错(Cannot make a static reference to the non-static method func() from the type A)。
12.Java中实现多态的机制为“父类或接口中的引用变量指向的是具体实例对象的方法,而不是引用变量自身这个类中定义的方法”。