java解惑学习经历(一)

机械专业自学java进阿里巴巴(其中的经历真的心酸) 前言 作者:覃鸿宇 链接:https://www.nowcoder.com/discuss/670244?source_id=discuss_experience_nctrack&channel=-1 来源:牛客网 本科专业,机械设计制造及其自动化,在一所某中下流211,研究生也在这个学校。至于为什么选这个专业,都怪年少不懂事,以为名字长的牛逼。后来阴差阳错,认识了现在的导师--一个年近40岁依然还在每天写 7 8个小时代码的大学教授,他告诉我,写代码一方面是Money,一方面是Interest。 阅读详情

解惑是一本关于java基础的书籍,内jdk版本较低,但仍值得一读,有很多基础但非常重要的思想。

下面进行一些举例和解惑:

1:

package com.gcc.javaRiddle;

import java.math.BigDecimal;

public class Accuracy {
	public static void main(String[] args) {
		System.out.println(2.00-1.4+"元");
		System.out.println(200-140+"分");
		System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.4")));
	}
	
}

最常见的数字迷惑,精度计算, java小数默认是double类型,计算小数会有精度缺失,这时如果你从事的是金融相关的项目要非常注意这一点,在金融上面精度缺失是致命的!有面试金融或者电商一类单位的同志们也注意下此类数据的处理。

* 解决方案1,改变单位,将小数改为整数用int或long来计算 * 解决方案2,用BigDecimal,注意new对象用string类型

运行结果:

0.6000000000000001元
60分
0.60

2:

package com.gcc.javaRiddle;

public class BiggestValue {
	public static void main(String[] args) {
		int count=0;
		for (int i = Integer.MAX_VALUE-100; i <=Integer.MAX_VALUE; i++) {
			count++;
		}
		System.out.println(count);
	}
	
}

不太会遇到,但又可能遇到的问题,这里提个醒。

运行结果:

结果是死循环,因为i++根本做不到比自己类型上线还大的数值

教训:在用数值时要时刻注意上溢和下溢

3:

package com.gcc.javaRiddle;

import java.math.BigInteger;
public class BigProblem {

	public static void main(String[] args) {
		BigInteger bigInteger1 = new BigInteger("500");
		BigInteger bigInteger2 = new BigInteger("5000");
		BigInteger bigInteger3 = new BigInteger("50000");
		BigInteger total = BigInteger.ZERO;
		total.add(bigInteger1);
		total.add(bigInteger2);
		total.add(bigInteger3);
//		total=total.add(bigInteger1);
//		total=total.add(bigInteger2);
//		total=total.add(bigInteger3);
		System.out.println(total);
	}
	
}
不太会遇到的迷惑,这里用来清晰一个概念。

BigInteger是不可变的,同理还有String,BigDecimal,Integer,Long,Short,Byte,Character,Boolean,Float,Double这类包装类型,不能改变这些的值,对这些类型的操作返回的是新的实例。不要被误导不可变类型是可变的。

运行结果:

0

4:

package com.gcc.javaRiddle;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 在关闭流的时候不能直接连续写:in.close()和out.close();因为在第一个流关闭时报错会导致第二个流没有正常关闭;
 * 使用try catch来防止这种错误。
 * try catch:捕获错误,并让程序往下走完
 *
 */
public class CloseProblem {

	public static void main(String[] args) throws IOException {
		String src="";//源数据
		String dest="";//目的路径
		CloseProblem.copy(src, dest);
	}

