java基础6(黑马)

news2025/2/12 6:02:17

一、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.coloradmin.cn/o/2296684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…

【Prometheus】MySQL主从搭建,以及如何通过prometheus监控MySQL运行状态

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

百问网imx6ullpro调试记录(linux+qt)

调试记录 文章目录 调试记录进展1.开发板相关1.1百问网乌班图密码 1.2 换设备开发环境搭建串口调试网络互通nfs文件系统挂载 1.3网络问题1.4系统启动1.5进程操作 2.QT2.1tslib1.获取源码2.安装依赖文件3.编译 2.2qt移植1.获取qt源码2.配置编译器3.编译 2.3拷贝到开发板1.拷贝2.…

人脸识别与人脸检测技术

人脸识别技术,作为一种基于人的脸部特征信息进行身份识别的生物识别技术,近年来在人工智能和计算机视觉技术的推动下取得了显著进展。它利用摄像机或摄像头采集含有人脸的图像或视频流,自动在图像中检测和跟踪人脸,进而对检测到的人脸进行一系列计算和分别判断。这一技术不…

ansible使用学习

一、查询手册 1、官网 ansible官网地址:https://docs.ansible.com 模块查看路径:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin 2、命令 ansible-doc -s command二、相关脚本 1、服务…

基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试

基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试 1. 引言 在计算机视觉领域,图像分类是一个经典的任务。本文将详细介绍如何使用 PyTorch 实现一个树叶分类任务。我们将从数据准备开始,逐步构建模型、训练模型,并在测试…

【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计FIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程) 设计IIR滤波器 MATLAB配置 设计步骤 首先在命令行窗口输入"filterDesigner",接着就会跳出以下界面&#xf…

如何在本地部署deepseek?

1、打开ollama官网,点download(下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe,一直点下一步即可。 3、winR 输入cmd,打开命令提示符,输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…

AJAX项目——数据管理平台

黑马程序员视频地址: 黑马程序员——数据管理平台 前言 功能: 1.登录和权限判断 2.查看文章内容列表(筛选,分页) 3.编辑文章(数据回显) 4.删除文章 5.发布文章(图片上传&#xff0…

MarsCode AI插件在IntelliJ IDEA中使用

文章目录 前言一、MarsCode是什么?二、下载三、使用1、登录2、操作界面3、生成代码4、解释代码5、注释代码6、生成单测7、智能修复8、代码补全 总结 前言 随着 AI 技术浪潮席卷而来,各类 AI 工具呈爆发式涌现,深度融入我们的日常与职场&…

如何将网站提交百度收录完整SEO教程

百度收录是中文网站获取流量的重要渠道。本文以我的网站,www.mnxz.fun(当然现在没啥流量) 为例,详细讲解从提交收录到自动化维护的全流程。 一、百度收录提交方法 1. 验证网站所有权 1、登录百度搜索资源平台 2、选择「用户中心…

C# OpenCV机器视觉:SoftNMS非极大值抑制

嘿,你知道吗?阿强最近可忙啦!他正在处理一个超级棘手的问题呢,就好像在一个混乱的战场里,到处都是乱糟糟的候选框,这些候选框就像一群调皮的小精灵,有的重叠在一起,让阿强头疼不已。…

生信云服务器:让生物信息学分析更高效、更简单【附带西柚云优惠码】

随着生物信息学的快速发展,基因组测序、单细胞分析等复杂任务逐渐成为研究者们的日常工作。然而,个人电脑在处理这些任务时往往面临性能瓶颈,如内存不足、运算速度慢等问题,导致分析任务频繁失败或崩溃。为了解决这一难题&#xf…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客,通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

Flink-序列化

一、概述 几乎每个Flink作业都必须在其运算符之间交换数据,由于这些记录不仅可以发送到同一JVM中的另一个实例,还可以发送到单独的进程,因此需要先将记录序列化为字节。类似地,Flink的堆外状态后端基于本地嵌入式RocksDB实例&…

快速部署 DeepSeek R1 模型

1. DeepSeek R1 模型的介绍 DeepSeek R1 模型是专为自然语言处理(NLP)和其他复杂任务设计的先进大规模深度学习模型 ,其高效的架构设计是一大亮点,能够更高效地提取特征,减少冗余计算。这意味着在处理海量数据时&…

数据库系统概念第六版记录 四

1.sql组成 SQL 是最有影响力的商用市场化的关系查询语言。SQL 语言包括几个部分: 数据定义语言(DDL) ,它提供了定义关系模式、删除关系以及修改关系模式的命令。 数据操纵语言(DML) ,它包括查询语言,以及往数据库中插入元组、从数据库中删…

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展,以DeepSeek为代表的大语言模型(LLM)正在逐步渗透到传统硬件开发领域。在FPGA(现场可编程门阵列)和IC(集成电路)开发这一技术密集型行业中,DeepSeek凭借其…

DeepSeek-V3 的核心技术创新

DeepSeek-V3 的核心技术创新 flyfish DeepSeek-V3 的核心技术创新主要体现在其架构设计和训练目标上,通过 多头潜在注意力(MLA)、DeepSeekMoE 架构、无辅助损失的负载均衡策略 和 多 Token 预测训练目标(MTP) 1. 多…

【Elasticsearch】监控与管理:集群监控指标

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…