重学Java:基本概念

Java的复习工作已经在进行,是为了后面的Web开发和安卓学习打下基础。Java语言是一门强大的语言,Java的出现是在C++语言之后,对C++语言的各种缺陷(被认为让人难以理解或者容易产生逻辑错误的地方)进行的各种改进而产生的一门面向对象的语言,它可以说是对C++语言的一次优秀的革命,使得C++这门强大的,扩展了强大的C语言,具有面向对象、面向过程两种设计模式的语言,变成了纯面向对象的语言,取消了指针(内存地址操作)这个比较难以弄懂的语言特征,并且带有诸如异常处理等高级特征,一经问世,备受追捧,久经沙场之后,走到了程序语言的顶峰,其强大特性直接或间接催生了C#这门与之十分相似的强大程序语言。

Java中几个关键字的作用需要去了解一下,以前没有用过

  • 删除线表示原来不知道,后来看了对应的资料,有所了解

对象相关

  • implements 用于实现接口,接口更像是一种约定,一个类可以实现多个接口
  • instanceof 用于判断一个引用的类对象

方法变量和类修饰符

  • abstract 用于修饰抽象类,抽象类是具有空方法的类,抽象类不能被实例化,抽象类的继承同普通类,抽象类和接口的区别后面会提到
  • transient
  • volatile
  • strcitfp

Java中变量作用域

  • 一个变量位于类内部,成为字段或者属性,成员变量,Field
  • 声明在方法内的变量,叫做局部变量,不能在类中使用这个变量
  • 当一个变量被 final 修饰时,该变量只有一侧赋值机会,可用作常量的定义和设置不被继承

Java中的运算

  • 同种变量类型运行(包括整形和浮点型),运算结果取类型较大的
  • 逻辑运算分为长短两种,长逻辑需要两边都运算,短逻辑只需一边运算,逻辑或需要两边运算
  • 位运算有位或和位与两种操作
  • 位运算左移相当于乘2,右移相当于除2
  • 有符号的数据左右移位,移位之后还是对应的符号;不带符号的数据左右移位,正负改变

Java中数组的使用

  • Array.toString方法用来打印十分方便
  • System.arraycopy(src, srcPos, dest, destPos, lengtObject)的用法,
    @parm src: 源数组
    @parm srcPos: 从源数组复制数据的起始位置
    @parm dest: 目标数组
    @parm destPos: 复制到目标数组的起始位置
    @parm lengtObject: 复制的长度
    的用法
  • Arrays的各种用法
  1. coypOfRang — 数组复制
  2. toString — 转换为字符串
  3. sort —排序
  4. binarySearch — 搜索
  5. equals — 判断是否相等
  6. fill — 填充数组
  • Java中Arrays. sort使用了两种排序方法,快速排序和优化的合并排序。
    快速排序主要是对哪些基本类型数据(int,short,long等)排序。
    而合并排序用于对对象类型进行排序。原因:
    使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。
    这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序排列。
    对于基本数据类型,稳定性没有意义,而对于对象类型,稳定性是比较重要的,
    因为对象相等的判断可能只是判断关键属性,最好保持相等对象的非关键属性的
    顺序与排序前一直。另外一个原因是由于合并排序相对而言比较次数比快速排序少,移动(对象引用的移动)次数比快速排序多,而对于对象来说,移动是简单的,只是引用的转换,但是比较相对更加耗时。合并排序的时间复杂度是n*logn, 快速排序的平均时间复杂度也是n*logn,但是合并排序的需要额外的n个引用的空间。

类和对象

  • 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。例:new XXX();就是一个引用,它不是基本类型,而是 类类型.
  • Object Object = new Object();
    Object这个变量是Object类型,又叫做引用
    =的意思指的Object这个引用代表右侧创建的对象
    “代表” 在面向对象里,又叫做“指向”.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Object {

    String objectName;

    public static void main(String[] args) {
    new Object();
    Object object = new Object();
    }
    }
  • 一个引用同时时间可以指向多个引用

    1
    2
    3
    4
    5
    6
    Object Object1 = new Object();
    Object object2 = object1; //Object2指向Object1所指向的对象
    Object object3 = object1;
    Object object4 = object1;
    Object object5 = object4;
    //所有的object1,2,3,4,5同时指向一个Object对象
  • 方法重载的概念,重载就是同样名字的方法可以写多个,每个方法有不同的参数列表,在使用是,JVM根据传人的参数数量自动识别并调用对应的方法.

    1
    2
    3
    public returnType mehod();
    public returnType mehod(type a);
    public returnType mehod(type x,type y);
  • 构造方法的概念每一个类都有一个构造方法,构造方法可以重载,不写时默认有一个无参构造方法,构造方法名与类名相同,构造方法无返回值,可见性为public,当使用new关键字引用一个对象时,默认调用该对象的构造方法.

  • 使用static修饰的的方法或者属性,叫做类方法和类属性,一个被声明静态的属性和方法,被所有对象共享,建议使用类来获取该属性和方法,一突出其类属性和类方法的概念,与之对应的叫做对象属性和对象方法.
  • Java中使用文档注释,可以才新建项目的时候勾选添加注释,也可以是使用快捷键Alt+Shift+J键进行添加,注释的基本写法如下,使用官方提供的注释标识,常用的如下表:
