面向对象高级部分

本文详细介绍了Java的面向对象高级特性,包括类变量、类方法的定义与使用,理解main方法的语句,代码块的分类与作用,单例设计模式的饿汉式和懒汉式以及它们的区别,final关键字的用途,抽象类与接口的设计原理和应用场景,以及内部类(局部内部类、匿名内部类、成员内部类和静态内部类)的概念、特点和使用细节。通过对这些概念的深入理解,能够提升Java开发的效率和代码质量。
摘要由CSDN通过智能技术生成

类变量和类方法

类变量

类变量(静态变量static):多个对象共享一个公共变量
1、静态变量是所有对象共享的(同一个类的)
2、static变量在类加载的时候就生成了

定义语法:
访问修饰符 static 数据类型 变量名;推荐
static 访问修饰符 数据类型 变量名;

访问方式:
类名.类变量名【推荐】
对象名.类变量名

使用细节:
1、什么时候需要用类变量:
当我们需要让某个类的所有对象共享一个变量时,考虑使用类变量。
2.类变量与实例变量区别
类变量是该类的所有对象共享,实例变量是每个对象独享
3、加上static成为类变量或静态变量。
4、静态变量的访问修饰权限和普通变量相同。
5、java设计者推荐使用类名.变量名进行访问
6、类变量是随着类的加载而创建的,所以即使没有创建对象实例也可以访问。
7、类变量的生命周期是随着类加载开始,随着类消亡为销毁。

类方法

定义语法:
访问修饰符 static 数据类型 变量名 方法名(){};推荐
static 访问修饰符 数据类型 变量名 方法名(){};;

类方法调用:
类名.方法名

类方法的使用场景:
当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
如果我们希望不创建实例时用静态方法。
比如:工具类utils
Math类、Arrays类、Collections类

小结:
开发自己的工具类方便调用和使用,提升开发效率。

注意事项:
1)类方法和普通普通方法都是随着类的加载而加载,将结构信息储存在方法区。
注意:类方法中无this参数
2)类方法可以通过类名调用,也可以通过对象名调用
3)普通方法不能通过类名调用。
4)类方法中不允许使用和对象有关的关键字,比如this和super。
5)类方法中只能访问静态变量或静态方法。
6)普通成员方法,既可以访问普通变量(方法),也可以访问静态变量(方法)。

小结:
静态方法:只能访问静态的成员
非静态方法:能访问静态成员和非静态成员(必须遵守访问权限)

理解main方法语句

深入理解main方法:

解释main方法的形式:

 public static void main(String[] args) {
   

    }

1、main方法是虚拟机调用的
2、java虚拟机需要调用main方法,所以该方法访问权限必须为public
3、java虚拟机在执行main方法时,不必创建对象,所以该方法必须为static
4、该方法接收的String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
5、string数组参数是在程序执行main方法时传入
java 执行的程序 参数1 参数2 参数3【idea通过以下传入值】

在这里插入图片描述
理解main方法语法:
1、在main方法中,可以直接调用main方法所在类的静态属性,静态方法。
2、不能直接访问该类非静态成员,必须实例化对象后,通过对象调用【语法规则】

代码块

代码块是只有方法体的方法。
调用:
不用通过对象或类显示调用,而是在加载类时,或创建对象时隐式调用

基本语法:

【修饰符】{
   

};

说明注意:
1、修饰符可写可不写,只能是static类型。
2、分号可省略。
3、代码块的调用优先于构造器
4、每次实例化一个对象时都会调用代码块。

代码块的好处:
相当于另外一种形式的构造器(对构造器的补充机制)可以做初始化的操作。

应用场景:
如果多个构造器中有重复的语句,可以抽取到初始化块中,提高代码的重用性。

代码块使用注意事项:
1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载执行,并且只会执行一次。
普通代码块每创建一个对象执行一次。

补充:类在什么时候被加载:
①当创建对象实例时(new)
②创建子类对象实例,父类也会被加载
③使用类的静态成员时(静态属性,静态方法)

2)普通的代码块,在创建对象实例时,会被隐式调用。
被创建一次就调用一次。

3)创建一个对象时,在一个类的调用顺序(重点、难点):
①调用静态代码块和静态属性初始化
注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用
②调用普通代码块和普通属性的初始化
注意:按定义顺序调用(优先级一致)
③调用构造方法
在这里插入图片描述
构造器上隐藏了super方法和调用普通代码块的方法。

4)创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:
①父类的静态代码块和静态属性(优先级一致,按定义顺序执行)
②子类的静态代码块和静态属性(优先级一致,按定义顺序执行)
③父类的普通代码块和普通属性初始化(优先级一致,按定义顺序执行)
④父类的构造方法
⑤子类的普通代码块和普通属性初始化(优先级一致,按定义顺序执行)
⑥子类的构造方法

5)静态代码块只能直接调用静态成员(静态属性和静态方法)
普通代码块不限制

单例设计模式

静态方法和属性的经典使用

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

单例设计模式:
1、饿汉式
2、懒汉式

饿汉式

步骤如下:
1、构造器私有化→防止直接new一个对象
2、在类的内容创建一个对象
3、向外暴露一个静态的公共方法,如getInstance
注意:可能创建了但是没有用,可能会造成资源浪费。

class GirlFriend{
   
    private String name;

    private GirlFriend(String name) {
   
        this.name = name;
    }
    private static GirlFriend gf = new GirlFriend("alice");

    public static GirlFriend 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值