Java学习笔记一

因为我是博客新手,所以想一直坚持写下去(成为博客专家奋斗),
在这里给自己设定一个月的目标:
写出15篇用心的博客。

写博客的目的有三点:

  1. 整理记录自己学到的新的知识,以便以后遗忘查看。
  2. 和广大编程人员学习交流。
  3. 分享一些解决问题的方法。

最近想系统的学一下Java,从基础语法到核心部分。之前已经看过两遍java基础部分,但是没有及时的整理记录,后来有些重要的知识点被遗漏了。所以趁着最近有时间,再将Java学习一遍并做好整理记录,算上这一遍已经对Java基础语法的第三遍学习了,现在应该说Java基础比较牢固了。 因为是首门学习语言,所以多学习几遍加强一下以后再接触其他语言的时候更容易上手(到现在已经学习了android、java、kotlin、c++)。

接下来正式开始自己的写博客之旅。。。。。。

主要整理内容:

  1. 编译型语言和解释型语言
  2. 类型转换
  3. 16进制位数问题
  4. 移位

编译型语言:(C语言等) 通过编译器将源文件编译成本平台可执行文 件,(例如 window平台则编译成 .exe文件) 直接在平台上运行这个 文件即可。
解释型语言:(java语言等) 不管平台是什么,通过编译器直接将源文件编 译成字节码文件(.class),然后在平台上安装JVM(JAVA虚拟机) 解释执行字节码文件。

解释:
我们都知道window系统上的可执行文件的后缀名是 .exe的,所以在window系统平台下用像C语言这样的编译型语言编写的程序编译后最终得到的文件后缀名就是 .exe 这样的文件可被window直接执行。而像java这样的解释型语言不管你的操作系统是window还是linux,它都会将java编写的程序编译后得到 .class文件,然后通过在系统平台上安装JVM(Java虚拟机)执行 .class文件。(可以理解为 .class是JVM的可执行文件的后缀名)。

隐式类型转换:待转换类型所占的的字节数小于目标类型所占的字节数。
强制类型转换:待转换类型所占的的字节数等于大于目标类型所占的字节 数,按照目标类型的字节数从待转换类型中拿出相应字节数(从最 低位开始拿)。强制类型转换可能会造成数据的丢失。
特殊:对于数据类型所占字节数相等的,例如 int和float、long和 double,遵循整数转小数数据不丢失且可自动转换成double、小数转整 数数据丢失且需要强转。

解释:
对于数据类型转换的操作我们首先要了解java中8大基本数据类型所占内存大小。
int — 占4个字节
float—占4个字节
long—占8个字节
double—占8个字节
char—占2个字节
byte—占1个字节
short—占2个字节
1字节=8bit
对于boolean在内存中所占的内存大小,请参见[Java中boolean类型占用多少个字节](https://www.cnblogs.com/wangtianze/p/6690665.html?utm_source=itdadao&utm_medium=referr

例:char c = 'a';
	int i = c + 1;

就会发生隐式类型转换 c先转换为int类型然后再和1相加。c在内存中的二进制表示(00000000 01100001),因为要和int类型的1相加,所以要转换为int类型(00000000 00000000 00000000 01100001)。
转换过程如下:
这里写图片描述

例:int x = 255;
	byte y = (int)x;

这时候是在发生强制类型转换,x的在内存中的二进制:00000000 00000000 00000000 11111111
因为y所占内存大小为1字节,所以要取x的低八位 11111111,舍去其他3个字节。又x低八位的最高位是1,所以y是负数,要对低八位的后七位取补并加一。最终 y = -1。
转换过程如下:
这里写图片描述

16进制位数问题:int y = 0x80000000; x后的每一个数字占四个二进制
位,所以 0x80000000的二进制是 1000,0000,0000,0000, 0000,0000,0000,0000.

解释:

	int x = 0x80000000;
	int y = 0x00000008;
	int z = 0x8
	
	输出结果:
	x = -2147483648 
	y = 8 
	z = 8

x对应得二进制是:1000 0000 0000 0000 0000 0000 0000 0000 所以转换为十进制就是-2147483648 (最高位为1,是负数,遵循取补加一)。
y对应的二进制是:0000 0000 0000 0000 0000 0000 0000 1000所以转换问十进制就是 8。
z对应得二进制是:0000 0000 0000 0000 0000 0000 0000 1000所以转换问十进制就是 8。
通过上面的分析我们知道 16进制的 0x00000008 = 0x8; 0x00000011=0x11。

右移 >> : 最高为原先是什么就补什么。
无符号右移 >>>: 最高位不管以前是什么,都补0。
左移 <<:最低位永远补0。
移位操作的不是数据地址。
移位操作的都是补码,移位得到的结果是原码。
移位小技巧:一个数右移(不包括无符号右移)n位就是将这个数除以2
的n次方;一个数左移n位就是将这个数乘以2的n次方。

解释:

右移>>   int x = 8;
		int rightMoved = x>>1;
		int y = 3;
		int leftMoved = y<<2;
		最后输入:
		x = 8;
		rightMoved = 4;
		y = 3;
		leftMoved = 12;

x的二进制:00000000 00000000 00000000 00001000 = 8
x右移1位,因为x的最高位是0所以右移后最高位补0,最终为
00000000 00000000 00000000 00000100 = 4
小技巧:x右移1位就是将x除以2的1次方 8/2 = 4。
y的二进制:00000000 00000000 00000000 00000011 = 3
y左移2位,最低位补两个0,最终为
00000000 00000000 00000000 00001100 = 12
小技巧:y左移2位就是将y乘以2的2次方 3*2的2次方 = 12。
由输出结果我们可以看到不管是右移还是左移都不会改变自身的值,所以知道移位操作的不是地址中的值。

学习心得:观看资料+自己思考+实践验证+整理记录=有思想的大牛。
加油!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值