JAVA基础语法 day07
一、final关键字
1.1final的基础知识
用来修饰类,方法,变量
final修饰类,该类被称为终极类,不能被继承了
final修饰方法,该方法称为终极方法,不能被重写了
final修饰变量,该变量仅能被赋值一次,且必须被赋值一次!
一般来说,用final来修饰工具类,因为它不需要被继承。
public class final_demo1 {/*final 修饰静态成员变量这个变量就成为常量了,用来记住一个固定值,今后不许被修改通常这个值记录一些系统的配置信息常量的名称通常全部大写,不同单词用下划线隔开*/public static final String SCHOOL_NAME = "张三"; //使用 类名.静态变量 来访问//final 修饰实例变量 ,通常没有意义,因为这导致类的所有实例的Nick_Name都是一样了public final String Nick_Name = "猪八戒";public static void main(String[] args) {//3.final修饰变量,该变量有且仅有一次赋值/*变量有哪些呢?a:成员变量(写在类中的变量),按有无static修饰又分为静态成员变量,实例成员变量b:局部变量(写在方法中的变量)*///final修饰rate,只能被赋值一次final double rate = 3.14;//rate = 3.01;报错print(2);final_demo1 f1 = new final_demo1();System.out.println(f1.Nick_Name);System.out.println(final_demo1.SCHOOL_NAME);}public static void print(final int z){ // final修饰局部变量z,防止有人在方法当中改z的值//z=3;报错System.out.println(z);}
}
//1.final修饰类,该类不能被继承
final class A{}
//class B extends A{} 报错//final 修饰方法,该方法不能被重写
class C{public final void print(){System.out.println("C");}
}/*class D extends C{@Overridepublic void print(){ // 报错System.out.println("D");}
}*/
final的注意事项:
final修饰基本类型的变量,变量存储的数据不能变(int,double等等)
final修饰引用类型的变量,变量存储的地址不能改变,但地址指向的内容可以改变
数组就是一个引用类型的变量
//final修饰引用类型的变量,地址不能修改,但是地址指向的对象可以修改int[] arr = {1,2,3,4};// arr = {2,3,4,5} 报错,因为修改了地址(一个数组相当于就是一个地址)arr[0] = 8;System.out.println(arr[0]);System.out.println(arr);
1.2常量
使用了 static final 修饰的成员变量就是常量。
通常写一个Constant类,用于存储常量,里面的变量都是被static final修饰的,将这个类中的变量值应用于项目的其他地方
二、单例类(设计模式)
2.1什么是设计模式
设计模式就是一种解决问题的方法,总共有20余种,对应各种软件开发时会遇到的问题
对于设计模式,学习两点:1.解决什么问题,2.怎么写?
2.2单例设计模式
作用:确保某个类只会创建一个对象
写法:
1.把类的构造器私有化
2.定义一个类的变量(静态变量)用来记住一个类的对象
3.定义一个类方法(静态方法),返回对象
饿汉式单例:
//目标:设计单例类
public class A {//2.定义一个静态变量,记住本类唯一的一个对象public static A a = new A();private A (){} //1.私有化构造器。如果不私有化构造器,在外面可以用公开的构造器new无数个A类的实例对象//3.提供一个公开的静态方法,返回这个类的唯一对象public static A getInstance(){ //此处static 后的 A就是返回值类型,跟public static int的含义一样return a;}}
public class test {public static void main(String[] args) {A a1 = A.getInstance();A a2 = A.getInstance();System.out.println(a1);System.out.println(a2); //注意到这俩的地址一样,说明a1,a2是同一个对象}
}
实现单例的方法很多,上面这个是饿汉式单例,指的是拿对象时,对象早已创建好了。
懒汉式单例:拿对象时,才创建这个唯一对象
写法:
1.把类的构造器私有化
2.定义一个静态变量,用来记住类的唯一对象(在这里只定义,不新建)
3.提供一个静态方法,确保返回的是同一个对象(在这个方法中 如果没有才新建)
public class B {//2.私有化定义一个类的静态变量,用来记住单一对象private static B b; // b为变量名, B为返回值类型//1.私有化构造器private B(){}//3.提供一个公开的方法,用来第一次时,new出这个对象public static B getInstance(){if(b == null){b = new B();}return b;}}
三、枚举类
3.1认识枚举类
枚举类是一种特殊类,他的写法如下:
public enum E { //枚举类一般是public的,它不用class新建,而是用enum。 这是新建枚举类的专用词x,y,z; //枚举类的第一行,只能罗列待枚举的对象,后面再写其他成员(方法、对象),这是龟腚//这些名称本质是常量
}
tips:
1.枚举类是最终类,不可被继承
2.枚举类的第一行罗列一些名称,这些都是常量,每个常量都会记住枚举类的一个对象
3.枚举类的构造器是私有的,因此枚举类是一个多例。第一行罗列了几个名称,就只有几个对象,因此若只罗列一个,那枚举类就是个单例类
3.2枚举类的常见应用场景
枚举类可用于信息分类和标志。
public class test {public static void main(String[] args) {run(E.down);}public static void run(E e){switch (e){case E.up:System.out.println("向上移动");break;case E.down:System.out.println("向下移动");break;}}
}
四、抽象类
4.1认识抽象类
使用关键字abstract 修饰 类 或者成员方法,用它修饰类,这个类就是抽象类;用它修饰方法,这个方法就是抽象方法
eg:
public abstract class A{public abstract void test();
}
abstract修饰的抽象方法,只有方法签名(返回值和形参列表),无方法体(就是{ }里面的语句)
tips:
1.抽象类中不一定有抽象方法,但有抽象方法的类必须是抽象类
2.类有的成员,抽象类也可以有(成员变量,成员方法,构造器)
3.抽象类最主要的特点:只能作为父类,而不能创建对象。仅作为一个特殊的父类,让子类去继承
4.如果一个类要继承抽象类,就必须把抽象类的所有抽象方法重写,否则这个类也必须写成抽象类
抽象类的使命就是为了被继承!
4.2使用抽象类的好处
父类知道子类要做的某个行为,但是子类的具体动作不一样,因此父类设计为抽象类,具体的实现交给各个子类。
抽象类是为了多态性而设计的。
//要描述每个动物的叫声,使用抽象类
public abstract class Animal {public abstract void cry();
}
public class Dog extends Animal {@Overridepublic void cry(){System.out.println("旺旺");}
}
4.3 模板方法设计模式
作用:提供一个方法作为完成某类功能的模板,模板方法封装了每个实现步骤,但允许子类提高具体的实现。
提高代码复用,简化字类的设计
五、接口
5.1认识接口
java提供了一个关键字,interface,用来定义接口。
传统接口(jdk8之前):只能定义常量和抽象方法。
注意:接口不能创建对象!!因为他属于抽象类!!
接口是用来被类来实现(implements)的,实现接口的类称为实现类,一个类可以同时实现多个接口。
语法如下:
class 类名 implements 接口1,接口2{}
//使用interface关键字来定义接口
public interface interfaceA {int AGE = 18;//在接口类中,定义常量时的public static final 可以省略不写//默认interface类中的都是常量,因此在定义的时候必须赋值,否则会报错public static final String SCHOOL_NAME = "John";//接口中,定义抽象方法// public void sayHello(){}; 定义具体方法,报错public abstract void Sayhello(); //同样,接口中的public abstract可省略
}
public interface interfaceB {public abstract void SayGoodbye();
}
public class test {public static void main(String[] args) {System.out.println(interfaceA.SCHOOL_NAME);C c = new C();c.SayGoodbye();c.Sayhello();}
}
//C被称为实现类,同时实现了多个方法,由于它继承自接口这个抽象类,因此必须重写接口里的所有抽象方法,否则会报错
//实现类实现多个接口,必须重写完所有接口的所有抽象方法,否则必须定义成抽象类
class C implements interfaceA , interfaceB{@Overridepublic void Sayhello() {System.out.println("hello");}@Overridepublic void SayGoodbye() {System.out.println("goodbye");}
}
5.2接口的好处
1.弥补了类单继承的不足,一个类可以同时实现多个接口,使得类的角色更多,功能更强大
2.让程序面对接口编程,降低代码的耦合性,便于多个程序员实现业务。
5.3 接口新增的几种方法
1.默认方法,用 default修饰
2.私有方法,用 private修饰
3.类方法,public static修饰
public interface A {//1.默认方法,用default修饰,其实就是普通的实例方法,只是在接口这里要加default//默认加上public//如何调用?使用接口的实现类的对象来调用public default void go() {System.out.println("A GO!");print();}//2.私有方法,实际上就是私有的实例方法,private来修饰//如何调用?使用接口中的其他方法调用private void print(){System.out.println("A print");}// 3.静态方法,默认加上public static//如何调用,只能使用当前接口名调用public static void show(){System.out.println("A show");}}
这三种方法自己很少写,会看就行了
5.4接口的几个注意事项
1.接口与接口可以多继承,一个接口可同时继承多个接口。重点
类与类:只能单继承,一个类只能继承另一个类;类与接口:多实现,一个类可实现多个接口
interface A{public void show1();
}
interface B{public void show2();
}
//1.接口与接口可以多继承,一个接口可同时继承多个接口
interface C extends A,B{public void show3();
}//这样一来,假如要同时实现三个接口,只要实现C接口就行了class D implements C{@Overridepublic void show3() {}@Overridepublic void show1() {}@Overridepublic void show2() {}
}
2.一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时既不支持多继承,也不支持多实现 了解
3.一个类继承了父类,又实现了接口,若父类中有同名方法,实现类会优先使用父类的、
4.一个类实现了多个接口,若多个接口中有重名的方法,可以不冲突,这个类重写方法即可(即不要接口的,自己来实现)
相关文章:
JAVA基础语法 day07
一、final关键字 1.1final的基础知识 用来修饰类,方法,变量 final修饰类,该类被称为终极类,不能被继承了 final修饰方法,该方法称为终极方法,不能被重写了 final修饰变量,该变量仅能被赋值…...
ZLMediaKit编译运行
ZLMediaKit-github官网 快速开始 代码依赖与版权声明 MediaServer支持的HTTP MediaServer支持的HTTP HOOK API cd ZLMediaKit mkdir build cd build cmake … && make -j20 cd ZLMediaKit/release/linux/Debug ./MediaServer //./MediaServer -h 查看 //./MediaSe…...
AlmaLinux 9 安装mysql8.0.38
文件下载 https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.39-linux-glibc2.12-x86_64.tar 选择合适系统版本 下载后解压 tar -xvf mysql-8.0.39-linux-glibc2.12-x86_64.tar解压后里面有三个文件夹 使用mysql-8.0.39-linux-glibc2.12-x86_64.tar.xz即可,…...
NLP任务之文本分类(情感分析)
目录 1 加载预训练模型对应的分词器 2 加载数据集 3 数据预处理 4 构建数据加载器DataLoader 5 定义下游任务模型 6 测试代码 7 训练代码 #做(中文与英文的)分类任务,Bert模型比较合适,用cls向下游任务传输数…...
MIMO 2T4R BBU RHUB AAU
MIMO(Multiple-Input Multiple-Output,多输入多输出)是一种无线通信技术,它通过在发射端和接收端使用多个天线来提高数据传输速率和信号质量。"2T4R"是MIMO技术中的一种配置,其中"2T"代表有两个发…...
图说数集相等定义表明“R各元x的对应x+0.0001的全体=R“是几百年重大错误
黄小宁 设集A{x}表A各元均由x代表,{x}中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标故x∈R变为实数yx1的几何意义可是:一维空间“管道”g内R轴上的质点x∈R(x是点的坐标)沿“管道”g平移变为点y…...
只出现一次的数字|||(考察点为位操作符)
目录 一题目: 二思路汇总: 三代码解答: 一题目: leetcode原题链接:. - 力扣(LeetCode) 二思路汇总: 思路:如果直接对数组按位异或,那么最后得到的是a^b&a…...
PMP--三模--解题--81-90
文章目录 13.干系人管理--权力利益方格--基于干系人的职权级别(权力)、对项目成果的关心程度(利益)、对项目成果的影响能力(影响),或改变项目计划或执行的能力,每一种方格都可用于对…...
脚本自动化创建AWS EC2实例+安装ElasticSearch和Kibana+集成OpenTelemetry监控
文章目录 为什么要通过脚本来部署服务器?EC2实例类型硬件选择实例类型的选择内存CPU存储架构操作系统最终的选择 其他配置安全组配置网络配置IAM RoleKey Pair内部域名 书写自动化脚本属性文件EBS配置文件创建EC2实例命令user data 文件OpenTelemetry监控 创建内部域…...
【设计模式-命令】
定义 命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使您能够使用不同的请求、排队请求或记录请求,并支持可撤销的操作。该模式通过将请求与其执行分离,使得请求者和接收者之间…...
【API安全】crAPI靶场全解
目录 BOLA Vulnerabilities Challenge 1 - Access details of another user’s vehicle Challenge 2 - Access mechanic reports of other users Broken User Authentication Challenge 3 - Reset the password of a different user Excessive Data Exposure Challenge …...
HCIP-HarmonyOS Application Developer 习题(四)
1、以下哪个Harmonyos的AI能力可以提供文档翻拍过程中的辅助增强功能? A.文档检测矫正 B.通用文字识别 C.分词 D.图像超分辨率 答案:A 分析:文档校正提供了文档翻拍过程的辅助增强功能,包含两个子功能: 文档检测:能够…...
【Python报错已解决】TypeError: ‘int‘ object is not subscriptable
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...
《OpenCV》—— 指纹验证
用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…...
HBase 性能优化的高频面试题及答案
目录 高频面试题及答案1. 如何通过数据建模优化 HBase 性能?2. 如何优化 HBase 的写入性能?3. 如何通过压缩优化 HBase 的存储性能?4. 如何通过调整 RegionServer 配置优化性能?5. 如何优化 HBase 的读取性能?6. 如何通过使用 HBase 的版本控制优化性能?7. 如何通过使用合…...
excel不经过后台实现解析和预览(vue)
数据流读取和数据解析方面通过xlsx组件 安装命令 npm install xlsx -S 它先将上传的excel变成流,然后再根据流进行下一步处理。这个流可以交给其他组件处理比如我用的预览组件是用了其他组件(vue-office/excel)就是把这个流交给其它组件就…...
html5 + css3(上)
目录 HTML认知web标准vscode的简介和使用注释标题和段落换行和水平线标签文本格式化标签图片图片-基本使用图片-属性 绝对路径相对路径音频标签视频标签超链接 HTML基础列表列表-无序和有序列表-自定义 表格表格-使用表格-表格标题和表头单元格表格-结构标签(了解&a…...
Flask+微信小程序实现Login+Profile
Python代码 首先flask的session用不了,只能用全局变量来实现。 import pymysql from flask import Flask, request, jsonify, session from flask_cors import CORS from flask import make_responseapp Flask(__name__) CORS(app, supports_credentialsTrue) #…...
后缀表达式中缀表达式转后缀表达式
后缀表达式的计算机求值 计算规则 从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 和 栈顶元素),并将结果入…...
Qemu开发ARM篇-7、uboot以及系统网络连接及配置
文章目录 1、uboot及linux版本网络设置1、宿主机虚拟网卡创建2、uboot使用tap0网卡3、启动测试 2、访问外网设置 在上一篇Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作并通过uboot进行挂载启动中,我们制作了AB分区系统镜像,并成功通过uboot加载kernel以及d…...
两数相加leetcode
第一个是测试用例代码,测试的是两个带头的逆序链表相加,并且有反转操作 但是题目要求的是不带头链表直接相加,不需要逆转,输出结果也是逆序的, 题解放在第二个代码中 #include<stdio.h> #include<stdlib.h…...
C0004.Qt中QComboBox设置下拉列表样式后,下拉列表样式无效的解决办法
问题描述 我们平时在使用Qt Creator对控件QComboBox的样式进行设置后,在运行程序启动界面时,发现设置的样式无效,效果如下: /* 设置下拉菜单框的样式 */ QComboBox QAbstractItemView {border: 1px solid rgb(161,161,161); /* …...
AI 对话工具汇总
🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: 前言: 在科技飞速发展的时代,AI 对话正逐渐成为我们获取信息、交流思想的新方式。它以强…...
面试题05.08绘制直线问题详解(考察点为位运算符)
目录 一题目: 二详细思路汇总: 三代码解答(带注释版): 一题目: leetcode原题链接:. - 力扣(LeetCode) 二详细思路汇总: 这里先剧透一下简单版思路哦&…...
埃及 Explained
古埃及,位于尼罗河畔的神秘文明,曾在北非的荒漠中繁荣昌盛。这个充满谜团的王国凭借其宏伟的成就和神秘的文化,数百年来吸引了无数人的好奇心。 埃及人创造了复杂的象形文字,建造了像吉萨大金字塔这样宏伟的建筑,并通…...
【Linux】第一个小程序——进度条实现
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
如何确定光纤用几芯 用光纤与网线区别在哪里
光纤用几芯? 光纤芯数,主要和光纤连接的设备接口和设备的通信方式有关。一般来说,光纤中光芯的数量,为设备接口总数乘以2后,再加上10%~20%的备用数量,而如果设备的通信方式有设备多…...
使用Chrome浏览器时打开网页如何禁用缓存
缓存是浏览器用于临时存储网页资源的一种机制,可以提高网页加载速度和减轻服务器负载。 然而,有时候我们需要阻止缓存中的Chrome浏览器,以便获取最新的网页内容。以下是一些方法可以实现这个目标: 1、强制刷新页面:在C…...
zabbix7.0创建自定义模板的案例详解(以监控httpd服务为例)
前言 服务端配置 链接: rocky9.2部署zabbix服务端的详细过程 环境 主机ip应用zabbix-server192.168.10.11zabbix本体zabbix-client192.168.10.12zabbix-agent zabbix-server(服务端已配置) 创建模板 模板组直接写一个新的,不用选择 通过名称查找模板…...
从零开始Ubuntu24.04上Docker构建自动化部署(五)Docker安装jenkins
安装jenkins 下载 sudo docker pull jenkins/jenkins:lts docker-compose启动 jenkins: image: jenkins/jenkins:lts container_name: compose_jenkins user: root restart: always ports: - 28080:8080 volumes: - /home/jenkins_home/:/var/jenkins_home - /usr/local/bin/d…...
温州网站制作策划/百度信息流广告推广
错误和异常的区别(Error vs Exception)参考文章: (1)错误和异常的区别(Error vs Exception) (2)https://www.cnblogs.com/with-wang/archive/2012/03/24/java_doc_3.html 备忘一下。...
自己做的网站打开显示很慢/百度竞价推广登录入口
文章目录MySQL行锁和表锁表锁行锁注意事项间隙锁总结MySQL行锁和表锁 MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。 MyISAM在执行select时,会自动给所有涉及的表加读锁,…...
wordpress 插件角色/个人网站免费推广
Java的异常 1.Java中所有异常和错误的基类:Throwable Throwable error Exception (检查时异常)(运行时异常) RuntimeException2.Java中的异常分为运行时…...
百度推广图片/福州360手机端seo
一:CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* dataNULL, int stepCV_AUTOSTEP ); mat 指针指向要被初始化的矩阵头. rows 矩阵的行数. cols 矩阵的列数. type 矩阵元素类型. data 可选的,将指向数据指针分配给矩阵头. …...
网站开发毕业论文任务书/seo技术培训岳阳
经过前面22小节,我们已经将自己的博客网站搭建完成了,但是只能在本机通过127.0.0.1:8000进行访问,那么如何才能够让别人通过登录自己的网站,在外网也能够访问自己的博客呢?为了完成这个目的,我们需要做如下…...
网站怎么做伪静态iis7.0/关键词优化顾问
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Android studio 2.3.3 这两天一直在调试一个BUG,具体为通过 NativeC 来处理上层Android Java传递的字节数组 byte[]。通过查阅 Oracle手册 确认JNI 与底层 C 或者 CPP 进行交互的细节。 从Java传递数组…...