美文网首页
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