当前位置: 首页 > news >正文

[java基础]面向对象(五)

访问控制修饰符:--------------保护数据的安全(隐藏数据、暴露行为),实现封装

  • public:公开的,任何类

  • private:私有的,本类

  • protected:受保护的,本类、派生类、同包类

  • 默认的:什么也不写,本类、同包类--------------------------java不建议

    注意:

    1. 访问权限由低到高依次为:private<默认的<protected<public

    2. 类的访问权限只能是public或默认的,类中成员的访问权限如上4种都可以。

package ooday05;
public class Aoo {public int a;    //任何类protected int b; //本类、派生类、同包类int c;           //本类、同包类private int d;   //本类void show(){a = 1;b = 2;c = 3;d = 4;}
}class Boo{ //-------------------演示privatevoid show(){Aoo o = new Aoo();o.a = 1;o.b = 2;o.c = 3;//o.d = 4; //编译错误}
}package ooday05_vis;
import ooday05.Aoo;
public class Coo { //-------------------演示同包的void show(){Aoo o = new Aoo();o.a = 1;//o.b = 2; //编译错误//o.c = 3; //编译错误//o.d = 4; //编译错误}
}class Doo extends Aoo{ //跨包继承-------------演示protectedvoid show(){a = 1;b = 2; //编译错误//c = 3; //编译错误//d = 4; //编译错误}
}

final:最终的、不能改变的------------单独应用几率低

  • 修饰变量:变量不能被改变

//演示final修饰变量
class Eoo{final int num = 5;void show(){//num = 55; //编译错误,final的变量不能被改变}
}

修饰方法:方法不能被重写

class Foo{final void show(){}void test(){}
}
class Goo extends Foo{//void show(){} //编译错误,final的方法不能被重写void test(){}
}

修饰类:类不能被继承

final class Hoo{}
//class Ioo extends Hoo{} //编译错误,final的类不能被继承
class Joo{}
final class Koo extends Joo{} //正确,不能当老爸,但能当儿子

static:静态的

静态变量:

  • 由static修饰

  • 属于类,存储在方法区中,只有一份

  • 常常通过类名点来访问

