.NET转JAVA曲折之路

.NET转JAVA曲折之路

响应国家号召,让软件适应国产化系统,我们被迫走上了这条坎坷大路。

道路崎岖,但挺有意思,从拿来主义到主动思考,这是一个质的转变。

我们花了更多时间用来思考,而不是copy。

​ --by zh

常态

  • 函数名首字母改小写
  • 属性操作需要通过get、set函数
  • .net扩展方法改为静态函数
  • 时间函数更改
  • Lambda表达式翻译
  • 解决各种注解相关的问题

一些问题

  1. Meaven是你入门时应该关注的

    项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
    
  2. 不存在非必传参数,推荐更多的使用重载特性

  3. 不支持静态函数this扩展方法

  4. 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())
    
  5. lambda表达式的一种简写

    //双冒号运算操作符是类方法的句柄,lambda表达式的一种简写  
    //方法调用
    person -> person.getAge();
    //可以替换成
    Person::getAge
    
    x -> System.out.println(x)
    //可以替换成
    System.out::println
    
  6. Lambda函数式编程

    //常用
    Supplier<String> test = ()->"";
    Function<String, Apple> biLambda = (color) -> new Apple(color);
    BiFunction<String, Integer, Apple> biLambda = (color, height) -> new Apple(color, height);
    
  7. 枚举定义不同

    Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法。

  8. lambda 表达式中使用的变量应为 final 或有效 final

    该表变量属性或通过装箱方式通过编译
    Object[] lambda_para = new Object[]{itemList};
    HashMap<String, Object> para = new HashMap<>();
    
  9. 没有as、is等关键字

    //验证类型用instanceof。
    obj instanceof class
    
  10. 不存在var匿名类型,foreach需指定对象

    for (int x : arr) {}
    
  11. 存在主动异常需要在函数上申明或捕获

    void name() throws Exception {}
    
  12. 代码注释、代码折叠

    //行注释
    
    /**
    * 多行注释
    */
    
    //region 代码折叠
    //endregion
    
  13. JSON对象区别

    无JObject,使用第三方JSONObject(阿里)
    
  14. 字典类型不同

    Dictionary ->  HashMap
    
  15. 生成随机数

    //生成 [m,n] 的数字
    int i1 = random.nextInt() * (n-m+1)+m;
    
  16. 去掉.NET语法糖

    @、$、()=>{}、var、as、is
    
  17. 事务被springboot统一管理

    默认不需要单独操作

  18. 区分异常处理

    checked 异常 和 RuntimeException
    检查异常  : 编译时被检测的异常 (throw后,方法有能力处理就try-catch处理,没能力处理就必须throws)。编译不通过,检查语法(其实就是throw和throws的配套使用)。
    运行时异常 : 编译时不被检查的异常(运行时异常。RuntimeException及其子类)。编译通过。
    
  19. 判断逻辑中的误区

    equals是判断两个变量或者实例指向同一个内存空间的值是不是相同
    而==是判断两个变量或者实例是不是指向同一个内存空间
    尽量使用equals()!!!
    
  20. int、Integer傻傻分不清楚

    Integer是int的包装类;int是基本数据类型;
    Integer变量必须实例化后才能使用;int变量不需要;
    Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
    Integer的默认值是null;int的默认值是0。
    
  21. ★注解-@Autowired中注入静态方法或者静态变量

    注意:用static去定义一个注入的方法或者配置文件值变量,编译时不会有任何异常,运行时会报空指针。
    通过非静态的setter方法注入静态变量 ,我们可以改成这样就静态变量可以获取到你配置的信息了。
    private static OSSConfMapper ossConfMapper;
    @Autowired
    public  void setOssConfMapper(OSSConfMapper ossConfMapper) {
        UploadUtil.ossConfMapper = ossConfMapper;
    }
    
  22. ★注解-@Autowired 注入为null 的介绍与解决方式

    可能存在的原因:
    (1)该类没有托管给spring 管理,一般在类的上面添加@Component
    (2)你的这个类有被new出来的实例的,new 过的对象不会交给Spring容器管理 所以里面的 service或者dao注入不进来。一般是指引用某些框架,你是继承某个接口,但是这些框架默认new过这个方法,比如MVC拦截的HandlerInterceptor类。
    +@Component
    
  23. mybatis与ibatis参数区别

    mybatis:#{para}、${para}
    ibatis :#para#、$para$
    
  24. ★奇葩-java.lang.NoSuchMethodException

    在这个实体类里面有一个属性出问题了;(或者序列化失败问题)
    解决方法:在实体类中添加无参构造函数
    注意:存在含参构造函数,则必需手动添加无参构造函数
    
  25. mybatis获取自定义列表

    Dao.ExecuteQueryForObject	//获取对象(获取列表异常)
    Dao.ExecuteQueryForList		//获取列表
    select.resultType=java.util.Map //返回列表(Object只会获取首列)
    <select id=""  parameterType="java.util.Map" resultType="java.util.Map">
    	...
    </select>
    
  26. 【打包】解决 maven多moudle项目 多个root问题

    maven多moudle项目 父pom没有子moudle 就会出现多root目录
    
  27. maven 依赖规则&版本锁定(待测试)

    maven调节原则:
    1.谁先定义的用谁的传递依赖 
    2.直接依赖优先级大于传递依赖
    排除依赖(将不需要的传递依赖的包去除掉) 标签<exclusions>
    
  28. JSONArray JSONObject 转换时出错

    java.lang.reflect.InvocationTargetException
    
    在开发中经常会遇到把一个对象转换成JSON时提示转换错误,这个原因一般是JSONArray或JSONObject无法正常转换对象中的类型造成的,这个时候可以考虑把实体类中的所有属性名称打出来进行观察,如果发现有不是常规的类型就必须指定转换。
    
  29. 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

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值