标记 标识 用于
@author 作者 类注释
@version 当前软件版本 类注释
@since JDK版本 类注释
@see 链接到其他Javadoc 类注释
{@link} 统@see,使用更加自由,可以在前面添加描述信息 类注释
@param 参数详解,后面跟参数名 方法注释
@return 返回值详解 方法注释
  • 单例模式具有两种写法,使用单例模式在JVM中只能实例化一个对象,在一些特定场景使用单例模式是必要的,比如在GUI中使用的的Frame,在一些设计场景中的只有一个的对象。
    单例模式有两种实现方式,下面的代码分别对这两只模式进行解读。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //饿汉式单例模式
    public class Object{
    //私有化构造方法,使对象无法示例化新的对象
    private Object1();
    //实例化一个该类的对象
    private Object instance = new Object();
    //获取该类的单例
    public static Object getInstance(){
    return instance;
    }
    }

    //懒汉式
    public class Object{s
    //私有化构造方法
    private Object();
    //定义一个本类型的属性
    private Object instance;
    //获取该类的单例
    public static Object getInstance(){
    if(null == instance){
    instace = new Object();
    }
    return instance;
    }
    }

两种模式使用时的选择,如果在构造方法中有大量的需要初始化的东西,代码量大的情况下,使用饿汉式可以减少时间,提高效率;懒汉式具有线程安全的考虑。

  • 枚举类型。枚举也是一种类,是对一些常量的定义,最简单的例子,一个星期五天,一年四个季节使用枚举可以表述的更清晰(相比于使用1、2、3、4)这样的样例还有很多,实际使用的时候需要多作考虑。
    1
    2
    3
    public enum Season{
    SPRING,SUMMER,AUTUMN,WINTER
    }

接口与继承

  • 接口的意义,接口相当于一种约定,实现某一个接口就必须要实现该接口中的方法。Java中一个子类只能继承一个父类,但是可以实现多个接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public interface IntFace{
    //继承该接口必须实现method方法
    pulic void method(){};
    }

    //使用implements关键字实现接口,实现接口中的method方法
    public class Obejcet implements IntFace{
    //重载接口的方法
    @Override
    public void method(){
    ....
    }
    }
  • 引用类型和对象的概念,如何一个非基本数据类型定义出来的变量都称为引用,而使用new 关键字调用构造方法生成的,就叫做对象类型。引用类型转换的指向可以由子类向父类转换。这样是一定成功的,比如说:

    1
    2
    3
    4
    5
    6
    7
    8
    //Java中所有的类都是Object的子类,所以以一个这样的例子来介绍引用类型
    public class A extends Obejcet{
    ...
    }
    //理解方法:把右边的当作左边的用,看行不行得通
    //该例中,把对象类型A当作父类性Object是完全说的通的,所以可行

    Obejcet obj = new A();
  • 如何判断一个引用类型的的对象,使用instanceof关键字可以确定一个引用指向的对象类型

    1
    2
    Object obj = new Object1();
    System.out.print(obj instanceof Object);
  • 重写和覆盖
    与重写类似,方法的重写是子类覆盖父类的对象方法 ;
    隐藏,就是子类覆盖父类的类方法。

  • super关键字可以在子类中调用父类的有参构造方法(子类默认调用父类的无参构造方法而且是一定会调用),使用super关键字可以调用父类的属性和方法。
  • Object是所有子类的父类,Object有如下方法:

    Object具有的方法
方法 作用
toString 对象的字符串表达
finalize 垃圾回收时调用该方法
equals 用于判断两个对象的内容是否相等
hashCode
wait、notify,notifyAll 线程同步方法
getClass 返回一个对象的类对象

  • final关键字修饰类,方法,基本类型变量和引用类型时有不同的含义
修饰 意义
该类不能被继承
方法 该方法不能被重写
基本类型变量 该基本类型变量只能被赋值一次
引用 该引用只有一次指向对象的机会
  • 抽象类

*来自how2.cn抽象类内容
在类中声明一个方法,这个方法没有实现体,是一个“空”方法,这样的方法就叫抽象方法,使用修饰符“abstract” 当一个类有抽象方法的时候,该类必须被声明为抽象类。

  1. 继承抽象类的子类必须提供不一样的抽象方法;
  2. 抽象类不能被实例化;
  3. 抽象类和接口的区别
抽象类 接口
子类只能继承一个抽象类,不能继承多个,抽象类的继承同普通类 子类可以实现多个接口
抽象类可以被定义 public、protected、package、private,静态和非静态属性 接口只能被定义为public、静态和final的,即使书写的时候没有用到public static final。。也会自动添加上去

接口当成一个协议,实现了这个接口(协议)的类就应该实现接口中的方法(协议内的条例),接口是约束调用本接口的类而不是给类提供能力。
抽象类则是让继承此类的子类一定要实现某个方法。例如取快递是一个抽象类,签收是抽象方法,那么一定要实现签收方法才能完成取快递。

本部分为Java的基础内容,记录并常回顾。