首页 > 编程语言 >JAVA学习日记五(面向对象-高级)

JAVA学习日记五(面向对象-高级)

时间:2024-03-14 16:02:59浏览次数:21  
标签:JAVA 静态 代码 修饰符 接口 面向对象 static 方法 日记

1.关键字:static

如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(或类属性)!

  • 使用范围:

    • 在Java类中,可用static修饰属性、方法、代码块、内部类

  • 被修饰后的成员具备以下特点:

    • 随着类的加载而加载

    • 优先于对象存在

    • 修饰的成员,被所有对象所共享

    • 访问权限允许时,可不创建对象,直接被类调用

静态变量

使用static修饰的成员变量就是静态变量(或类变量、类属性)

语法格式:

[修饰符] class 类{
    [其他修饰符] static 数据类型 变量名;
}

静态变量的特点:

  • 静态变量的默认值规则和实例变量一样。

  • 静态变量值是所有对象共享。

  • 静态变量在本类中,可以在任意方法、代码块、构造器中直接使用。

  • 如果权限修饰符允许,在其他类中可以通过“类名.静态变量”直接访问,也可以通过“对象.静态变量”的方式访问(但是更推荐使用类名.静态变量的方式)。

  • 静态变量的get/set方法也静态的,当局部变量与静态变量重名时,使用“类名.静态变量”进行区分。

静态方法

用static修饰的成员方法就是静态方法。

语法格式:

[修饰符] class 类{
    [其他修饰符] static 返回值类型 方法名(形参列表){
        方法体
    }
}

静态方法的特点:

  • 静态方法在本类的任意方法、代码块、构造器中都可以直接被调用。

  • 只要权限修饰符允许,静态方法在其他类中可以通过“类名.静态方法“的方式调用。也可以通过”对象.静态方法“的方式调用(但是更推荐使用类名.静态方法的方式)。

  • 在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。

  • 静态方法可以被子类继承,但不能被子类重写。

  • 静态方法的调用都只看编译时类型。

  • 因为不需要实例就可以访问static方法,因此static方法内部不能有this,也不能有super。如果有重名问题,使用“类名.”进行区别。

2.理解main方法的语法

由于JVM需要调用类的main()方法,所以该方法的访问权限必须是public,又因为JVM在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。

又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。

3.类的成员之四:代码块

如果成员变量想要初始化的值不是一个硬编码的常量值,而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值,该怎么办呢?此时,可以考虑代码块(或初始化块)。

  • 代码块(或初始化块)的作用

  • 对Java类或对象进行初始化

  • 代码块(或初始化块)的分类

    • 一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(static block)

    • 没有使用static修饰的,为非静态代码块。

如果想要为静态变量初始化,可以直接在静态变量的声明后面直接赋值,也可以使用静态代码块。

语法格式:

在代码块的前面加static,就是静态代码块。

【修饰符】 class 类{
    static{
        静态代码块
    }
}

静态代码块的特点:

  1. 可以有输出语句。

  2. 可以对类的属性、类的声明进行初始化操作。

  3. 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。

  4. 若有多个静态的代码块,那么按照从上到下的顺序依次执行。

  5. 静态代码块的执行要先于非静态代码块。

  6. 静态代码块随着类的加载而加载,且只执行一次。

非静态代码块

语法格式:

【修饰符】 class 类{
    {
        非静态代码块
    }
    【修饰符】 构造器名(){
        // 实例初始化代码
    }
    【修饰符】 构造器名(参数列表){
        // 实例初始化代码
    }
}

非静态代码块的作用:和构造器一样,也是用于实例变量的初始化等操作。

非静态代码块的意义:

如果多个重载的构造器有公共代码,并且这些代码都是先于构造器其他代码执行的,那么可以将这部分代码抽取到非静态代码块中,减少冗余代码。

非静态代码块的执行特点:

  1. 可以有输出语句。

  2. 可以对类的属性、类的声明进行初始化操作。

  3. 除了调用非静态的结构外,还可以调用静态的变量或方法。

  4. 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。

  5. 每次创建对象的时候,都会执行一次。且先于构造器执行。

4.final关键字

final:最终的,不可更改的

final修饰类:表示这个类不能被继承,没有子类。提高安全性,提高程序的可读性。

final修饰方法:表示这个方法不能被子类重写。

final修饰变量:final修饰某个变量(成员变量或局部变量),一旦赋值,它的值就不能被修改,即常量,常量名建议使用大写字母。

5.抽象类与抽象方法(或abstract关键字)

我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类必须是抽象类

语法格式:

  • 抽象类:被abstract修饰的类。

  • 抽象方法:被abstract修饰没有方法体的方法。

抽象类的语法格式:

[权限修饰符] abstract class 类名{
    
}
[权限修饰符] abstract class 类名 extends 父类{
    
}

抽象方法的语法格式:

[其他修饰符] abstract 返回值类型 方法名([形参列表]);

抽象方法没有方法体

子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法

使用说明:

1、抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

2、抽象类中,也有构造方法,是供子类创建对象时,初始化父类成员变量使用的。

3、抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

4、抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

注意:

  • 不能用abstract修饰变量、代码块、构造器;

  • 不能用abstract修饰私有方法、静态方法、final的方法、final的类。

6.接口(interface)

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想。继承是一个"是不是"的is-a关系,而接口实现则是 "能不能"的has-a关系。

接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。

声明格式:

[修饰符] interface 接口名{
    //接口的成员列表:
    // 公共的静态常量
    // 公共的抽象方法
    
    // 公共的默认方法(JDK1.8以上)
    // 公共的静态方法(JDK1.8以上)
    // 私有方法(JDK1.9以上)
}

