Java概念性问题

  • (阅读《疯狂Java讲义》整理记录)
1.编译型语言:
    指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译"成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换的过程称为编译。编译生成的可执行程序可以脱离开发环境,在特定的平台上独立运行。
    因为编译型语言是一次性地变异成机器码,所以可以脱离开发环境独立的运行,而且通常运行效率较高;但因为编译型语言的程序被编译成特定平台上的的机器码,因此编译生成的可执行程序通常无法移植到其他平台上运行;如果需要移植,则必须将源代码赋值到特定平台上,针对特定平台进行修改,至少也需要采用特聘平台上的编译器重新编译。
    有些程序的编译结束后,还可能需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码模块生成最终的可执行程序,通过这种方式实现低层次的复用。
    所属的高级语言:C、C++、Objective-C、Pasca等。

2.解释型语言:
    使用专门的解释器对源程序进行逐行解释成特定平台的机器码并立即执行的语言。解释型语言通常不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。 
    每次执行解释型语言的程序都需要进行一次编译,因此解释性语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可。
    解释型语言可以方便地实现源程序级的移植,但这是牺牲程序执行效率为代价的。
    所属的高级语言:Ruby、Python
   
3.Java语言是一种特殊的高级语言
    它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译后解释两个步骤。
    编译步骤,是生成一种与平台无关的字节码文件(.class文件)。这种字节码文件不是可执行性的,必须使用Java解释器来解释执行。
    解释步骤,负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual Machine)。JVM是可运行Java字节码文件的虚拟计算机。所有平台上的JVM向编译器提供相同的编译接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。( JVM 相当于一个转换器 )
    在一些虚拟机的实现中,还会降虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。
    JVM的统一标准 :指令集、寄存器、类文件的格式、栈、垃圾回收区、存储区

4.原码 反码  补码
  原码:直接将一个数值换算成二进制数。
  反码:对原码按位取反,最高位(符号位)保持不变。
  补码:正数的补码和原码相同;负数的补码是其反码加1.

所有的数字在计算机底层都是以二进制形式存在的,计算机以补码的方式保存所有整数。即当程序以二进制保存时,显示的也是其补码。
Example:
  首先每个类型的数是占几个字节(一个字节在内存占8位)
  byte:1字节 8位
  short:2字节 16位
  int:4字节 32位
  long:8字节 64位
  (char:2字节 16位
  float:4字节 32位
  double:8字节 64位)
定义一个二进制整数,默认的是int类型,占32位;
强制转换成对应类型,则最高位为符号位!
  正数:
    int v1 = 0b1110_1001;  (其值完全显示应该为:0b0000_0000_0000_0000_0000_0000_1110_1001;整数,十进制为 233)
   // byte v2 = 0b1110_1001; (报错,超出了byte的范围)
    byte v2 = (byte)0b1110_1001; (强制转换成byte类型,会溢出,byte显示为8位,最高位为1,则为符号位,即该值为负数。其显示的是补码,原码,即负数的补码求原码。)
    负数的原码求补码是: 原码--(求反)-->反码--(加1)-->补码
    负数的补码求原码是: 补码--(减1)-->反码--(求反)-->原码

5.字符集
  字符集就是所有字符的编号组成总和。
  通常用于表示单个字符,用''括起来,使用16位的unicode字符集作为编码方式,支持世界上所有书面语言的字符,包括中文。
  三种表示形式:单个字符('A' '0')、转义字符('\n' '\t')、Unicode值('\uXXXX')
  计算机在保存字符时,实际是爆粗你该字符对应的编号,因此char类型的值也可以直接作为整型值来使用,相当于16位无符号整数(0~65535)

6.浮点数
  有固定的标书范围和字段长度 
      符号位  指数   尾数   (数值 = 尾数 x 底数^ 指数 )
float   1      8     23
double  1      11    52  

  浮点默认为double类型,后面加f或F为float类型
  表示形式:十进制数形式,必须带小数点;科学计数法,只有浮点数才能使用。
  特殊浮点数值:正无穷(都相等)、负无穷(都相等)、非数(NaN都不相等)

7.直接量
  程序中通过源代码直接给出的值。
  能指定直接量的通常只有三种类型:基本类型、字符串类型、null类型。
  a.null类型的直接量可以赋给任何引用类型的变量。
  b.当程序第一次使用某个字符串直接量时,Java会使用常量池(constant pool)来缓存该字符串直接量,如果程序后面需要用到该字符串直接量,Java会直接使用常量池中的字符串直接量。
  c.常量池(constant pool)指的是在编译期被确定,并被保存在被编译的.class文件中的一些数据。包括关于类、方法、接口中的常量,和字符串直接量。Java会使用常量池来管理曾经用过的字符串直接量。
  d.每个字符串常量只有一个,不会产生多个副本。
Example: 
    String s = "Summer" + "Chen"; 
    String s1 = "SummerChen"; //s 和 s1 是同一个常量。
    String s2 = "Summer";
    String s3 = "Chen";
    String s4 = s2 + s3;  //s4和s 和 s1 不是同一个常量,s4是有两个变量(new 出来的空间)相加而成。
    

8.位运算符
7种:(对数的二进制码【补码】进行运算) 
    &:按位与
    |:按位或
    ~:按位非
    ^:异或(同为0 异为1)
    <<:左移(整体左移指定位数,空出来的以0填充)
    >>:右移(整体右移指定位数,空出来的全部以符号位填充)
    >>>:无符号右移 (整体右移指定位数,空出来的全部以0位填充)
ps:1.移动位数不能大于该类型的位数 32、64
    2.位移运算不会改变操作数本身,只是得到一个新的结果。

9.break 、continue 和 return
break 用于完全结束一个循环、跳出循环体。break 后加标签,可以跳到标签所在处,可以 结束 多层循环(必须是有效标签,在外层循环前定义)。
continue 忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环。continue也可以加标签。
return 功能是结束一个方法。

10.栈内存 和 堆内存
    栈内存:方法中定义的局部变量都是放在栈内存的;
    堆内存:程序创建一个对象时,对象被保存到堆内存;(堆内存==运行时数据区,因为对象的创建成本通常较大,保存在运行时内存区,以便反复使用)
Example:
    定义并初始化一个数组后,在内存中分配了两个空间,一个用于存放数组的引用变量(栈),另一个用于存放数组本身(堆)。

11.基本类型数组的初始化、引用类型数组的初始化
    基本类型数组:数组元素的值直接存储在对应的数组元素中。
    引用类型数组:每个数组元素里存储的还是引用
    

12.对象的软、弱、虚引用
1.强引用(StrongReference):程序创建一个对象,并把这个对象赋给一个引用变量。当对象呗一个或一个以上引用变量引用时,它处于可达状态,不可能被系统垃圾回收机制回收。
2.软引用(SofeReference):通过SoftReference类实现,对于只有软引用的对象,当系统内存空间足够时,它不会被回收,当系统内存空间不足时,系统可能会回收它,通常用于对内存敏感的程序中。
3.弱引用(WeakReference):通过WeakReference类实现,对于只有弱引用的对象,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象占有的内存。就像那些失去引用的对象一样,必须等到系统垃圾回收机制运行时才会被回收。
4.虚引用(PhantomReference):通过PhantomReference类来实现,如果一个对象至于一个需引用,那么它和没有引用的效果大致相同。虚引用只要用于对象被垃圾回收的状态,虚引用不能单独使用,必须和引用队列(ReferenceQueue)联合使用。
PS:程序可以通过检查与虚引用关联的引用队列中是否已经包含了该虚引用,从而了解虚引用的对象是否即将被回收。
   








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值