.NET转JAVA曲折之路
响应国家号召,让软件适应国产化系统,我们被迫走上了这条坎坷大路。
道路崎岖,但挺有意思,从拿来主义到主动思考,这是一个质的转变。
我们花了更多时间用来思考,而不是copy。
--by zh
常态
- 函数名首字母改小写
- 属性操作需要通过get、set函数
- .net扩展方法改为静态函数
- 时间函数更改
- Lambda表达式翻译
- 解决各种注解相关的问题
一些问题
-
Meaven是你入门时应该关注的
项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
-
不存在非必传参数,推荐更多的使用重载特性
-
不支持静态函数this扩展方法
-
Lambda表达式使用方式和函数差异较大
//所有操作基于流stream(),其他请查看教程。 Select -> map Where -> filter ToList -> collect(Collectors.toList()) ToArray -> toArray(String[]::new)) GroupBy -> collect(Collectors.groupingBy(Student::getCode)); OrderBy -> sorted(Comparator.comparing(FieldOperation::getSort).reversed())
-
lambda表达式的一种简写
//双冒号运算操作符是类方法的句柄,lambda表达式的一种简写 //方法调用 person -> person.getAge(); //可以替换成 Person::getAge x -> System.out.println(x) //可以替换成 System.out::println
-
Lambda函数式编程
//常用 Supplier<String> test = ()->""; Function<String, Apple> biLambda = (color) -> new Apple(color); BiFunction<String, Integer, Apple> biLambda = (color, height) -> new Apple(color, height);
-
枚举定义不同
Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法。
-
lambda 表达式中使用的变量应为 final 或有效 final
该表变量属性或通过装箱方式通过编译 Object[] lambda_para = new Object[]{itemList}; HashMap<String, Object> para = new HashMap<>();
-
没有as、is等关键字
//验证类型用instanceof。 obj instanceof class
-
不存在var匿名类型,foreach需指定对象
for (int x : arr) {}
-
存在主动异常需要在函数上申明或捕获
void name() throws Exception {}
-
代码注释、代码折叠
//行注释 /** * 多行注释 */ //region 代码折叠 //endregion
-
JSON对象区别
无JObject,使用第三方JSONObject(阿里)
-
字典类型不同
Dictionary -> HashMap
-
生成随机数
//生成 [m,n] 的数字 int i1 = random.nextInt() * (n-m+1)+m;
-
去掉.NET语法糖
@、$、()=>{}、var、as、is
-
事务被springboot统一管理
默认不需要单独操作
-
区分异常处理
checked 异常 和 RuntimeException 检查异常 : 编译时被检测的异常 (throw后,方法有能力处理就try-catch处理,没能力处理就必须throws)。编译不通过,检查语法(其实就是throw和throws的配套使用)。 运行时异常 : 编译时不被检查的异常(运行时异常。RuntimeException及其子类)。编译通过。
-
判断逻辑中的误区
equals是判断两个变量或者实例指向同一个内存空间的值是不是相同 而==是判断两个变量或者实例是不是指向同一个内存空间 尽量使用equals()!!!
-
int、Integer傻傻分不清楚
Integer是int的包装类;int是基本数据类型; Integer变量必须实例化后才能使用;int变量不需要; Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; Integer的默认值是null;int的默认值是0。
-
★注解-@Autowired中注入静态方法或者静态变量
注意:用static去定义一个注入的方法或者配置文件值变量,编译时不会有任何异常,运行时会报空指针。 通过非静态的setter方法注入静态变量 ,我们可以改成这样就静态变量可以获取到你配置的信息了。 private static OSSConfMapper ossConfMapper; @Autowired public void setOssConfMapper(OSSConfMapper ossConfMapper) { UploadUtil.ossConfMapper = ossConfMapper; }
-
★注解-@Autowired 注入为null 的介绍与解决方式
可能存在的原因: (1)该类没有托管给spring 管理,一般在类的上面添加@Component (2)你的这个类有被new出来的实例的,new 过的对象不会交给Spring容器管理 所以里面的 service或者dao注入不进来。一般是指引用某些框架,你是继承某个接口,但是这些框架默认new过这个方法,比如MVC拦截的HandlerInterceptor类。 +@Component
-
mybatis与ibatis参数区别
mybatis:#{para}、${para} ibatis :#para#、$para$
-
★奇葩-java.lang.NoSuchMethodException
在这个实体类里面有一个属性出问题了;(或者序列化失败问题) 解决方法:在实体类中添加无参构造函数 注意:存在含参构造函数,则必需手动添加无参构造函数
-
mybatis获取自定义列表
Dao.ExecuteQueryForObject //获取对象(获取列表异常) Dao.ExecuteQueryForList //获取列表 select.resultType=java.util.Map //返回列表(Object只会获取首列) <select id="" parameterType="java.util.Map" resultType="java.util.Map"> ... </select>
-
【打包】解决 maven多moudle项目 多个root问题
maven多moudle项目 父pom没有子moudle 就会出现多root目录
-
maven 依赖规则&版本锁定(待测试)
maven调节原则: 1.谁先定义的用谁的传递依赖 2.直接依赖优先级大于传递依赖 排除依赖(将不需要的传递依赖的包去除掉) 标签<exclusions>
-
JSONArray JSONObject 转换时出错
java.lang.reflect.InvocationTargetException 在开发中经常会遇到把一个对象转换成JSON时提示转换错误,这个原因一般是JSONArray或JSONObject无法正常转换对象中的类型造成的,这个时候可以考虑把实体类中的所有属性名称打出来进行观察,如果发现有不是常规的类型就必须指定转换。
-
Stopping service [Tomcat] 错误自查
1.调整日志级别为debug 2.检查 “CONDITIONS EVALUATION REPORT” 行以上日志 3.示例:connection timed out(Redis无法连接,框架启动失败)
学习教程
授人以渔
受一些大神影响,我自己也对此深有体会:
每个人认知水平的不同、表达方式的差异,都会对知识的传播产生残缺,甚至错误的结果。
所以,本块内容才是你学习的重点,学习别人的学习途径,而不是结果。
IDEA
https://www.jetbrains.com/idea/
IDEA使用Maven
https://blog.csdn.net/qq_42662759/article/details/116382333
java正则
https://www.cnblogs.com/xyou/p/7427779.html
https://www.cnblogs.com/perl6/p/7220209.html
java8-lambda
https://www.runoob.com/java/java8-lambda-expressions.html
https://www.cnblogs.com/franson-2016/p/5593080.html
https://www.cnblogs.com/JonnyJiang-zh/p/13702842.html
https://blog.csdn.net/exodus3/article/details/90511500
lambda操作List
https://blog.csdn.net/fzy629442466/article/details/84629422
https://www.cnblogs.com/yelanggu/p/13508195.html
https://blog.csdn.net/qq_39080512/article/details/105539979
https://blog.csdn.net/weixin_30764137/article/details/97982814
https://blog.csdn.net/qq_34996727/article/details/94472999
**★Lambda函数式编程 **
https://blog.csdn.net/rongtaoup/article/details/97617173
Java枚举详解
https://blog.csdn.net/qq_35385687/article/details/90147104
类型判断
https://www.cnblogs.com/felordcn/p/13796202.html
Java 中 JSON 的使用
https://www.runoob.com/w3cnote/java-json-instro.html
java之HashMap讲解
https://www.cnblogs.com/benwu/articles/7749779.html
时间处理
https://www.cnblogs.com/shuilangyizu/p/6902643.html
https://blog.csdn.net/lz199719/article/details/81261336
checked 异常 和 RuntimeException
https://blog.csdn.net/qq_18505715/article/details/76696439
浅谈Java中equals()和==的区别
https://blog.csdn.net/qq_38162448/article/details/81611894
https://www.cnblogs.com/tinyphp/p/3768214.html
Java基础之int和Integer有什么区别
https://blog.csdn.net/chenliguan/article/details/53888018
★注解相关
https://www.cnblogs.com/huanghongbo/p/10890025.html
https://blog.csdn.net/wcy18818429914/article/details/106858974/
依赖相关
https://www.cnblogs.com/songcuiting/p/8783750.html
https://www.jianshu.com/p/e29633d12c19
JSONArray JSONObject 转换时出错
https://www.iteye.com/blog/piranha-1973852