接口的使用规则:

1、类实现接口(implements)

接口不能创建对象,但是可以被类实现(implements ,类似于被继承)。

类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements关键字。

【修饰符】 class 实现类  implements 接口{
    // 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
      // 重写接口中默认方法【可选】
}

【修饰符】 class 实现类 extends 父类 implements 接口{
    // 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
      // 重写接口中默认方法【可选】
}

  1. 如果接口的实现类是非抽象类,那么必须重写接口中所有抽象方法

  2. 默认方法可以选择保留,也可以重写。

  3. 接口中的静态方法不能被继承也不能被重写

2、接口的多实现(implements)

在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现。并且,一个类能继承一个父类,同时实现多个接口。

【修饰符】 class 实现类  implements 接口1,接口2,接口3。。。{
    // 重写接口中所有抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
      // 重写接口中默认方法【可选】
}

【修饰符】 class 实现类 extends 父类 implements 接口1,接口2,接口3。。。{
    // 重写接口中所有抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
      // 重写接口中默认方法【可选】
}

3、接口的多继承(extends)

一个接口能继承另一个或者多个接口,接口的继承也使用 extends 关键字,子接口继承父接口的方法。

4、接口与实现类对象构成多态引用

实现类实现接口,类似于子类继承父类,因此,接口类型的变量与实现类的对象之间,也可以构成多态引用。通过接口类型的变量调用方法,最终执行的是你new的实现类对象实现的方法体。

5、使用接口的静态成员

接口不能直接创建对象,但是可以通过接口名直接调用接口的静态方法和静态常量。

6、使用接口的非静态方法

  • 对于接口的静态方法,直接使用“接口名.”进行调用即可

    • 也只能使用“接口名."进行调用,不能通过实现类的对象进行调用

  • 对于接口的抽象方法、默认方法,只能通过实现类对象才可以调用

    • 接口不能直接创建对象,只能创建实现类的对象

标签:JAVA,静态,代码,修饰符,接口,面向对象,static,方法,日记
From: https://blog.csdn.net/fengxixu/article/details/136711415

相关文章

  • JAVA学习日记四(面向对象-基础)
    1.面向对象概述面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程!2.Java的基本元素:类和对象类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。对象:实际存在的该类事......
  • Java-OkHttpUtil扩展工具类
    先把基于OkHttp的使用进行工具化,形成公共类配置引入<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.4</version></dependency>......
  • 用JavaSocket编程开发聊天室
    1.设计内容1.用Java图形用户界面编写聊天室服务器端和客户端,支持多个客户端连接到一个服务器。每个客户端能够输入账号。2.可以实现群聊(聊天记录显示在所有客户端界面)。3.完成好友列表在各个客户端上显示。4.可以实现私人聊天,用户可以选择某个其他用户,单独发送信息。......
  • Java(计算机相关)面试之海量数据问题处理(1)分治/hash/排序
    原文链接:https://blog.csdn.net/a619602087/article/details/130348569面试的时候经常被问到海量数据处理问题,下面我会分期介绍几种海量数据处理的思路还有案例了解了之后面试不用怕了大数据处理思路:分而治之/Hash映射+HashMap统计+堆/快速/归并排序分而治之/hash映射:......
  • Java面试八股文01-基础部分
    Java文件执行流程编译:将.java文件编译为虚拟机可以识别的.class字节码文件解释:虚拟机执行java字节码文件,将其转化为机器可以执行的机器码执行:机器执行机器码面向对象的三大特性封装继承多态深拷贝和浅拷贝浅拷贝代码举例publicclassPersonimplementsCloneable......
  • Java登陆第三十五天——VUE初始页面解析
    Vite创建的默认Vue3项目中package.json文件信息如下:{"name":"vmoudle1","private":true,"version":"0.0.0","type":"module","scripts":{"dev":"vite",......
  • 身份证查询-身份认证-javascript实名认证接口
    翔云身份证实名认证接口将与网络平台携手共筑信息安全防线,守护每一笔交易的真实可信,助力您的企业在数字化浪潮中稳健前行!以下是javascript语言调用翔云身份证实名认证API的代码:varform=newFormData();form.append("img","/9j");form.append("key","M***********g");fo......
  • Java登陆第三十五天——Vite+Vue3目录结构、.vue文件理解(SFC)
    项目结构使用Vite创建Vue3+JS默认项目结构如下:(vmoudle1是项目名)Vue中提出了组件的概念。组件是代码复用的一种方式,用于抽象出一个可复用的UI,方便在不同的场景中进行重复使用。组件根据大小可被分为:(从小到大)1.组件2.布局组件3.页面级别组件.vscode忽略node......
  • 精通Spring Boot单元测试:构建健壮的Java应用
    引言:在当今软件开发领域,单元测试已经成为确保应用质量和可维护性的关键步骤。特别是在Java生态系统中,SpringBoot框架作为一种广泛应用的解决方案,其对于单元测试的支持更是让开发者受益匪浅。本博客的目标是为开发者提供一份清晰易懂的指南,帮助他们利用SpringBoot框架构建......
  • Java复习第二天学习笔记,附有道云笔记链接
    【有道云笔记】二3.13https://note.youdao.com/s/RWOQv0g一、运算符1.基本运算符+-*/@Testpublicvoidtest2(){System.out.println("运算符.test2");//双目运算符intnum1=3,num2=5;intresult=num1+num2;System.out.println(result);System.out.prin......