首页 > 编程语言 >韩顺平java基础-10-面向对象编程

韩顺平java基础-10-面向对象编程

时间:2024-01-10 11:11:50浏览次数:38  
标签:java 静态 成员 接口 访问 面向对象编程 方法 final 顺平

韩顺平java基础-10-面向对象编程

类变量和类方法

类变量

static

  1. 静态变量被同一个类所有对象共享
  2. 类变量在类加载的时候生成

定义语法

访问修饰符 static 数据类型 变量名

如何访问类变量

类名.类变量名 //类变量随着类加载而创建,所以即使没有创建对象实例也可以访问。

使用细节

  1. 什么时候需要用类变量

需要某个类的所有对象共享一个变量,都可以考虑使用类变量

  1. 类变量与实例变量的区别

类变量是该类所有对象共享,实例变量是每个对象独享


类方法

类方法就是静态方法

语法

访问修饰符 static 数据返回类型 方法名(){}

类方法使用场景

当方法中不涉及到任何和对象相关的成员时,可以将方法设计成静态方法,提高开发效率。

希望不创建实例,也可以调用某个方法(当作工具使用)

注意事项

类方法可以通过类名直接调用,非静态方法需要创建对象再调用。

类方法不能使用this和super等关键字。

类方法只能访问静态成员(方法和变量),不能访问实例方法。

普通成员方法既可以访问静态成员也可以访问非静态成员


理解main方法语法

public static void main(String[] args)

  1. main 方法是java虚拟机调用
  2. Java虚拟机需要调用类的main方法,所以访问权限必须是public
  3. java虚拟机在执行main方法时不创建对象,所以该方法必须时static

注意

静态方法main,可以访问本类的静态成员,但是不可以访问本类的非静态成员


代码块

代码化块又称为初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时或创建对象时隐式调用。

基本语法

[修饰符]{代码};

说明

修饰符 只能是 static

使用static修饰的叫静态代码块,没有static修饰的叫普通代码块

代码块调用优先于构造器

理解

相当于另一种形式的构造器

应用场景

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

细节

  1. static代码块,作用就是对类进行初始化,随着类加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就会执行。

类什么时候被加载?

​ 1创建对象实例时(new) 2 创建子类对象实例时,父类同时被加载,同时父类先加载

​ 3 使用类的静态成员时,类被加载

  1. 创建一个对象时,在一个类中的调用顺序是:

​ 1调用静态代码块和静态属性初始化 优先级:优先级相同,按照定义顺序执行

​ 2调用普通代码块和普通属性初始化 优先级:优先级相同,按照定义顺序执行

​ 3调用构造器

  1. 构造器 默认执行 super和调用普通代码块
  2. 创建一个子类对象(含继承关系)时,在一个类中的调用顺序是:

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

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

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

​ 4父类构造器

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

​ 6子类构造器

  1. 静态代码块只能直接调用静态成员,普通代码块可以调用任意成员

单例设计模式

静态方法和静态属性的应用

应用实例

饿汉式(如果没有使用对象,也会随着类的加载自动创建)懒汉式(没有使用对象时,不会创建对象,在调用接口时才创建)

步骤

  1. 构造器私有化 private
  2. 在类的内部创建静态对象
  3. 提供公共static方法接口,返回对象

小结

饿汉式:在类加载时就创建对象,可能存在资源浪费问题

懒汉式:线程存在安全问题


final关键字

使用场景

  1. 不希望类被继承,可以用final修饰
  2. 不希望父类中的方法被重写,可以用final修饰
  3. 不希望类的某个属性的值被修改,可以用final修饰
  4. 不希望某个局部变量被修改,可以用final修饰

细节

  1. final修饰的变量称为常量,必须赋初值。
  2. 赋值位置:1.定义时 2.构造器中 3.代码块中
  3. 如果final修饰的是静态属性,则赋值位置:1.定义时 2.静态代码块 不能在构造器中赋值
  4. final类不能继承,但是可以实例化
  5. 非final类,final方法不能被重写,但是可以被继承
  6. final类的方法不必使用final再次修饰方法(画蛇添足)
  7. final和static结合使用,不会导致类加载,效率更高
  8. 包装类 String Double Int是final类 不能被继承

抽象类

定义

父类方法不确定时,用abstract修饰方法,抽象方法没有方法体。

细节

  1. 抽象类不能被实例化(new)
  2. 抽象类不一定要包含abstract方法
  3. 一旦类中包含抽象方法,则必须声明为抽象类
  4. abstract只能修饰类和方法
  5. 如果一个类继承了抽象类,则它必须实现抽象类中的所有抽象方法,除非子类也声明为抽象类。
  6. 抽象方法不能使用private,final,static来修饰,因为与重写相违背。

模板设计模式(抽象类使用)

动态绑定机制


接口

封装一些没有实现的方法,根据具体情况实现方法

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

class 类名 implements 接口{自己属性 自己方法}

细节

  1. 普通类实现接口,必须实现接口的所有抽象方法。抽象类实现接口,可以不用实现接口方法。
  2. 接口中,默认是抽象方法,不用abstract关键字
  3. jdk8后,可以有默认实现方法,但是需要使用default关键字修饰;可以有静态方法。
  4. 接口不能实例化,本身是抽象概念
  5. 类可以同时实现多个接口 接口也可以继承其他的接口
  6. 接口中的属性 只能是public static final属性

接口 vs 继承类

实现接口是对java单继承机制的补充

继承:

子类可以直接使用父类中已存在的方法

接口:

扩展子类的功能

接口多态

多态参数

多态数组:向下转型

多态传递


内部类

类的五大成员

