JAVA类的进阶部分

一、类在什么时候加载

  1. 创建对象实例时
  2. 创建子类对象实例,父类也会被加载,而且父类先被加载,子类后被加载
  3. 使用类的静态成员时(静态属性,静态方法)

二、类方法使用注意事项

  1. 类方法和普通方法都是随着类的加载而加载,将结构信息储存在方法区。类方法中无this参数。

  2. 类方法可通过类名或对象名调用

  3. 普通方法和对象有关,需要通过对象名调用,不能通过对象名调用

  4. 类方法中不允许使用和对象有关的关键字,如this、super

  5. 静态方法只能访问静态的成员;非静态方法可以访问静态成员和非静态成员

三、深入理解main方法

形式: public static void main(String[] args)

  1. main方法是虚拟机调用
  2. java虚拟机需调用main方法,因此需要public修饰符
  3. java虚拟机在执行main()方法时不必创建对象,因此该方法必须是static
  4. 该方法接收String类型的数组参数

四、代码块

  1. static代码块是在类加载时执行,只会执行一次,且只能调用静态成员

  2. 普通代码块是在创建对象时调用,创建一次,调用一次

  3. 创建一个对象时,在一个类调用顺序时:

    (1)调用静态代码块和静态属性初始化

    (2)调用普通代码块和普通属性初始化

    (3)调用构造方法(构造器隐藏了了super和调用普通代码块)

  4. 创建一个子类对象时(继承关系),在一个类的调用顺序(口诀:由父及子,静态先行)

    (1)父类的静态代码块和静态属性初始化

    (2)子类的静态代码块和静态属性初始化

    (3)父类的普通代码块和普通属性初始化

    (4)父类的构造方法

    (5)子类的普通代码块和普通属性初始化

    (6)子类的构造方法

五、单例设计模式

单例设计模式:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

饿汉式:(可能创建了对象,但没有使用实例)

  1. 构造器私有化(防止直接new)
  2. 类的内部创建对象
  3. 向外暴露一个静态的公共方法

懒汉式:(只有当用户使用getInstance时,才返回对象)

  1. 仍然私有化构造器
  2. 定义一个static静态属性对象
  3. 提供一个public的static方法(先判断需创建的对象是否为空),可以返回一个Cat对象
饿汉式懒汉式
创建时机类加载时对象使用时
线程安全问题不存在存在
浪费资源存在不存在

六、抽象类

  1. 用abstract关键字,这个类就叫抽象类

    访问修饰符 abstract 类名{

    }

  2. 用abstract关键字来修饰一个方法时,这个方法就是抽象方法

    访问修饰符 abstract 返回类型 方法名(参数列表);//没有方法体

  3. 抽象类的价值更多作用在于设计,是设计者设计好后,让子类继承并实现抽象类

抽象类使用细节

  1. 抽象类不能被实例化
  2. 抽象类不一定要包含abstract方法
  3. 一旦类包含了abstract方法,则这个类必须声明为abstract
  4. abstract只能修饰类和方法,不能修饰属性和其它的
  5. 抽象类可以由任意成员**【抽象类还是类】**,例如:非抽象方法、构造器、静态属性等
  6. 抽象方法不能有主题
  7. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
  8. 抽象方法不能被private、static、final修饰

七、接口

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来

语法

interface 接口名{
	//属性
	//方法
}

class 类名 implements 接口{
	//自己属性
	//自己方法
	//必须实现的接口的抽象方法
}
  • 注:Jdk7.0前,接口里的所有方法都没有方法体,即都是抽象方法;Jdk8.0后接口中可以有静态方法和默认方法,在接口中,可以省略public abstract关键字

接口使用细节

  1. 接口不能被实例化
  2. 一个普通类实现接口,就必须将该接口的所有方法都实现
  3. 抽象类实现接口可不用实现接口的方法
  4. 一个类可以同时实现多个接口
  5. 接口中的属性只能时final的,并且默认为public static final修饰
  6. 接口中属性的访问形式:接口名.属性名
  7. 接口不能继承其它的类,但是可以继承多个接口interface extends IA,IB{}
  8. 接口的修饰符只能时public和默认

接口与继承的区别

  1. 接口和继承解决的问题不同
    (1)继承:主要解决代码的复用性和可维护性
    (2)接口:设计。设计好各种规范(方法),让其它类去是实现这些方法

  2. 接口比继承更加灵活
    继承是满足 is-a 的关系,而接口只需满足 like-a 的关系

  3. 接口在一定程度上实现代码解耦【接口规范性+动态绑定】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值