java基础:基础类型和多态,


  • java的8种基本数据类型:short char int double float long boolean byte
    • byte boolean 1字节(b)
    • short char 2字节
    • int double 4字节
    • long double 8字节
    • 1b=8bit
  • 自动拆箱和自动装箱:基本数据类型和包装类型之间的相互调用;基本数据类型不具备面向对象的特性
    • 在装箱时 Integer i= 100 ——》Integer i = Integer.getvalue(100);在自动装箱时,会直接请求Integer的缓存区,默认时-128-127,超出此范围回直接创建新的对象
    • 在拆箱时 int i = int.valueOf(100)。
    • 在比较的时候,int类型的==,存放在栈内存种,比较的就是数值的大小,而Integer在缓冲区内的话,它调用的是系统默认创建出来的对象,存放在堆内存中,比较的是内存地址,所以为true。而如果超出缓冲范围,创建新的对象,在比较时比较内存地址为false;
  • ==和equals方法
    • ==判断2个变量值(基本类型和引用类型)是否相等,基本类型就是比较数值大小,而引用变量会比较内存地址值的首地址;
    • equals方法比较,对象在比较时实际上是调用equal方法作比较,一般没有重写,就是比较内存值地址,如果重写比较内容是否相同
  • 整数运算:
    • 1、如果两个操作数中有一个是double类型,另一个就会转换为double类型;
    • 2、否则,如果有一个操作数是float,另一个就会转化为float;
    • 3、否则,如果有一个操作数是long,另一个就会转换为long;
    • 4、否则,两个操作数都将转换为int类型。
    • 如果两个操作数有一个为long, 则结果也为long
    • 没有long时,结果为int。即使操作数全为shot、byte结果也是int.
  • short s1 = 1; s1 = s1 + 1; 有 什 么 错 ? short s1 = 1; s1+=1;有什么错?
    • 1) 对于 short s1=1;s1=s1+1 来说,在s1+1 运算时会自动提升表达式的类型为 int,那么将 int 赋予给 short 类型的变量 s1 会出现类型转换错误。
    • 2) 对于 short s1=1;s1+=1 来说 +=是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。short s1 = (short)(s2 + (short)1);
  • int 和 Integer
    • 1、Integer是int的包装类,int则是java的一种基本数据类型
    • 2、Integer变量必须实例化后才能使用,而int变量不需要
    • 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
    • 4、Integer的默认值是null,int的默认值是0
    • 5、引申
  • 重写(override)又名覆盖:
    • 1.不能存在同一个类中,在继承或实现关系的类中;
    • 2. 名相同,参数列表相同,方法返回值相同,
    • 3.子类方法的访问修饰符要大于父类的。
    • 4.子类的检查异常类型要小于父类的检查异常。
  • 重载(overload)
    • 1.可以在一个类中也可以在继承关系的类中;
    • 2.名相同;
    • 3.参数列表不同(个数,顺序,类型) 和方法的返回值类型无关。 
  • 成员变量
    • 编译看左边(父类),运行看左边(父类)。

  • 成员方法
    • 编译看左边(父类),运行看右边(子类)。
  • 静态方法
    • 编译看左边(父类),运行看左边(父类)。
    • 静态和类相关,算不上重写,所以,访问还是左边的
    • 只有非静态的成员方法,编译看左边,运行看右边
  • 方法参数传递时(基本类型+String和引用类型的区别)
    • 在使用基本类型作为方法的参数进行传递时,main进栈,然后方法进栈,main中的定义变量传入方法中,改变方法中的变量,然后方法出栈不会影响main中的变量值。

    • 在使用引用类型进行参数传递的时候,实际上会改变堆内存中对象的数值
    • 基本数据类型和引用数据类型作为参数的区别
      • 基本数据类型的变量中直接存放数据值本身,所以改的时候改的是数据值本身;
      • 但是引用类型不同的地方在于真正的数据并没有在栈区的变量中保存,而是在堆区里面保存着,所以虽然也拷贝了一份,也是副本,但是二者指向的是同一块堆区。
      • 引用数据类型就好比如说,两位同学使用的是同一份复习资料,其中一人把资料撕毁了,另一人当然也会受到影响。
      • 而基本数据类型就好比复印了一份,其中一人将自己的资料撕了,并不影响别人。
    • 总结:
      • 1).当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
      • 2).当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会
        • * 对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;*
      • 3).当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会
        • * 对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区;*

相关内容

    暂无相关文章