属性、方法、构造器、代码块、内部类

局部内部类

  1. 局部内部类定义在外部类的局部位置(通常在方法中),相当于局部变量
  2. 可以直接访问外部类的所有成员,包括私有的
  3. 不能添加访问修饰符,但是可以使用final修饰
  4. 作用域:仅仅作用于定义它的方法或代码块中
  5. 局部内部类使用外部类:可以直接访问外部类的所有成员
  6. 外部类使用局部内部类:在方法中创建对象使用
  7. 外部类和局部内部类成员重名时,遵循就近原则优先访问内部类成员。如果想要访问外部类成员,使用 外部类名.this.成员 访问

匿名内部类

  1. 当作实参直接传递

成员内部类

  1. 可以直接访问外部类的所有成员,包括私有的
  2. 成员内部类,定义在外部类的成员位置
  3. 可以用修饰符(本质是成员,可以加)
  4. 成员内部类使用外部类:可以直接访问外部类的所有成员
  5. 外部类使用成员内部类:在方法中创建对象使用
  6. 外部其他类使用成员内部类:1.创建成员内部类的对象 2.在外部类中创建方法返回对象实例
  7. 外部类和成员内部类成员重名时,遵循就近原则优先访问内部类成员。如果想要访问外部类成员,使用 外部类名.this.成员 访问

静态内部类

  1. 定义在外部类的成员位置,static修饰
  2. 可以直接访问外部类的静态成员,不能访问非静态成员
  3. 可以用修饰符(本质是成员,可以加)

小结

  1. 内部类共四种:局部内部类、匿名内部类、成员内部类、静态内部类
  2. 重点掌握匿名内部类:

new 类/接口(参数列表){};

  1. 成员内部类、静态内部类 放在外部类的成员位置,本质是一个成员

标签:java,静态,成员,接口,访问,面向对象编程,方法,final,顺平
From: https://www.cnblogs.com/forest-pan/p/17956090

相关文章

  • java工作流引擎-j-roadflow-plus使用快速入门
    新建一个流程并发布运行需要以下步骤:1、新建表单。    在表单管理中新建表单,并设计表单,在表单中拖入控件。        点新建按钮会进入表单设计界面,并自动弹出表单属性设置。        输入表单名称,选择数据连接,数据表选择已有的测试表rf_form_test,主键选id......
  • 唠一唠Java线程池
    第1章:引言大家好,我是小黑,咱们今天来聊聊Java线程池,如果没有线程池,每个线程都需要手动创建和销毁线程,那将是多么低效和耗资源啊!线程池的核心作用就是复用已创建的线程,减少系统开销,提高响应速度。咱们在开发高并发应用时,经常会遇到需要同时执行多个任务的场景,这时候线程池就闪亮......
  • test-01-java 单元测试框架 junit 入门介绍
    拓展阅读junit5系列基于junit5实现junitperf源码分析Autogeneratemockdataforjavatest.(便于Java测试自动生成对象信息)Junitperformancerelyonjunit5andjdk8+.(java性能测试框架。性能测试。压测。测试报告生成。)JUnitJUnit是一个用于编写可重复测试......
  • test-02-java 单元测试框架 junit5 入门介绍
    拓展阅读junit5系列基于junit5实现junitperf源码分析Autogeneratemockdataforjavatest.(便于Java测试自动生成对象信息)Junitperformancerelyonjunit5andjdk8+.(java性能测试框架。性能测试。压测。测试报告生成。)junit5的入门例子maven引入<depend......
  • java基础问题
    数组一维数组:  1.使用new指定一个数组大小int[]number=newint[8];number[0]=1;number[1]=2;number[2]=3;number[3]=5;number[4]=8;其中,int表示数据类型,并且给每个元素进行赋值。2.使用new指定数组元素的值int[]number=newint[]{1,2,3,5......
  • 对Java中new关键字的理解
    在编写Java程序中,最常用的就是new,那么new这个关键字到底做了什么(目前的理解,后续再补充)在Java中,new关键字用于创建对象的实例。当使用new关键字时,它会在堆内存中为对象分配空间,并调用对象的构造方法来初始化对象的状态。相当于分配了一个内存地址,每new一个就有一个新地址,当使用ne......
  • Java语言程序设计(基础篇 原书第10版)PDF
    《Java语言程序设计(基础篇原书第10版)》是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象编程、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配有大量复习题和编程练习题,帮助读者掌握编......
  • Java字节码文件详解​
    03.字节码文件详解JVM的组成从字节码文件的执行流程看JVM的组成:1.准备好字节码文件(自己编译或其他人传给你)2.使用类加载器ClassLoader加载(此时JVM已参与)3.运行时数据(JVM管理的内存)4.执行引擎(即时编译器、解释器垃圾回收器等):将字节码文件中的指令解释成机器码,同时使用即时编译器优化......
  • 通过印模生成电子印章-Java源代码
    以下代码是处理印模图片的核心代码,通过以下代码可以将公章图片转换为电子印章图片。制作方式分为四步:1、在白纸上加盖印章;2、把加盖印章的白纸扫描,形成图片;3、将图片通过下面的代码进行自动透明化抠图处理;4、程序返回自动透明化抠图处理后的电子印章图片。5、处理后的电子印章效果(......
  • java生成企业公章图片源代码
    企业公章图片在电子签章业务中应用广泛,在电子签章应用过程中首先需要生成公章图片,然后再使用公章图片结合数字签名技术完成电子签,这样就实现了从可视化到不可篡改的数字化电子签章功能,以下是企业公章图片生成源代码。importcom.resrun.utils.Base64;importorg.apache.pdfbox.io.......