Java基础常识(应该知道)

Java基础常识



Java中有5个不同的地方可以存储数据


  • 寄存器:在Java中无法直接控制。
  • 堆栈:Java必须知道存储在堆栈内所有项的确切生命周期,对象引用存储在堆栈中。
  • 堆:用于存放所有的Java对象,带new代码执行时,就会自动在堆中分配存储空间。
  • 常量池:常量(字符串常量和基本类型常量)通常直接存储在代码内部(常量池)
  • 非RAM存储



Java中的基本类型


如下图所示:

Java中的基本数据类型
  1. Java中还提供两个用于高精度计算的类:BigIntegerBigDecimal,这两者没有对应的基本类型,且必须以方法调用方式取代运算符来实现。

    • BigInteger支持任意精度的整数。
    • BigDecimal支持任何精度的定点数。
  2. 只有成员变量(基本类型)有默认值0false,其他的基本类型若没有初始化则会报错。

  3. 字符串中每个字符的大小都是2 bytes,从而提供对Unicode字符集的支持。



static关键字


  1. static关键字解决的问题:(在我看来,下面2点的本质都是一样的)

    • 只想为某特定域分配单一存储空间,而不去考虑有多少对象,或者根本没有创建对象;
    • 希望某个方法独立于任何对象实例,也就是说,即使没有创建对象也能使用这个方法。
  2. 一个类的所有对象共享同一个static成员变量或方法,包括存储空间。

  3. static方法就是没有this的方法。

  4. static方法的内部不能调用非静态方法,反过来倒是可以。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。Java中禁止使用全局方法,但你在类中置入static方法就可以访问其他static方法和static域。



随机数


Random类

Random类可用来产生随机数(带种子/不带种子),不带种子的把当前时间作为种子,如下:

Random randNoSeed = new Random();// Without seed
Random randSeed = new Random(47);// With seed
int i;
i = randNoseed.nextInt(5);// i = [0,5)

在上面代码中,max = 4, min = 0所以,得到通式:rand.nextInt((max - min) + 1) + min;,可取得[0,4]之间的整数。


Math库里的random()方法

Math库里的random()方法为static方法,所以使用语句Math.random()就可产生[0,1)之间的一个double值。



判断对象是否相等


在Java中,对于对象和基础类型,其判断的处理方法是不同的。


基础类型

使用==!=即可判断值是否相等。


对象

对于对象来说,==!=比较的是对象的引用,应该用equals()方法来进行内容比较。

但是,需要注意的是eqauls()默认行为依然是比较引用,所以我们要在自己的新类中覆盖equals()方法,否则不会表现出我们希望的行为。



进制表示


  1. 0x后面表示十六进制;
  2. 0后面表示八进制;
  3. Integer.toBinaryString(i)可输出整数i的二进制结果。



特殊操作符


三元操作符 ? :

i < 10 ? i * 100 : i * 10; ,如果i < 10,执行i * 100,否则执行后者。



类型转换


  • 窄化转换(narrowing conversion)必须显式执行类型转换;
  • 扩展转换(widening conversion) 则不必显示执行类型转换;
  • boolean类型不允许进行任何类型的转换处理。


截尾和舍入问题

如果执行的是窄化转换,如floatdouble转换为整数,总是执行截尾,即扔掉小数点后面的数字。

如果想要执行四舍五入,则需使用java.lang.Math中的round()方法,使用Math.round(double/float);语句即可。


Java没有sizeof()

在C++中,需要使用sizeof()的最大原因是为了“移植”,Java不用考虑移植问题。


保持警惕

当一个足够大的int值执行乘法运算时,Java不会提醒你计算结果溢出了!



for


for(initialization; Boolean-expression; step) {
    statement
}

使用 for循环应注意以下两点:

  • 每次迭代前会测试boolean表达式;
  • 每次循环结束,会执行一次步进(step)。

注意:break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行。
需要记住的是:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue出来。



foreach


foreach是用于数组和容器的,用来遍历整个数组或容器,示例代码如下:

Random rand = new Random(47); 
float f[] = new float[10]; 
for(int i = 0; i < 10; i++) 
    f[i] = rand.nextFloat(); 
for(float x : f) 
    System.out.println(x);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容