(JAVA):学习面向对象时必须要注意的细节----重点第二部分

简介: (JAVA):学习面向对象时必须要注意的细节----重点第二部分

目录

言图:

☠☠类变量和类方法

☠类变量细节:

☠类方法细节:

☠☠二、main方法注意事项

☠☠三、代码块细节

※ 相比方法,特别之处:

※ 注意:

※ 使用场景:

※ 细节(重点):

☠☠四、final关键字

㊤使用场景:

㊦使用细节:

☠☠五、抽象类细节

☠基本介绍:

☠注意细节:

☠抽象类设计模板:

☠☠六、接口

☠基本介绍:

☠注意细节:

☠补充:



言图:


 

☠☠类变量和类方法

☠类变量细节:

→→类变量的用处:当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(即静态变量)。

→→ 区别类变量和实例变量:类变量是该类的所有对象共享的,而实例变量(即普通属性)是每个对象独有的。

→→ 加上static关键字的变量称为类变量或静态变量,否则称为实例变量(即我们所说的普通变量或者称为非静态变量)。

→→类变量可以通过 类名.类变量名 或者 对象名.类变量名 的方式来访问(推荐使用 类名.类变量名 的方式访问),而实例变量不能通过 类名.类变量名 方式访问。注意:访问时要满足访问修饰符的访问权限和范围。

→→类变量是在类加载时就初始化了,也就是即使你没有创建对象,只要类加载了,就可以使用类变量了。同时,类变量的生命周期是随类的加载开始,随类的消亡而销毁。


☠类方法细节:

▶ 类方法和普通方法都是随着类的加载而加载,将结构信息储存在方法区。

注意:

              ▷ 类方法中无this的参数,
              ▷ 普通方法中隐含着this的参数。

▶ 类方法可以通过类名调用,也可以通过对象名调用

▶ 普通方法和对象有关,需要创建对象,然后通过对象名调用。

类方法中不允许使用和对象有关的关键字,比如this和super ,而普通方法可以使用

类方法只能访问 静态变量 和 静态方法。普通成员方法既可以访问 非静态成员,也可以访问静态变量成员。


☠☠二、main方法注意事项

public static void main(String[] args){}:(main方法是虚拟机调用)

Java虚拟机需要调用类的main方法,所以该方法的访问权限必须是public

Java虚拟机在执行main() 方法是不会创建对象,所以该方法必须是static

该方法接收String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。

注意:

       ▷在main方法中,我们可以直接调用main方法所在类中的静态方法或静态属性

       不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后才能通过这个                对象名去访问类中的非静态成员。


☠☠三、代码块细节

※ 相比方法,特别之处:

       ◎ 没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时,或创建对象时隐式调用。

注意:

       修饰符可以不写,也可以写static

       代码块分为两类:使用static 修饰的叫静态代码块,没有static的修饰的叫普通代码块

        代码块最后 { }; 的分号可以写上也可以省略

※ 使用场景:

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


※ 细节(重点):

       ♈static 代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,在创建对象实例时,会被隐式的调用,每创建一个对象就会执行一次。如果只是使用类的静态成员时,普通代码块并不会执行。

       ♉类什么时候被加载:

               ◆ 创建对象实例时(new),类会被加载

               ◆ 创建子类对象实例时,父类也会被加载

               ◆ 使用类的静态成员时(静态属性,静态方法),类会被加载

       ♊创建一个对象时,在一个类 的调用顺序是:(重点部分)

               ● 第一步,调用静态代码块静态属性初始化:两者调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按照它们定义的顺序来调用。

               ● 第二步,调用普通代码块普通属性初始化:两者调用的优先级一样,当两者都有许多的情况下,按照定义的顺序来调用。

               ● 第三步,调用构造方法。(构造器中的最前面隐含了super() 和 调用普通代码块,所以在调用本类构造器之前会先调用父类的和本类的普通代码块)

       ♌当创建一个子类对象时,存在继承关系的调用顺序:

               ♥ 第一步,父类的静态代码块和静态属性(优先级相同,按定义顺序执行)

               ♥ 第二步,子类的静态代码块和静态属性(优先级相同,按定义顺序执行)

               ♥ 第三步,父类的普通代码块和普通属性初始化(优先级相同,按定义顺序执行)

               ♥ 第四步,父类的构造方法

               ♥ 第五步,子类的普通代码块和普通属性初始化(优先级相同,按定义顺序执行)

               ♥ 第六步,子类的构造方法

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


☠☠四、final关键字

