Java基本概念

来源:互联网 发布:网络教育试点高校 编辑:程序博客网 时间:2024/05/18 03:46

  如果一个类没有无参构造方法,那么这个类的子类构造方法必须显示的调用super(参数),否则默认调用super()基类的无参构造方法,而基类没有无参构造方法,会导致错误。
  
  静态代码块,static {…},仅在类加载的时候执行且只执行一次。经过测试发现,工程下的类仅在用到的时候加载,不用时不会加载。
  
  Java中基本数据类型所占字节数,char 2字节;byte 1字节;short 2字节;int 4字节;long 8字节;float 4字节;double 8字节;boolean 理论上1/8字节1位二进制,实际可能用一个字节的空间存。

  抽象类可以有普通方法,可以没有抽象方法;接口中只能有抽象方法。
  抽象类由子类继承实现,只能被单继承;接口由类实现,可被多继承。
  抽象类中的抽象方法可以是public、protected、default;接口中只能是public,且默认就是public。

  表达式中的byte,short,char类型默认会被自动转成int类型来进行计算,若存在一个数字为long,则转为long;若存在一个数字为float,则转为float;若存在一个数字为double,则转为double。如a = b + c,表达式指b + c,b和c会进行自动类型提升,a不会,若a、b、c中存在long、float或double,会自动提升到long、float或double,这就是正常的算术表达式用最高精度来计算了,若b、c均用final修饰,则b、c不会进行自动类型提升。

    // 程序就此结束,后面的语句不会再执行,包括finally中的语句    System.exit(0)    int i, j;    int i = 0, j;    int i, j = 0;    int i = 0,  j = 0;    // 错    int i = j = 0;    int[][] a = new int[][]{};    int[][] a = new int[5][];    int[][] a = new int[5][6];    // 错    int[][] a = new int[][6];    // 错    int[][] a = new int[5][]{};    // 错    int[][] a = new int[5][6]{};    // 将a看成一维数组,由此数组a的长度,a.length为5,按行存    // a[0]、a[1]、a[2]、a[3]、a[4],对应一维数组a的五个一维数组类型元素    // 一维数组a[0]的长度,a[0].length为6    // a[0][0]、a[0][1]、a[0][2]、a[0][3]、a[0][4]、a[0][5],对应数组一维a[0]的六个int类型元素

  移位运算符,被移位的数据必须是int型,且必须是二进制。由于数据在内存本身实际就是存的二进制,我们可以直接对一个整型数据进行移位操作。对于带符号的int数据,高位全部用符号位填充后,再开始移位,正数用0填充,负数用1填充。
  <<左移位运算符, 如a = a << 2,a左移2位。a左移出的高位直接丢弃,低位补0。二进制左移1位,实际就是 * 2,左移2位,就是 * 2的2次方。必须是a = a << 2,不能只是a << 2,否则出错。
  >>右移位运算符,如a = a >> 2,a右移2位。a右移出的低位直接丢弃,高位用符号位填充,正数填充0,负数填充1。二进制右移1位,实际就是 / 2,丢弃余数,前提是有效位还存在。正数无限右移的结果为0,负数无限右移的结果为-1。负数在内存用补码表示,除符号位,全部取反 + 1为原码。
  >>>无符号右移位运算符,移位是高位全部补0。

  位运算符,参与运算的数据必须是int型,且必须是二进制。
  &按位与运算符,对应位相与。
  |按位或运算符,对应位相或。
  ~按位非运算符,每一位取反。
  ^按位异或运算符,对应位异或操作,同0,异1。a^b^b结果为a,即一个数被同一个数异或两次,结果不变。
  必须是c = a & b,不能只是a & b,不然出错。

  instanceof运算符,对象 instanceof 类,如果对象是类创建的,子类也可以,返回true。

  类内访问,被本类内的成员访问,这个必然可以。
  继承访问,该成员被另一个类继承,被另一个类内的成员访问。
  类外访问,在另一个类中,创建该类的对象,然后用该类的对象调用该类的成员,这个不一定。

  java的访问修饰符,按照权限递增为private,default,protected,public。
  private,不可继承,仅类内访问,实际可以继承,只是继承了没法访问。
  default,同一包中可以被继承,当然也可以被继承访问,类外访问,前提都是同一包。
  protected,可以被继承访问,同一包中可以类外访问。
  public,全部权限。

  java的方法被继承的时候可以被重写,重写的时候方法的权限可以被扩大,但是不可被缩小。通常protected方法被继承的时候,会被重写为public,以使其具备不同包中的类,能类外访问的权限。

  类A中有若干方法,用于完成一个流程,如生命周期的各个环节。类A的生命周期只能由类A自己控制,如此这些生命周期方法不能被类外访问,但是类A要可以被继承扩展,如Activity,由此这些生命周期方法为protected。类A的流程方法为public,可以被类外访问,流程方法内部通过protected方法完成流程,由此类外通过执行流程方法达到访问protected方法的目的。

  final修饰的属性为常量,不可变。
  final修饰的方法不可被重写。
  final修饰的类不可被继承。

  java的可变参数列表,public void say(String… 变量名){}
  String… 变量名就等价于String[] 变量名,不确定长度的数组,且可变参数列表必须是参数列表的最后一个参数,可变参数列表可以直接接受一个数组。

  实际基类的私有成员也被子类继承了,只是子类无法访问而已,如子类继承了基类的公共方法,而基类的公共方法会访问基类的私有成员,由此子类继承的基类的私有成员实际是为子类继承的基类的公共成员服务的。

0 0
原创粉丝点击