美文网首页
JavaSE语法(部分)

JavaSE语法(部分)

作者: 眼若繁星丶 | 来源:发表于2020-09-23 20:44 被阅读0次

    JavaSE语法(部分)


    继承

    继承中变量的访问特点

    在子类方法中访问一个变量/成员方法

    • 子类局部范围找
    • 子类成员范围找
    • 父类成员范围找
    • 如果没有就报错(不考虑父亲的父亲)

    super

    this:代表本类对象的引用
    super:代表父类存储空间的标示(可以理解为父类对象引用)

    this和super访问特点

    继承中构造方法的访问特点

    子类中所有的构造方法默认都会访问父类中无参的构造方法

    • 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化前,一定会完成父类的数据初始化。
    • 每一个子类构造方法的第一条语句,默认都是super()

    如果父类中没有无参构造方法,只有有参构造方法

    • 通过使用super关键字去显示地调用父类的带参构造方法
    • 在父类中自己提供一个无参构造方法

    推荐 自己给出无参构造方法

    方法重写注意事项

    • 私有方法不能被重写(父类私有成员子类是不能继承的)
    • 子类方法访问权限不能更低(public>protected>friendly>private)

    final

    • final修饰指的是基本类型的数据值不能发生改变

    • final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。

    • final修饰的类不能被继承

    static

    static修饰的特点

    • 被类的所有对象共享

    static的访问特点

    非静态的成员方法

    • 能访问静态的成员变量
    • 能访问非静态的成员变量
    • 能访问静态的成员方法
    • 能访问非静态的成员方法

    静态的成员方法

    • 能访问静态的成员变量
    • 能访问静态的成员方法

    总结:静态成员方法只能访问静态成员


    多态

    多态中成员访问特点

    成员变量: 编译看左边,执行看左边
    成员方法: 编译看左边,执行看右边

    多态的好处和弊端

    好处:提高程序的拓展性
    具体表现在定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。

    弊端:不能使用子类的特有功能。父类的方法可以重写使用到子类中。

    多态存在的三个条件

    1、有继承关系

    2、子类重写父类方法或者实现关系(接口)

    3、父类引用指向子类对象

    对于第二点:以下三种类型的方法没有办法表现出多态的特性(因为不能被重写)

    1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的。

    2、final方法,因为被final修饰的方法无法被子类重写。

    3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢。

    多态实现的原则

    1、向上转型是自动的。Father f = new Childen()是自动的,不需要强转。

    2、向下转型要强转。Children c = (Children)new Father(),让父亲知道它要转成具体的哪个子类。

    3、父亲引用指向子类对象,子类重写了父亲的方法,调用父亲的方法,实际就是调用子类重写父亲的该方法。也就是成员方法的调用原则:编译看左边,执行看右边

    何时使用向下转型?
    1)一定是发生多态: Object obj = new Student();

    2)一定是想要去访问(调用)子类对象的特有属性或方法。

    Stringstr = ((Student)obj).getSchool();


    抽象类

    在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类

    抽象类特点

    • 抽象类和抽象方法都必须使用abstract关键字修饰

    • 抽象类而中不一定有抽象方法,有抽象方法的类一定是抽象类。

    • 抽象类不能实例化。但可以参照多态的方式,通过子类对象实例化,叫做抽象类多态。

    • 抽象类的子类
      要么重写抽象类中的所有抽象方法
      要么本身就是一个抽象类。

    抽象类的成员特点

    • 成员变量:可以是变量,也可以是常量

    • 构造方法:
      有构造方法,但是不能实例化
      其作用是用于子类访问父类数据的初始化

    • 成员方法:
      可以有抽象方法:限定子类必须完成某些动作
      也可以有非抽象方法,提高代码的复用性。


    接口

    接口的特点

    • 用interface关键字修饰

    • 类的实现用implements表示

    • 接口不能实例化
      但可以参照多态的方式,通过实现类对象实例化 ,叫做接口多态。

    • 接口的实现类
      要么重写接口中所有抽象方法
      要么本身是抽象类

    接口的成员特点

    • 成员变量
      只能是常量
      默认修饰符public static final

    • 构造方法
      接口没有构造方法,因为接口主要是对行为进行抽象,是没有具体存在。
      一个类如果没有父类,默认继承自Object类。

    • 成员方法
      只能是抽象方法
      默认修饰符:public abstract

    类和接口的关系

    • 类和类的关系
      继承关系,只能单继承,但是可以多层继承

    • 类和接口的关系
      实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

    • 接口和接口的关系
      继承关系,可以单继承,也可以多继承

    抽象类和接口的区别

    • 成员区别
      抽象类 变量,常量,构造方法,抽象方法,非抽象方法
      接口 常量,抽象方法

    • 关系区别
      类与类 继承,单继承
      类与接口 实现,可以单实现,也可以多实现
      接口与接口 继承,单继承,多继承

    • 设计理念区别
      抽象类 对类抽象,包括属性、行为
      接口 对行为抽象,主要是行为

    抽象类是对事物的抽象,而接口是对行为的抽象


    内部类

    类名作为形参和返回值

    • 方法的形参是类名,其实需要的是该类的对象
    • 方法的返回值是类名,其实返回的是该类的对象

    抽象类名作为形参和返回值

    • 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
    • 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象

    接口名作为形参和返回值

    • 方法的形参是接口名,其实需要的是该接口的实现类对象
    • 方法的返回值是接口名,其实返回的是该接口的实现类对象

    内部类

    内部类访问特点:

    • 内部类可以直接访问外部类的成员,包括私有

    • 外部类要访问丙部类的成员,必须创建对象

    成员内部类

    成员内部类外界创建对象使用方式:

    • 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
    • 范例:Outer.Inner oi = new Outer().new Inner();

    局部内部类

    是在方法中定义的类,所以外界无法直接使用,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

    匿名内部类

    格式:

    new 类名或接口名() {
    重写方法;
    };

    • 本质是一个继承了该类或者实现了该接口的子类匿名对象。

    Math类常用方法

    • public static int abs(int a) 返回参数的绝对值
    • public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数
    • public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
    • public static int round(float a) 按照四舍五入返回最接近参数的int
    • public static int max(int a,int b)返回两个int值中的较大值
    • public static int min(int a,int b)返回两个int值中的较小值
    • public static double pow(double a,double b)返回a的b次幂的值
    • public static double random()返回值为double的正值,[0.0,1.0)

    System类常用方法

    • public static void exit(int status) 返回当前时间(以毫秒为单位)
    • public static long currentTimeMillis() 终止当前运行的Java虚拟机,非零表示异常终止

    Object类

    Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类

    构造方法: public Object()

    回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
    因为它们的顶级父类只有无参构造方法

    Arrays类

    • public static String toString(int[]a) 返回指定数组的内容的字符串表示形式
    • public static void sort(int[a]) 按照数字顺序排列指定的数组

    包装类

    Int转String

    • 方法一: String s = "" + (int)number;
    • 方法二: String s = String.valueOf(number);

    String转Int

    • 方法一:
      String s = "100";
      Integer i = Integer.valueOf(s);
      int x = i.intValue();
      // String -> Integer -> int

    • 方法二:
      int x = Integer.parseInt(s);

    Date类

    • public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
    • public Date(Long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
    • public long getTime() 获取的是日期对象从1970年1月1日O0:00:00到现在的毫秒值
    • public void setTime(long time) 设置时间,给的是毫秒值

    SimpleDateFormat类

    • public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式

    • public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式

    • 从Date到String
      public final String format(Date date):将日期格式化成日期/时间字符串

    • 从String到Date
      public Date parse(String source):从给定字符串的开始解析文本以生成日期

    Calendar类

    Calendar提供了一个类方法getlnstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
    Calendar rightNow = Calendar.getlnstance();
    此时的Calendar对象rightNow是具体格式化的。

    常用方法

    • public int get(int field) 返回给定日历字段的值

    • public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段

    • public final void set(int year,int month,int date) 设置当前日历的年月日

    相关文章

      网友评论

          本文标题:JavaSE语法(部分)

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