  • 何时用:对象所共享的数据

public class StaticVar {int a; //实例变量static int b; //静态变量StaticVar(){a++;b++;}void show(){System.out.println("a="+a+",b="+b);}
}public class StaticDemo {public static void main(String[] args) {StaticVar o1 = new StaticVar();o1.show();StaticVar o2 = new StaticVar();o2.show();StaticVar o3 = new StaticVar();o3.show();System.out.println(StaticVar.b); //常常通过类名点来访问}
}

 

 

静态块:

  • 由static修饰

  • 属于类,在类被加载期间自动执行,一个类只被加载一次,所以静态块也只执行一次

  • 何时用:初始化/加载静态资源/静态变量

public class StaticBlock {static{System.out.println("静态块");}StaticBlock(){System.out.println("构造方法");}
}public class StaticDemo {public static void main(String[] args) {StaticBlock o4 = new StaticBlock(); //加载类时自动执行静态块StaticBlock o5 = new StaticBlock();StaticBlock o6 = new StaticBlock();}
}

静态方法:

  • 由static修饰

  • 属于类,存储在方法区中,只有一份

  • 常常通过类名点来访问

  • 静态方法中没有隐式this传递,所以静态方法中不能直接访问实例成员(实例变量/实例方法)

  • 何时用:方法的操作与对象无关(不需要访问对象的属性/行为)

public class StaticMethod {int a; //实例变量(对象来访问)--------------属于对象的static int b; //静态变量(类名来访问)-------属于类的//方法的操作与对象无关(不需要访问对象的属性/行为)//在say()中需要访问对象的属性a,所以认为say的操作与对象有关,不适合设计为静态方法void say(){System.out.println(a);}//在plus()中不需要访问对象的属性/行为,所以认为plus的操作与对象无关,可以设计为静态方法static int plus(int num1,int num2){int num = num1+num2;return num;}void show(){ //有隐式thisSystem.out.println(this.a);System.out.println(StaticMethod.b);}static void test(){ //没有隐式this//静态方法中没有隐式this传递//没有this就意味着没有对象//而实例变量a必须通过对象来访问//所以如下语句发生编译错误//System.out.println(a); //编译错误,静态方法中不能直接访问实例成员System.out.println(StaticMethod.b);}
}public class StaticDemo {public static void main(String[] args) {StaticMethod.test(); //常常通过类名点来访问}
}

static final常量:应用率高

  • 必须声明同时初始化

  • 常常通过类名点来访问,不能被改变

  • 建议:常量名所有字母都大写,多个单词之间用_分隔

  • 编译器在编译时,会将常量直接替换为具体的数,效率高

  • 何时用:在程序运行过程中数据永远不变,并且经常使用

public class StaticFinalDemo {public static void main(String[] args) {System.out.println(Loo.PI); //常常通过类名点来访问//Loo.PI = 3.1415926; //编译错误,常量不能被改变//1)加载Loo.class到方法区中//2)静态变量num一并存储到方法区中//3)到方法区中获取num的值并输出System.out.println(Loo.num);//编译器在编译时会将常量直接替换为具体的数,效率高//相当于System.out.println(5);System.out.println(Loo.COUNT);}
}class Loo{public static int num = 5; //静态变量public static final int COUNT = 5; //常量(静态常量)public static final double PI = 3.14159;//public static final int NUM; //编译错误,常量必须声明同时初始化

枚举:

  • 是一种引用数据类型

  • 特点:枚举类型的对象数目是固定的,常常用于定义一组常量

  • 所有枚举都继承自Enum类,其中提供了一组方法供我们使用

  • 枚举的构造方法都是私有的

public enum Season {//表示Season的固定的4个对象,都是常量//public static final Season SPRING = new Season("春天","暖和");SPRING("春天","暖和"),SUMMER("夏天","热"),AUTUMN("秋天","凉爽"),WINTER("冬天","冷");private String seasonName;private String seasonDesc;Season(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}public String getSeasonName() {return seasonName;}public void setSeasonName(String seasonName) {this.seasonName = seasonName;}public String getSeasonDesc() {return seasonDesc;}public void setSeasonDesc(String seasonDesc) {this.seasonDesc = seasonDesc;}
}public class EnumDemo {public static void main(String[] args) {Season[] seasons = Season.values(); //获取所有枚举的对象for(int i=0;i<seasons.length;i++){System.out.println(seasons[i]); //输出4个枚举对象(SPRING、SUMMBER、AUTUMN、WINTER)System.out.println(seasons[i].getSeasonName()); //输出枚举的名字属性System.out.println(seasons[i].getSeasonDesc()); //输出枚举的描述属性}Season s = Season.WINTER; //获取SPRING对象System.out.println(s.getSeasonName()+","+s.getSeasonDesc());switch (s){case SPRING:System.out.println("天气"+s.getSeasonDesc()+",放风筝去喽!");break;case SUMMER:System.out.println("天气"+s.getSeasonDesc()+",游戏去喽!");break;case AUTUMN:System.out.println("天气"+s.getSeasonDesc()+"摘苹果去喽!");break;case WINTER:System.out.println("天气"+s.getSeasonDesc()+"打雪仗去喽!");break;}}
}

注:

  • 数据(成员变量)私有化(private)、行为(方法)大部分公开化(public)

  • getter/setter:行业标准

  • 重写的注意事项:派生类中重写方法的访问权限必须大于或等于超类方法的

  • 匿名内部类中不能修饰外面局部变量的值,在匿名内部类该变量会默认为final的

  • 成员变量分两种:

    1. 实例变量:没有static修饰,属于对象的,存储在堆中,有几个对象就有几份,通过引用/对象打点来访问

    2. 静态变量:有static修饰,属于类的,存储在方法区中,只有一份,通过类名打点来访问

  • 工具类:

1)Math:数学工具类,里面封装了很多数学相关的静态方法/工具
2)Arrays:数组工具类,里面封装了很多数组相关的静态方法/工具

相关文章:

[java基础]面向对象(五)

访问控制修饰符&#xff1a;--------------保护数据的安全(隐藏数据、暴露行为)&#xff0c;实现封装 public&#xff1a;公开的&#xff0c;任何类 private&#xff1a;私有的&#xff0c;本类 protected&#xff1a;受保护的&#xff0c;本类、派生类、同包类 默认的&…...

React应用(基于React脚手架)

目录 前言&#xff1a;一、使用create-react-app创建react应用1、什么是 react 脚手架&#xff1f;2. 创建 cli 脚手架方式13. 创建 cli 脚手架方式24. npx:5. react脚手架项目结构6. 功能界面的组件化编码流程&#xff08;通用&#xff09;7. 如何更改脚手架版本 二、React 组…...

Redis(03)List--附有示例

文章目录 reids-listBLMOVEBLMPOPBLPOPBRPOPBRPOPLPUSHLINDEXLINSERTLLENLMOVELMPOPLPOPLPOSLPUSHLPUSHXLRANGELREMLSETLTRIMRPOPRPOPLPUSHRPUSHRPUSHX reids-list 本文介绍了Redis中的表命令。LSET用于设置列表中指定索引位置的元素的值&#xff1b;LTRIM用于按照索引范围修剪…...

openEuler-linux下部署zabbix-超级详细

一、准备工作 下载&#xff1a;zabbix包 地址&#xff1a;下载Zabbix 准备2台openEuler-linux虚拟机&#xff1a; linux-1&#xff1a;当服务器端 IP地址&#xff1a;192.168.100.100 修改hosts文件 [rootzbx ~]# vim /etc/hosts 192.168.100.100 zbx.xx.cn linux-2&…...

nginx 简介 第四章

一、Nginx简介 1、Nginx简介 Nginx&#xff08;特点&#xff1a;占用内存少&#xff0c;并发能力强&#xff09; Nginx是一个高性能的 HTTP 和反向代理服务器。 Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 单台物理服务器可支持30 000&#xff5e;50 000个并发…...

c++ float32 与 float16 互转

背景&#xff1a; 最近用到一块推理加速卡时&#xff0c;推理输入的数据是 float16 类型&#xff0c;而我们平常用到的数据是 float 类型&#xff0c;也就是 float32类型&#xff0c;这需要输入数据时float32 转 float16&#xff0c;解析输出数据时 float16 转 float。 参考&…...

Redis问题

一、认识Redis 1. 什么是 Redis&#xff1f; Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景&#…...

[API]ListList方法集合排序Lambda表达式(四)

List接口&#xff1a; 继承自Collection接口&#xff0c;List集合是可重复集合&#xff0c;并且有序&#xff0c;还提供了一套可以通过下标来操作元素的方法 常见的实现类&#xff1a; ArrayList&#xff1a;内部使用数组实现&#xff0c;查询性能更好(直接下标找到物理地址)、…...

【ChatGPT】无需魔法打开即用的 AI 工具集锦

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...

Choco-slover的使用

一. 相关资料 choco-slover github源代码以及工具下载网址:https://github.com/chocoteam/choco-solverchoco-slover 官网文档:https://choco-solver.org/choco-slover安装eclipse视频:https://www.youtube.com/watch?v=qz6ATkEI_F8视频所采用的资源网址:https://drive.go…...

亚马逊、ebay、temu如何提升产品点击率?测评自养号解析

产品点击率对于店铺销售额的影响至关重要&#xff0c;尤其是在竞争越来越激烈的市场环境中&#xff0c;想要有销量和转化&#xff0c;提高产品listing点击率成为了非常关键的一环。 1. 产品主图 顾客浏览产品时&#xff0c;第一眼看到的就是主图&#xff0c;一张优质的主图更容…...

人工智能的前沿信息获取之使用谷歌学术搜索

谷歌学术是谷歌公司开发的一款专门针对学术搜索的在线搜索引擎[4]&#xff0c;谷歌学术的网址为https://scholar.google.com&#xff0c;界面如图 6‑1所示。使用谷歌学术搜索可以检索会议或者期刊论文。只需要在检索框中输入关键字&#xff0c;然后点搜索按钮即可&#xff0c;…...

PHP快速入门06-类型转换

文章目录 前言一、关于类型转换1.1 自动类型转换1.2 显式类型转换 二、15个常用类型转化示例2.1 将字符串转换为整型2.2 将整型转换为字符串2.3 将浮点型转换为整型2.4 将整型转换为浮点型2.5 将布尔型转换为整型2.6 将整型转换为布尔型2.7 将字符串转换为浮点型2.8 将浮点型转…...

Motion Planning学习笔记一:配置空间、图、图搜索、图遍历

学习高飞博士的路径规划课程所总结的学习笔记。 目录 1、配置空间&#xff08;Configuration Space, C-space&#xff09; 2、图&#xff08;Graphs&#xff09; 3、图搜索&#xff08;Graph Search Basis&#xff09; 3.1、总体框架 3.2、两种基本的图遍历算法 3.3、启…...

C语言中如何判断大小端字节序?

大小端&#xff08;Endian&#xff09;是指多字节整数在内存中存储的方式。在计算机中&#xff0c;一个多字节整数由多个字节组成&#xff0c;而不同的机器和处理器在存储多字节整数时会有两种不同存储方式&#xff0c;分别为大端字节序和小端字节序。 以一个4字节整数0x12345…...

用spring-boot-starter实现事务的统一配置

一、前言 微服务架构下&#xff0c;多个微服务都需要事务操作&#xff0c;如果在每个微服务下都从头配置事务&#xff0c;将非常繁锁。事务配置具有高度的一致性&#xff0c;可以抽取出来&#xff0c;制作starter&#xff0c;在需要配置事务的服务中引入starter依赖即可。 采用…...

C语言中fopen的详细用法

fopen是C语言中用于打开文件的函数&#xff0c;其原型为&#xff1a; FILE *fopen(const char *filename, const char *mode); 其中&#xff0c;filename是要打开的文件名&#xff0c;mode是打开文件的模式。fopen函数返回一个指向FILE类型的指针&#xff0c;该指针指向打开的…...

C语言——学生信息管理系统(数组)

文章目录 一、前言二、目的三、框架1.菜单1.1主菜单1.2子菜单 2.流程图2.1总流程图2.2开始流程图2.3增加学生信息流程图2.4.删除学生信息流程图2.5修改学生信息流程图2.6查询学生信息流程图2.7对学生信息排序流程图 3.思路 四、代码五、演示视频 一、前言 因为最近是在赶进度总…...

【C语言】基础语法1:变量和数据类型

下一篇&#xff1a;运算符和表达式 ❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望大家纠错指正。本专栏将以基础出发…...

linux安装和使用jekins

Jenkins详细安装配置部署--超详细_jenkins安装部署_宝贝富贵猪的博客-CSDN博客 1.安装JDK 2.获取安装包 下载页面&#xff1a;https://jenkins.io/zh/download/ 或者Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 3.安装Jenkins sud…...

STM32F103 SPI+DMA驱动WS2812B的时序实现原理

1. WS2812B_STM32_Libmaple 库深度解析&#xff1a;基于 SPI DMA 的高性能 NeoPixel 驱动实现WS2812B&#xff08;常被称作 NeoPixel&#xff09;是当前嵌入式系统中最主流的单线协议可寻址 RGB LED。其核心挑战在于严格的时序要求&#xff1a;T0H&#xff08;逻辑 0 的高电平时…...

基于Go + gin+gorm+ rag+千问大模型 + pgvector 构建市场监管智能问答智能体

基于Go 千问大模型 pgvector构建市场监管智能问答智能体 一、项目背景 随着"放管服"改革的深入推进&#xff0c;市场监管领域政策法规不断更新&#xff0c;企业和公众对政策咨询的需求日益增长。传统的政策咨询模式存在响应慢、效率低、准确性差等问题&#xff0c;…...

FDS火灾动力学模拟器完整指南:从入门到精通建筑消防安全分析

FDS火灾动力学模拟器完整指南&#xff1a;从入门到精通建筑消防安全分析 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 想要准确预测火灾中的烟雾扩散路径&#xff1f;需要科学评估建筑物的人员疏散时间&#xff1f;F…...

嵌入式LCD轻量级驱动库:双缓冲与脏区域优化

1. 项目概述Lctrl_Lcd是一个面向嵌入式平台的轻量级 LCD 显示控制库&#xff0c;其设计目标并非替代完整的图形框架&#xff08;如 LVGL 或 emWin&#xff09;&#xff0c;而是为裸机&#xff08;Bare-Metal&#xff09;或实时操作系统&#xff08;RTOS&#xff09;环境下的中低…...

论文被吐槽逻辑乱?,有哪些真正实测靠谱的的降AI率工具推荐?

毕业论文降AIGC率&#xff0c;优先选语义重构 去AI痕迹 降查重率的工具&#xff0c;免费与付费结合最稳妥。下面按中文、英文、免费/付费分类推荐&#xff0c;附实测效果与适用场景。 一、中文论文降重工具&#xff08;最常用&#xff09; 1. 千笔AI&#xff08;综合全能首选…...

[特殊字符]Java面试高频:阿里面试官追问——Redis为什么这么快?(3分钟速通版)

一、真实面试场景&#xff08;代入感压迫感&#xff09; 上周&#xff0c;我在做模拟面试辅导时&#xff0c;一个 3 年经验的同学被问到&#xff1a; 面试官&#xff1a;你项目里用到了 Redis&#xff0c;对吧&#xff1f; 那你说一下 —— Redis 为什么这么快&#xff1f; 他…...

构建智能游戏AI的理想训练场:腾讯王者荣耀AI开放环境全解析

构建智能游戏AI的理想训练场&#xff1a;腾讯王者荣耀AI开放环境全解析 【免费下载链接】hok_env Honor of Kings AI Open Environment of Tencent 项目地址: https://gitcode.com/gh_mirrors/ho/hok_env 强化学习研究如何突破理论到实践的鸿沟&#xff1f;如何在真实游…...

高效解决消息撤回问题的RevokeMsgPatcher完整指南

高效解决消息撤回问题的RevokeMsgPatcher完整指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/GitHub_Trendi…...

JavaScript快速入门:10个基础概念让你轻松掌握编程核心

JavaScript快速入门&#xff1a;10个基础概念让你轻松掌握编程核心 【免费下载链接】You-Dont-Know-JS &#x1f4d7;&#x1f4d2; (PT-Br translation) JS Book Series. 项目地址: https://gitcode.com/gh_mirrors/you/You-Dont-Know-JS JavaScript作为现代Web开发的基…...

微信小程序集成通义千问:打造悬浮窗智能对话助手

1. 为什么要在微信小程序里集成通义千问&#xff1f; 最近两年AI对话助手火得一塌糊涂&#xff0c;但大部分应用都是独立APP或者网页版。其实对于很多轻量级场景来说&#xff0c;直接在微信小程序里集成AI助手反而更实用。想象一下&#xff0c;当你在小程序里购物遇到问题时&am…...