㊤使用场景:

       ♡ 当不希望类被继承时,可以用final修饰

       ♡ 当不希望父类的某个方法被子类覆盖或重写时,可以用final修饰

       ♡ 当不希望类的某个属性的值被修改,可以用final修饰

       ♡ 当不希望某个局部变量被修改时,可以使用final修饰


㊦使用细节:

      ♎final修饰的属性又叫常量,一般用大写的字母来命名

       ♏final修饰的属性在定义时必须赋初值并且以后不能修改赋值的位置

               ♤ 定义时直接赋值

               ♤ 在构造器中赋值

               ♤ 在代码块中赋值

       ♐如果final修饰的属性是静态的,即加了static关键字,则初始化的位置不能在构造器中,其他两个地方(定义时,代码块)才可以初始化。

       ♑final类不能继承,但可以实例化对象。

       ♓如果类不是final类,但含有final方法,则该方法不能被重写,但可以继承

       ♒一般来说,如果一个类已经是final类了,就不需要再将该类的方法修饰成final方法,因为该类不能被继承

       ♍final不能修饰构造器

       ♈final和static往往搭配使用,效率高,不会导致类加载,底层编译器做了优化处理

       ♉包装类和String等都是final类


☠☠五、抽象类细节

☠基本介绍:

       ☾ ☾ 用abstract 关键字来修饰一个类是抽象类,用来修饰一个方法是抽象方法

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


☠注意细节:

       抽象类不能被实例化

       抽象类中不一定要包含抽象方法,但是类中一旦有抽象方法,则这个类必须是抽象类

        abstract 只能修饰类和方法,不能修饰属性和其它的

      抽象类的本质还是类,可以有任何成员

      ☞ 抽象方法不能有主体,如果一个类继承了抽象类,则必须实现抽象类中的所有抽象方法,除非这个类也声明抽象类。

       抽象方法不能使用private、final和static关键字来修饰,因为这些关键字所修饰的方法都是不能重写的


☠抽象类设计模板:

package com.Abstract;
public class Abstractmodel {
    public static void main(String[] args) {
        Num num = new Num();
        num.play();
        accumulate acc = new accumulate();
        acc.play();
    }
}
abstract class model{//定义抽象类
    public abstract void job();//抽象方法
    public void play(){//普通方法
        long begin = System.currentTimeMillis(); //获取当前时间
        job(); //调用抽象类
        long end = System.currentTimeMillis(); //获取当前时间
        System.out.println("总耗时:" + (end - begin) + "毫秒"); //计算时间
    }
}
class Num extends model{//定义子类继承抽象类
    public void job(){ //对父类的抽象类进行实例化
        long num = 1;
        for (int i = 1; i <= 800000; i++) {
            num += i;
        }
    }
}
class accumulate extends model{//定义子类继承父类抽象类
    public void job(){//对父类的抽象类进行实例化
        long sum = 1;
        for (int i = 1; i <= 800000; i++) {
            sum *= i;
        }
    }
}


☠☠六、接口

☠基本介绍:

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

语法:

       ● interface 接口名{

       //属性

       //方法(抽象方法、默认实现方法、静态方法)

       }

       ● class 类名 implements 接口名{

       //自己属性

       //自己的方法

       //必须实现的接口抽象类

       }

注意:

       ▷ 在JDK7.0以前,接口里的所有方法都没有方法体,即都是抽象方法

       ▷ 在JDK8.0以后,接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现


☠注意细节:

       ● 接口不能被实例化

       ○ 接口中的所有方法是public方法,接口中抽象方法可以不用abstract 修饰

       ○ 一个普通类实现接口,就必须将该接口的所有方法都实现;抽象类实现接口,可以不用实现接口的方法

       ● 一个类可以同时实现多个接口

       ● 接口中的属性,只能是final的,而且是public static final 修饰符

       ○ 接口中属性的访问形式:接口名.属性名

       ● 接口不能继承其他类,但可以继承多个别的接口

       ○ 接口的修饰符只能是public 和默认,这点和类的修饰符是一样的

       注意:

               • 子类继承父类,就自动拥有了父类的功能

               • 如果子类需要扩展功能,可以通过实现接口的方式扩展

               • 可以理解为:实现接口是对Java单继承机制的一种补充 


补充:

       ♣ 继承的价值主要在于:解决代码的复用性可维护性

       ♣ 接口的价值主要在于:设计好各种规范性(方法),让其他类去实现这些方法



相关文章
|
30天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
87 43
Java学习十六—掌握注解:让编程更简单
|
15天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
32 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
22天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
14 2
|
23天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
44 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
24 3
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
30 2
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
36 1
下一篇
无影云桌面