	@SuppressWarnings("null")
	static void copy(String src, String dest) {
		InputStream in = null;
		OutputStream out = null;
		byte[] buf = new byte[1024];
		int n;
		try {
			while((n=in.read(buf))>=0){
				out.write(buf,0,n);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(in!=null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(out!=null){
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	
}

一个规范的要求,要多关注异常处理,注意内容见代码内注释

5:

package com.gcc.javaRiddle;

public class ConString {
	public static void main(String[] args) {
		System.out.println("a"+"b");
		System.out.println('a'+'b');
	}

}
一个很容易被忽视的类型char,一旦使用易发的错误。这里进行解释。

* 第一行输出是字符串,所有结果是拼接结果
* 第二行输出是字符型字面常量,所有结果是加法运算,会拓宽原生类型,char自动转为int
运行结果:

ab
195

6:

package com.gcc.javaRiddle;

public class GetValue {
	public static void main(String[] args) {
		
		int j=0;
		for (int i = 0; i < 100; i++) {
			j=j++;
		}
		System.out.println(j);
		
		
		int k=0;
		for (int i = 0; i < 100; i++) {
			k++;
		}
		System.out.println(k);
		
	}
	
}
一个一时手贱,看半天又会自觉觉得没问题的写法,这里给出解释。

* j=j++的执行顺序是,j赋值给j得0,j加1但并没有赋值,j仍为0

运行结果:

0
100
7:

package com.gcc.javaRiddle;

public class Indecision {
	public static void main(String[] args) {
		System.out.println(decision());
	}

	@SuppressWarnings("finally")
	private static boolean decision() {
		try {
			return true;
		} catch (Exception e) {
			
		} finally{
			return false;
		}
	}
	
}
一个可以向新手程序员秀一秀的技巧,也是偶尔可能遇到的错误。

* finally的返回值重于try
* 不论try是否出错,若finally有返回值,都将丢掉try的返回值
运行结果:

false

8:

package com.gcc.javaRiddle;
import java.util.Calendar;

public class InitOrder {

//	static int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
	static InitOrder initOrder=new InitOrder();
	int size;
	static int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
	
	private InitOrder() {
		size=CURRENT_YEAR-1990;
	}
	
	private int getSize(){
		return size;
	}
	
	public static void main(String[] args) {
		System.out.println("InitOrder size is:"+initOrder.getSize());
	}
	
}
静态常量也是一些java新手比较陌生的对象,因为使用的不是特别的频繁,这举一个错误例子。

* 目的是在InitOrder初始化过程中给size赋值。而CURRENT_YEAR也是静态的,赋值操作只会在上一个静态域完成后再执行
* 所以CURRENT_YEAR还是缺省值0
* 修改静态变量赋值循序即可。

教训:使用到静态变量时要多注意声明的位置。

运行结果:

InitOrder size is:-1990

JAVA解惑:从入门到精通的Java编程指南 本文还有配套的精品资源,点击获取 简介:《JAVA解惑》是一本面向Java初学者和进阶者的综合性教程,旨在解决Java学习过程中的疑惑。本书详细介绍了Java的基础知识、高级特性和最佳实践。内容涵盖Java的历史、环境搭建、语法基础、面向对象编程、异常处理、文件I/O、集合框架、泛型、标准库、高级特性以及单元测试等多个方面,配合实战项目帮助读者巩固理论知识和提升编程技能。 ... 阅读详情

相关推荐

Java解惑(中文).pdf

Java解惑(中文).pdf 给大家介绍java中容易迷惑用错的实例

java解惑_java解惑

数值表达式篇1.奇偶判断不要使用i % 2 == 1来判断是否是奇数,因为i为负奇数时不成立,请使用i % 2 != 0来判断是否是奇数,或使用高效式(i & 1) != 0来判断。2.小数精确计算Java代码System.out.println(2.00-1.10); //0.8999999999999999上面的计算出的结果不是0.9,而是一连串的小数。问题在于1.1这...

weixin_42534103的博客 544

最新版的Java-解惑

《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》

java 解惑_Java解惑

一. 表达式之谜二. 字符之谜三. 循环之谜谜题24byte是有符号的,范围是-128 - 127。而0x90是int类型。比較的时候。不相等。假设想让其相等,须要进行类型转换:(byte & 0xff) 或者 (byte)0x99。谜题25自增运算符对循环的影响。j = j++。先赋值。谜题26Integer.MAX_VALUE加一之后会变成Integer.MIN_VALUE,这对循环会...

weixin_39630762的博客 284

java 解惑

NULL 博文链接:https://goyourauntie.iteye.com/blog/1179204

Java解惑(中文版)

********Shenkxiao Resources******** 压缩包密码:shenkxiao 资源:Java解惑(中文版)、java puzzlers traps pitfalls,and Corner Cases 作者:Joshua Bloch Neal Gafter 版本:中文版 主要内容: Java解惑(英文版)—典藏原版书苑 目录 1 introduction 2 expressive puzzlers puzzle 1:oddity puzzle 2:time for a change puzzle 3:long pision puzzle 4:it s elementary puzzle 5:the joy of hex puzzle 6:multicast puzzle 7:swap meat puzzle 8:dos equis puzzle 9:tweedildum puzzle 10:tweedledee 3 przzlers with character puzzle 11:the last laugh puzzle 12:abc puzzle 13:animal farm puzzle 14:escape rout puzzle 15:hello whirled puzzle 16:line printer puzzle 17:huh? puzzle 18:string cheese puzzle 19:classy fire puzzle 20:what s my class? puzzle 21:what s my class,take2 puzzle 22:dupe of url puzzle 23:no pain,no gain 4 loopy puzzlers puzzle 24:a big delight in every byte puzzle 25:inclement increment puzzle 26:in the loop puzzle 27:shifty i s puzzle 28:looper puzzle 29:bride of loper puzzle 30:son of loper puzzle 31:ghost of looper puzzle 32:curse of looper puzzle 33:looer meets the wolfman puzzle 34:down for the count puzzle 35:minute by minute 5 exceptonal puzzlers 6 classy puzzlers 7 library puzzlers 8 classier puzzlers 9 more library puzzlers 10 advanced puzzlers a catalog of traps and pitfalls b notes on the illusions refereces index 本书深入研究Java编程语言及其核心类为的细微之处,特写95个有关Java或其他类库的陷阱和缺陷的谜题,其中大多数谜题都采用短程序的形式给出。在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。本书附录部分列出了陷阱及缺陷的目录,可供读者进一学习参考。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、总结归纳Java编程语言的知识点,适合具有Java知识的学习者和有编程经验的Java程序员阅读。 上传理由:精品典藏共享,网络上下载该资源太费劲,我来共享吧 因为是精品所以分数也比较高。 ***********************************

Java解惑

1.递归中的坑之前在leetCode上刷题,问题传送门:Binary Tree Paths,按理说一个很简单的递归方法就能解决啊,为什么会出现问题呢?先po代码:public class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> answer = new ArrayList<Str

1700

Java解惑Java解惑

Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑

Java中关于精度丢失的问题

double a=0.2; double b=0.4; Log.e("正常的",String.valueOf(a+b));//输出了 0.6000000000000001 BigDecimal a1=new BigDecimal("0.2"); BigDecimal a2=new BigDecimal("0.4");

前人挖坑,后人种(pen) 1925

MATLAB Appdesigner开发独立桌面App全流程(一):以打开串口功能为例介绍Appdesigner的基本使用

本文详细介绍了Appdesigner的基本使用,以串口功能为例介绍按钮回调函数的实现以及控件之间通信的问题

Zhuwany的博客 3万+

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1147

学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(一)

这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!![外链图片转存中…(img-JSqWU46J-1712429301696)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

2401_84048034的博客 700

AI大模型API中转站选型指南:12项关键指标与实战评估

随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实

weixin_29056101的博客 445

学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(一)(1)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

2401_83916283的博客 771

Android音频学习(一)——音频基础

在系统的学习Android音频之前,先了解音频的基础知识。

miemie2014的博客 1484

车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例)

本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。

weixin_30955617的博客 111

自己的秋招春招经历,现在的发展情况

本人大四学生一枚,即将毕业,目前还未找到工作,说一下自己的秋招春招的经历。 秋招经历 由于个人的原因,在大三暑假的时候,自己并没有去找实习,这里就缺少了以后在就职过程中的一个加分的点。在2019年9月份的时候,参加了学校第一场宣讲会,A公司,群体笔试,笔试内容包含了JAVA,数据库等知识,由于自己JAVA实在太菜,错了很多,但自己数据库掌握还不错,于是进入到了面试,面试官提供的岗位并不是JAVA工程师,地点在新疆,岗位是实施运维工程师。其实这样看来我很幸运,在第一个宣讲会中,...

yuhang的博客 754

北斗导航 | SPP、RTK、RTD、PPP-RTK、PPP算法原理,公式及完整matlab代码

开发参考:SPP适合入门学习GNSS定位原理和最小二乘。RTK是工程高精度定位主流方案,但依赖基站。PPP适合无基站区域的广域高精度应用。PPP-RTK是融合两者优点的新一代技术,但系统复杂度最高。· 代码资源:raPPPid(VieVS PPP)是功能完整的MATLAB开源PPP工具箱,支持多系统PPP-AR。MATLAB GPS Toolbox 提供从SPP到PPP的完整功能实现。· 实际应用:农业自动驾驶、无人机航测通常使用网络RTK;大地测量、地壳形变监测常采用PPP事后处理;

尘世冰封的专栏 827

java入门到工作(一)学习

java入门到工作(一)学习 作为一名已经工作快3年的java搬砖工,一直以来,学习是必要的,从csdn、博客园、简书等等技术websites 各种学习资源比比皆是。 ...

xj的word之路 618

1. 动手开发第一个 SAP CDS View

在开始学习前,大家需要根据这篇文章介绍的步骤,在自己本地电脑上,把 ABAP Development Tool 安装好。右键单击这个添加好的 ABAP 开发包,选择新建一个 ABAP Repository Object,类型就选择。,就可以像在 SAPGUI 里使用 SE16 那样,查看这个 CDS View 的内容。笔者下一篇文章,会详细介绍我们创建的第一个 CDS View 的每一行代码的详细含义。从本文开始,正式进入 CDS View 开发的学习。的条件,然后点击 Run 重新执行,得到结果。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1271

利用baostock获取上市公司财务指标

利用baostock获取上市公司的财务指标 1、导入模块,登录baostock import baostock as bs import pandas as pd import time # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) 2、查询股票代码、行业板块 # 查询股票代码 rs=.

firefox_yau的博客 2098

【济南校区】学习经历

       转眼间已经进入黑马学习了三个月,这三个月我也从一个什么都不懂的小白变成了一只什么都不太懂的低级菜鸟,回首这三个月,与我之前的生活有很大的区别.       大学专业土木工程,和大多数人一样,恍恍惚惚的四年一下就过来了,毕业后很顺利的成为了一家大型国企工地上的一名施工员,但是到了工地之后才发现这并不是我想要的生活,我也并不喜欢这份在别人眼中还算不错的工作,虽然有辞职的冲动但是因为并不清...

qq_41942438的博客 323

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从学生到职场,这位百万爬虫博主都经历了什么?

崔庆才丨静觅 · 微软工程师 微软工程师,北京航空航天大学硕士,《Python 3网络爬虫开发实战》作者,爬虫博客的百万博主,喜欢钻研,热爱生活,乐于分享。欢迎关注个人微信公众号“进击的Coder”。 文章 正式入职微软,提交了第一个 PR 之后,我坐在椅子上思考人生。终于我也变成了一名正式的企业员工,变成了一名正式的踏入社会的职业人士,从此我的学生生涯也算是画上了一...

优快云高校俱乐部官方博客 1713

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: shiro一,自定义realm
下一篇: springMvc文件下载以及遇到的问题
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值