美文网首页
Java基础常识(应该知道)

Java基础常识(应该知道)

作者: senchun | 来源:发表于2019-04-24 16:05 被阅读0次

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);

相关文章

网友评论

      本文标题:Java基础常识(应该知道)

      本文链接:https://www.haomeiwen.com/subject/zwivgqtx.html