java基础6(黑马)

embedded/2025/2/13 2:07:54/

一、static

1.static修饰成员变量

static:叫静态,可以修饰成员变量、成员方法。

成员变量按照有无static,分两种。

类变量:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。静态成员变量。

实例变量(对象的变量):无static修饰,属于每个对象。

访问:

类名.类变量(推荐)

对象.类变量(不推荐)

类变量直接放在堆内存中。

类变量:属于类,与类一起加载一次,在堆内存中只有一份,可以被类和类的所有对象共享。

实例变量:属于对象,每个对象都有一份,只能用对象访问。

类变量的应用场景:

在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义类变量来记住。

2.static修饰成员方法

成员方法的分类:

类方法:有static修饰的成员方法,属于类:

成员方法:无static修饰的成员方法,属于对象。

Student类:

package cn.ensource.d2_staticmethod; public class Student {    double score;    // 类方法    public static void printHelloWorld() {        System.out.println("Hello World");        System.out.println("Hello World");    }     // 实例方法    public void printPass() {        System.out.println("成绩:" + (score >= 60 ? "及格" : "不及格"));    } 

Test测试类:

package cn.ensource.d2_staticmethod; public class Test {    public static void main(String[] args) {        // 目标:掌握有无static修饰方法的用法        // 1. 类方法的用法        // 类名.类方法        Student.printHelloWorld();         // 对象.类方法(不推荐)        Student st = new Student();        st.printHelloWorld();         st.score = 80;        st.printPass(); //        Student.printPass();  // 报错    }}

实例方法是不允许使用类名调用。

类方法可以使用类名调;也可以使用实例调,但是不推荐。

static修饰成员方法的应用场景:类方法最常见的应用场景是做工具类。

工具类是什么?

工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。

3.Static的注意事项

使用类方法和实例方法时的几点注意事项:

类方法中可以直接访问类成员,不可以直接访问实例成员;

实例方法中即可以直接访问类成员,也可以直接访问实例成员(变量和方法);

实例方法中可以出现this关键字,类方法中不可以出现this关键字。

package cn.ensource._d4_static_attention;public class Student {    static String schoolName; // 类变量    double score;    public static void printHelloWorld1() {        Student.schoolName = "黑马";        Student.printHelloWorld2();         // 类方法中不能访问实例变量、实例方法         //System.out.println(score);//printPass();          //System.out.println(this);    }     public static void printHelloWorld2() {        System.out.println("Hello World");        System.out.println("Hello World");    }     // 实例方法    public void printPass() {        Student.schoolName = "黑马";        printHelloWorld2();         System.out.println(score);        printPass2();         System.out.println(this);  //那取对象    }     public void printPass2() {     }}

只要记住:类方法只能只能访问类成员。

二、Static应用知识

1.代码块

代码块是类的五大成员之一(成员变量、构造器、方法、代码块、内部类)。

Java类生命周期:加载、验证、准备、初始化、卸载。

代码块分为两种:

静态代码块:

格式:static {}

特点:类加载时自动执行,由于类只会加载一次,所以静态代码也只会执行一次。

作用:完成类的初始化,例如:类变量的初始化赋值。

实例代码块:

 格式:{}

特点:每次创建对象的时候,,执行实例代码块,并在构造器前执行。

作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值的。

2.单例设计模式

设计模式:

架构师会使用到设计模式,开发框架,就需要掌握很多设计模式。

在Java基础阶段学习设计模式,将来面试笔试的时候,笔试题目会经常靠到设计模式。

将来会用到设计模式。框架代码中会用到设计模式。

什么是设计模式?(design pattern)

一个问题经常会有n种解法,其中肯定有一种解法是最优的,这种优的解法被人总结出来了,称之为设计模式。

设计模式就是具体问题的最优解决方法。

设计模式有20多种,对应20多种软件开发中会遇到的问题。

单例设计模式:确保一个类只有一个对象。

写法:

1)把类的构造器私有;

2)定义一个类变量记住类的一个对象;

3)定义一个类方法,返回对象。

三、继承

1.概念

继承:Java中提供了一个关键字extends,用这个关键字,可以让一个类和另外一个类建立父子关系。

继承的特点:

子类能继承父类的非私有成员(成员变量、成员方法)

父类的私有成员,子类是不能继承的。而父类的非私有成员,子类是能继承的。

私有:private

继承后对象的创建:子类的对象是由子类和父类共同完成的。

继承的执行原理:

私有的变量是不能直接访问的,只能通过getter/setter方法进行访问。

k是私有变量,只能自己访问,k通过B的方法去访问并对外开放。

2.权限修饰符

权限修饰符:就是用来限制类中的成员(成员变量、成员方法、构造器、代码块....)能够被访问的范围。

public是公开完全暴露的意思。

protected:在任意包下的子类里。

我们用到的最多的是private和public。

3.单继承、Object类、方法重写

Java 是单继承的,Java中的类不支持多继承,但是支持多层继承。

Object类是所有类的父类。

Object类:Object类是java所有类的祖宗类,我们写的任意一个类,其实都是Object类的子类或子孙类。

方法重写:

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求的时候,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这个就称为方法重写。

注意:重写后,方法的方法,Java会遵循就近原则。

方法重写的概念:

子类写了一个方法名称,形参列表与父类某个方法一样的方法,去覆盖父类的该方法。

申明不变,重新实现。

Override的注解:

用来检测当前的方法,是否是重写的方法,起到校验的作用。

方法重写的注意事项:

私有方法不能被重写(父类私有成员子类是不能继承的)

子类方法访问权限不能更低(public->默认->私有)

子类中访问其他成员遵循就近原则

如果指定访问某个成员变量:

局部变量跟成员变量冲突的时候,我们可以使用shis。this代表的是当前对象。

如果要找父类的成员变量,我们就使用super。super代表父类。

4.子类构造器

子类构造器的特点:子类的全部构造器,都会先调用父类的构造器,再执行自己。

子类会继承父类的数据,可能还会使用父类的数据。所以,子类初始化之前,一定先要完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认就是super();

package cn.ensource.d14_extends_constructor; class F{    public F() {        System.out.println("F类构造器执行了!");    }} class Z extends F{    public Z() {        super();        System.out.println("Z类无参构造器执行了!");    }     public Z(String name) {        super();        System.out.println("Z类有参构造器执行了!");    }}  public class Test {    public static void main(String[] args) {        // 目标:先认识子类构造器的特点,再掌握子类构造器的应用场景        Z z1 = new Z();        Z z2 = new Z("播妞");    }}

执行结果:

可见,不管是子类有参构造器,还是子类无参构造器,都是先调用父类构造器,然后再执行子类构造器。

其实,在子类构造器中,默认会有一个super()存在,不管你调用,还是不调用,都调用这个方法。

super:代表父类存储空间的标识。可以理解为父类对象的引用。

子类构造器可以通过调用父类构造器,把对象中包含父类这部分的数据先进行初始化赋值,再回来把对象里包含子类这部分的数据也进行初始化赋值。

然后t.getter方法,都是到子类和父类中调用相应的的getter方法。

补充知识:

this(...)调用兄弟构造器。

在任意类的构造器中,都可以通过this(...)去调用该类的其他构造器。

5.多态和final、常量

多态是在继承/实现情况下一种现象,表现为:对象多态和行为多态。

同一个对象,在不同时刻表现出来的不同形态。

多态的前提:

要有继承/实现关系

要有方法的重写

要有父类引用指向子类对象。

多态的一个注意事项:

多态对对象、行为的多态,Java中的属性(成员变量)不谈多态。

多态中成员访问特点(记忆):

成员访问特点:

成员变量:编译看父类,运行看父类;

成员方方法:编译看父类,运行看子类;

多态中的成员转型:

向上转型:

父类引用指向子类对象就是向上转型。

向下转型:

格式:子类 对象名 = (子类型)父类引用。

final关键字:final是最终的意思。可以修饰类、方法、变量。

修饰类:该类就被称为最终类,特点是不能被继承了。

修饰方法:该方法是最终方法,特点是不能被重写了。

修饰变量:该变量只能被赋值一次。

常量:使用了static final修饰的成员变量就称为常量。

作用:通常用于记录系统的常量信息。

注意:常量建议名称全部大写,多个单词下划线连接。

6.抽象类和接口概述

抽象类:

当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类。

在Java中有一个abstract,它是抽象的意思,可以用它修饰类、成员方法。

package cn.ensource.d4_abstract; // 抽象类public abstract class A {    // 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体    public abstract void run();}

认识接口:Java提供了一个关键字Interface,用这个关键字我们可以定义一个特殊的结构:接口。

注意:接口不能创建对象,接口是用来被类实现(implements)的,实现接口的类称为实现类。

一个类可以实现多个接口(接口可以理解为干爹),实现类实现多个接口,必须重写全部接口的全部抽象方法,否则实现类需要定义成抽象类

7.内部类和

1、 内部类:

是类中五大成分之一(成员变量、方法、构造函数、内部类、代码块),如果一个类定义在另一个 类的内部,这个类就是内部类。

场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。

内部类的四种形式:

成员内部类:了解

静态内部类:了解

局部内部类:了解

匿名内部类:重点

匿名内部类:(重点)

就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字。

匿名内部类:(重点)

就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字。

package d3_inner_class3; public class Test {    public static void main(String[] args) {        // 目标:掌握匿名内部类,并掌握其作用        Animal a = new Cat();   // 创建子类对象        a.cry();     }} class Cat extends Animal {     @Override    public void cry() {        System.out.println("喵喵~");    }} abstract class Animal {    public abstract void cry();}

匿名内部类有啥特点:

匿名内部类本质上就是一个子类,并会立即创建出一个子类对象。

匿名内部类有啥作用、应用场景?

可以更方便创建出一个子类对象。

匿名内部类通常作为一个参数传递给方法。


http://www.ppmy.cn/embedded/161749.html

相关文章

15、深度学习-自学之路-反向传播程序展示、激活函数的应用,反向权重的更新、2层神经网络的应用,输入输出相关性的理解。

这个里面要学习和展示的内容会比较多,需要好好的认真思考 第一个要思考的就是:输入和输出相关性的理解,我们先拿一层的神经网络来说明一下, 输入有2个因素,对应有两个权重,输出有一个结果。 输入的两个因…

Mockito从入门到精通教程大纲(基于JUnit 5)

Mockito从入门到精通教程大纲(基于JUnit 5) 第一章:环境准备与基础概念 单元测试核心原则 测试金字塔(单元/集成/端到端测试)为什么需要Mock?依赖隔离的重要性 环境搭建 JUnit 5 Mockito 5 依赖配置&…

【测试开发】Python+Django实现接口测试工具

PythonDjango接口自动化 引言: 最近被几个公司实习生整自闭了,没有基础,想学自动化又不知道怎么去学,没有方向没有头绪,说白了其实就是学习过程中没有成就感,所以学不下去。出于各种花里胡哨的原因&#xf…

服务器绑定 127.0.0.1 和 0.0.0.0 的区别

前言 IP 地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的 IP 地址。 绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口,该接口只处理本机上的数据,…

C语言基本概念————讨论sqrt()和pow()函数与整数的关系

本文来源:C语言基本概念——讨论sqrt()和pow()函数与整数的关系. C语言基本概念——sqrt和pow函数与整数的关系 1. 使用sqrt()是否可以得到完全平方数的精确的整数平方根1.1 完全平方数的计算结果是否精确?1.2 为什么不会出现误差(如 1.99999…

vi 是 Unix 和 Linux 系统中常用的文本编辑器

vi是 Unix 和 Linux 系统中常用的文本编辑器,它有几种不同的模式,其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行,以下是一些常用的vi命令来控制光标位置: • h,j,k,l:分别用于将光标向左、向下、向…

Word成功接入DeepSeek详细步骤

原理 原理是利用Word的VBA宏,写代码接入API。无需下载额外插件。 步骤一、注册硅基流动 硅基流动统一登录 注册这个是为了有一个api调用的api_key,有一些免费的额度可以使用。大概就是这个公司提供token,我们使用这个公司的模型调用deepsee…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述&#x…