java学习----底层原理一

数据类型

  1. java自带8种基本类型,4中整型类型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型,和1种用于表示真值的bool类型(这8种基本类型都有自己的隐式初始值)。
  2. long在申请变量时赋值数据后必须加l或L,若不加l且在int的范围内不会报错,但系统默认数据类型为int而在执行时再去转换成long会有一部分性能开销,而且若超出int的取值范围则会报错。(float同理)
  3. 各数据类型取值范围,正数取值比负数取值范围少1,这是因为将0算作正数当中。int类型所用4字节-32位,所以可以表示232次方的数据,但有一位需要表示正负,所以实际数据表示范围为-231-------231-1。
  4. Int类型为连续的数据,间隔为1,float的数据为跳跃型的数据,并不连续,且其间隔不相等,所以float的数据表示范围远远大于int,但也造成float数据类型精度失真(但在一般领域并不考虑这种精度丢失)。
    float类型,1位符号位,7位阶位,后23位为数值位,表示数据时,因小数除2永远除不尽,所以表示小数的二进制码也是无穷无尽,因此计算机为了能够表示小数,将后续二进制码进行了舍弃,造成了精度丢失。详细请参考float类型转二进制码。

Unicode编码

在编程中,任何字符语言最终都会转换成编码形式,以ascii为例 ’表示为\u0027,可以尝试运行System.out.println(\u0027s’),最终结果为s。(计算机直接识别,即便在编译器中报错也可以强行运行)

“=”的实质

数据类型分基本类型和引用类型,基本数据类型的变量名和数据储存在内存的栈中(java虚拟机开辟的内存空间中),引用类型又分类和字符串,对于字符串来讲,若赋值时没有用new(也就是没有开辟空间,如String a = “123”)那么,数值便会存在字符串常量池中,栈中记录池中对应的字符串地址,如若不存在则建立此字符串(若两个String变量赋值相同,那么指向同一个地址),而如果用了new那么就跟类一样,在堆中先开辟一片空间后存入信息,将空间地址存在栈中,因此“=”对于引用类型来讲便是将堆/字符串常量池中的地址保存到栈中,对于基本类型来讲便是将值一起存入栈中。

static与final

static修饰符会将修饰过的变量或方法放到内存的静态区(静态区在程序运行时便已经存在,与是否创建类对象无关),在静态区中的变量时全工程共有的,所以final通常修饰静态变量,而final也防止内部类在使用变量之前,变量被改掉。

java编译过程

  1. 语言分类
    托管语言是需要安装环境后翻译成c与汇编的语言,如:java,vb,托管语言包括脚本语言 PS:脚本语言大多是操作系统自带环境,可以直接运行的语言,也就是说脚本语言由操作系统做决定,windows是bat文件,linux中则是sh文件。
    非托管语言则是由操作系统直接识别翻译成机器二进制码的语言(也就是说可以不用安装环境直接用记事本写,写完就可以直接运行)
  2. java编译过程
    底层语言为汇编与c语言 (c先翻译成汇编,之后转换成二进制代码)
    通过c与汇编衍生出各式各样的语言
    Eclipse首先会调用java.jdk将编写好的.java文件送到.jre翻译成.class文件(此class文件并非类,文件中的内容为字节码)
    后将.class文件再次翻译成汇编与c语言,后由操作系统完成转换机器二进制码,执行等工作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值