Java基础:对象、继承、接口、嵌入、异常类、Final关键字、static关键字、String、​​​​​​​Calendar

对象的初始化

  • 非静态对象的初始化:
    • 在创建对象时,对象所在类的所有成员会首先进行初始化
    • 基本类型:int型,会初始化为 0
    • 如果为对象,这些对象会按顺序初始化
    • 在所有类成员初始化完成后,才调用本类的构造方法创建对象
    • 构造方法的作用就是初始化
  • 静态对象初始化:
    • 程序中主类的静态变量会在 main 方法执行前初始化
    • 不仅第一次创建对象时,类中所有的静态变量都初始化,并且第一次访问某类(注意此时未创建此类对象)的静态对象时,所有的静态变量也要按他们在类中的顺序初始化

继承时,对象的初始化过程

  • 主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。
  • 主类静态成员的初始化。
  • 主类的超类由高到低进行默认构造方法的调用。
    • 注意:在调用每一个超类的默认构造方法前,先进行对此超类进行非静态对象的初始化。
  • 主类非静态成员的初始化。
  • 调用主类的构造方法。

关于构造方法

  • 类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。
  • 在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是第一条语句。

有关public、private和protected

  • 无public修饰的类,可以被其他类访问的条件是:
    • 两个类在同一文件中
    • 两个类在同一文件夹中
    • 两个类在同一软件包中
  • protected:继承类和同一软件包的类可访问。
  • 如果构造方法为private,那么在其他类中不能创建该类的对象。

抽象类

  • 抽象类不能创建对象。

  • 如果一个类中一个方法为抽象方法,则这个类必须为abstract抽象类。

  • 继承抽象类的类在类中必须实现抽象类中的抽象方法。

  • 抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为private。

  • 间接继承抽象类的类可以不给出抽象方法的定义。

多态

  • 多态的前提:在Java语言中,接口的多种不同的实现方式即为多态
    • 必须有继承关系
      • 子类继承父类,存在一些特点
    • 必须有方法重写
      • 子类继承父类,方法重写的目的,举例:动物吃的方法,每一个具体动物吃的东西不一样,所有必须要方法覆盖
    • 必须有父类的引用指向子类对象    (向上转型)
      • 父类名  fu = new  子类名() ; (父类的引用指向子类对象)    
  • ​​​​​​​多态的好处:
    • 可以提供代码的复用性:继承保证
    • 可以提高的代码的扩展性:由多态保证
  • ​​​​​​​多态的弊端:通过父类的引用调用子类特有功能,不能调用
    • ​​​​​​​解决:将父类的引用强制转换子类的引用     (访问子类的特有功能)
    • 举例:Father3 f  = new Son3() ;    //向上转型
      • ​​​​​​​Son3 s = (Son3) f ;     //前提是必须有父类的引用

接口interface (用implements来实现接口)

  • 体现的是事务的扩展性功能(额外动作,后天经过学习等等)
  • 接口中的所有数据均为static和final即静态常量。尽管可以不用这两个关键字修饰,但必须给常量赋初值。
  • 接口中的方法均为public,在实现接口类中,实现方法必须可public关键字。
  • 如果使用public来修饰接口,则接口必须与文件名相同。
  • 接口成员的特点:
    • 成员变量:是一个常量,不能更改,并且默认的修饰符:public static final
    • 构造方法:接口不存在构造方法
    • 成员方法:都是抽象方法默认的修饰符:public abstract

多重继承

  • 一个类继承了一个类和接口,那么必须将类写在前面,接口写在后面,接口之间用逗号分隔。
  • 接口之间可多重继承,注意使用关键字extends。
  • 一个类虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口继承的接口的方法,接口中的所有方法均须在类中实现。

接口的嵌入

  • 接口嵌入类中,可以使用private修饰。此时,接口只能在所在的类中实现,其他类不能访问。
  • 嵌入接口中的接口一定要为public。

类的嵌入

  • 类可以嵌入另一个类中,但不能嵌入接口中。
  • 在静态方法或其他方法中,不能直接创建内部类对象,需通过手段来取得。
  • 一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。

异常类

  • JAVA中除了RunTimeException 类,其他异常均须捕获或抛出。

类加载的初始化顺序

  • 父类--静态变量  
  • 父类--静态初始化块  
  • 子类--静态变量  
  • 子类--静态初始化块  
  • 父类--变量  
  • 父类--初始化块  
  • 父类--构造器  
  • 子类--变量  
  • 子类--初始化块  
  • 子类--构造器

Final关键字

  • final关键字是一个修饰符,可以修饰类、方法和变量。
  • 被final修饰的类是一个最终类,不可以被继承。
  • final修饰的方法不能被重写而不是重载。
  • final修饰属性,此属性就是一个常量,不能被再次赋值。
  • 常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化。
  • final修饰的方法不能被重置(在子类中不能出现同名方法)。
  • 如果声明一个类为final,则所有的方法均为final,无论其是否被final修饰,但数据成员可为final也可不是。

Static关键字

  • 关于static关键字:静态修饰符
    • 静态随着类的加载而加载
    • static优先于对象存在
      • 回想:public static void main(..){...}
    • static共享数据:可以被多个对象进行共享
      • 举例:饮水机(staticd的共享的)
      • 举例:水杯(不能共享的...)
    • 如果数据被静态修饰的,它可以被类名直接调用
      • 被静态修饰的方法:    类名.方法名()
      • 被静态修饰的变量:    类名.变量名;

构造代码块,构造方法,静态代码的优先级?

  • 答案:静态代码块 > 构造代码块 > 构造方法

    • 静态代码:只能执行一次

    • 构造代码块:在每次执行构造方法之前都会被执行

Overload和Override的区别?

  • overload:方法重载(方法名一样,参数不同,和返回值没有关系)

    • 参数不同:

      • 参数个数不同

      • 参数类型不同

  • override:方法重写 (子类定义一个和父类一摸一样的方法声明) 

String

 

  • String最大的特点:字符串一旦被赋值,其值不能改变;
    • 原因:直接把一个常量赋值给String类型,这种形式,它是在方法去中的字符串常量池中看有没有当前字符串,有直接返回它的地址,没有就在常量池中开辟空间;
  • StringBuffer和String的区别?
    • 前者是一个可变的字符序列,后者是不可变的字符序列
    • 如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
    • 而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉
  • StringBuffer,String,StringBuilder的区别?
    • StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区,(两者都看做容器)
    • StringBuffer:线程安全的,同步的,但是执行效率低
    • StringBuilder:线程不安全的,不同步的,但是执行效率高,并且单线程中优先采用StringBuilder
    • StringBuffer:执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区
  • StringBuffer和数组的区别?
    • 数组:它是可以存储多个数据的容器,并且多个数据的类型必须一致
      • 数组长度功能:length属性
    • StringBuffer:它是容器,它在缓冲区始终存储的只能字符串类型的数据
      • 获取缓冲区的长度:length() 

​​​​​​​Calendar

  • ​​​​​​​Calendar 类是一个抽象类(不能实例化),它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如:获得下星期的日期)提供了一些方法 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值