当前位置: 首页 > 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…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...