Java面向对象编程高阶(一)

在这里插入图片描述


Java面向对象编程高阶(一)

  • 一、关键字static
    • 1、static修饰属性
    • 2、静态变量与实例变量的对比
    • 3、static修饰方法
    • 4、什么时候将属性声明为静态的?
    • 5、什么时候将属性声明为静态的?
    • 6、代码演示

一、关键字static

static用来修饰的结构:属性、方法、代码块、内部类;

1、static修饰属性

方式一:按照数据类型:基本数据类型、引用数据类型
方式二:按照类中声明的位置:

  • 成员变量:按照是否使用static修饰进行分类

    • 使用static修饰的成员变量:静态变量、类变量
    • 不使用static修饰的成员变量:非静态变量、实例变量
  • 局部变量:方法内、方法形参、构造器内、构造器形参、代码块内

2、静态变量与实例变量的对比

个数

静态变量:在内存空间中只有一份,被类的多个对象所共享
实例变量:类的每一个实例都保存着一份实例变量

内存位置

静态变量:jdk之前,存放在方法区;jdk7之后存放在堆空间
实例变量:存放在堆空间的对象实体中

加载时机:

静态变量:随着类的加载而加载,由于类只会加载一次,所以静态变量也只有一份。
实例变量:随的对象的创建而加载。每个对象拥有一份实例变量。

调用者:

静态变量:可以被类直接调用、也可以被对象调用
实例变量:只能使用对象调用

消亡时机:

静态变量:随着类的卸载而消亡
实例变量:随着对象的消亡而消亡

3、static修饰方法

随着类的加载而加载
可以通过“类.静态方法”的方式直接调用静态方法
静态方法内可以调用静态的属性和静态的方法;(属性和方法的前缀使用的是当前类,可以省略)
不能调用非静态的属性和非静态方法。

在这里插入图片描述
static修饰的方法内,不能使用this和super

补充:在类的非静态方法中,可以调用当前类中的静态结构(属性、方法)或非静态结构(属性、方法)

4、什么时候将属性声明为静态的?

判断当前类的多个实例是否能够共享此成员变量,且成员变量的值是相同的
开发中我们常将一些常量声明为静态的。例如:Math中的PI

5、什么时候将属性声明为静态的?

方法内操作的变量如果是静态变量(而非实例变量)的话,则此方法建议声明为静态方法。

6、代码演示

package com;/*** package:com** @Author jimmy-yan* @Create 2024/10/26 22:21*/
public class ChinsesTest {public static void main(String[] args) {Chinese c1 = new Chinese();c1.name = "kobe";c1.age = 19;c1.nation = "china";Chinese c2 = new Chinese();c2.name = "jimi";c2.age = 20;System.out.println(c1);System.out.println(c2);System.out.println(c1.nation);  //chinaSystem.out.println(c2.nation);  //chinac2.nation = "CNA";System.out.println(c1.nation);  //CNASystem.out.println(c2.nation);  //CNA}
}class Chinese {//非静态变量、实例变量String name;int age;//静态变量、类变量static String nation;@Overridepublic String toString() {return "Chinese{" +"name='" + name + '\'' +", age=" + age +'}';}public void eat(String food) {System.out.println("我喜欢吃" + food);}public static void show() {System.out.println("我是中国人");//todo 调用静态结构System.out.println("nation=" + nation);method1();//todo 调用非静态结构
//        System.out.println("name="+name);
//        eat("饺子");}public static void method1() {System.out.println("我是静态测试方法");}public void method2() {System.out.println("我是非静态测试方法");}}
package com;/*** package:com** @Author jimmy-yan* @Create 2024/10/26 23:15*/
public class CircleTest {public static void main(String[] args) {Circle c1 = new Circle();System.out.println(c1);Circle c2 = new Circle();System.out.println(c2);System.out.println(Circle.total);Circle c3 = new Circle();System.out.println(c3);System.out.println(Circle.total);}}class Circle {double radius;int id;  //编号static int total; //创建实例的个数public Circle() {this.id = init;init++;total++;   //todo}public Circle(double radius){this();this.radius=radius;}// todo 加static,实现自动给id赋值的基数private static int init = 1001;@Overridepublic String toString() {return "Circle{" +"radius=" + radius +", id=" + id +'}';}
}

案例:编写一个类实现银行账户的概念,包含的属性有:账号、密码、存款余额、利率、最小余额,定义封装这些属性的方法,账号要自动生成。编写主类,使用银行账户类,输入、输出3个存储的上述信息。
考虑:哪些属性可以设计成static属性

package com;/*** package:com** @Author jimmy-yan* @Create 2024/10/27 20:05*/
public class AccountTest {public static void main(String[] args) {Account acc1 = new Account();System.out.println(acc1);Account acc = new Account("kobe", 666666);System.out.println(acc);}
}class Account {int id;String account;int password;double deposit_balance;static double rate;static double minimum_balabce;static int init = 1000;public Account() {init++;id = init;}public Account(String account, int password) {this();this.account = account;this.password = password;}@Overridepublic String toString() {return "Account{" +"id=" + id +", account='" + account + '\'' +", password=" + password +", deposit_balance=" + deposit_balance +'}';}
}
Account{id=1001, account='null', password=0, deposit_balance=0.0}
Account{id=1002, account='kobe', password=666666, deposit_balance=0.0}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883513.shtml

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

相关文章

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

VAE中的“变分”什么

写在前面 VAE(Variational Autoencoder),中文译为变分自编码器。其中AE(Autoencoder)很好理解。那“变分”指的是什么呢?—其实是“变分推断”。变分推断主要用在VAE的损失函数中,那变分推断是什么&#x…

P11228 [CSP-J 2024] 地图探险(民间数据)

原题链接​​​​​​ 这道题挺简单的&#xff0c;就是把题中所给的条件换成代码就行了&#xff0c;题解感觉不知道咋写&#xff0c;注释都放在代码里了&#xff0c;非常清楚。 //注释非常清楚 #include<bits/stdc.h> using namespace std; const int N 1e3 10; //字…

MobileNetV2实现实时口罩检测tensorflow

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【Informer模型复现项目实战】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【…

著名AI人工智能的未来应用讲师培训师唐兴通数字经济大数据工业4.0数字化转型AIGC大模型培训讲师

《大数据与人工智能的未来应用》培训课程大纲 一、培训内容简介 本课程旨在帮助学员深度理解大数据与人工智能&#xff08;AI&#xff09;如何为未来商业和行业带来革命性变革。课程紧贴前沿科技&#xff0c;从数据采集、分析到AI应用开发&#xff0c;全方位解析大数据和AI如…

docker环境装gitlab遇到的几个问题

1.运行起gitlab容器后总是间歇性的报出502、500等错误页面&#xff0c;&#xff0c;根本无法正常使用 解决&#xff1a;经过查看日志发现总是报writing value to /dev/shm/gitlab/puma/gauge_all_puma_14-0.db failed with unmapped file"这个错误&#xff0c;去容器中df…

深入浅出:ProcessPoolExecutor 入门指南

深入浅出&#xff1a;ProcessPoolExecutor 入门指南 什么是 ProcessPoolExecutor&#xff1f;为什么要使用 ProcessPoolExecutor&#xff1f;ProcessPoolExecutor 的基本用法1. 导入模块2. 创建进程池3. 提交任务4. 获取任务结果5. 示例代码代码解析运行结果 注意事项总结 在现…

51c~目标检测~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12377509 一、总结 这里概述了基于深度学习的目标检测器的最新发展。同时&#xff0c;还提供了目标检测任务的基准数据集和评估指标的简要概述&#xff0c;以及在识别任务中使用的一些高性能基础架构&#xff0c;其还涵盖了…

从本地到云端:跨用户请求问题的完美解决方案

对于某些单个请求或响应中含有多个用户信息的服务&#xff0c;SDK提供了一套基于统一的UCS拆分和聚合的解决方案供开发者使用。 请求拆分 对于跨用户服务的请求&#xff0c;我们提供了两个处理方案&#xff1a; 【1】根据用户信息拆分请求&#xff1a; 场景&#xff1a;请求内…

Docker | images镜像的常用命令总结

命令总结 1. 帮助启动类命令基本命令systemctl status dockerdocker infodocker --help 2. 镜像命令docker images删除镜像出现错误 docker searchdocker pull xxx[:TAG]docker images -adocker images -qdocker system dfdocker rmi -f xxxxxdocker rmi -f $(docker images -q…

推荐系统中的AB测试

在现代互联网平台中&#xff0c;推荐系统起着至关重要的作用&#xff0c;无论是视频平台、社交网络还是电商网站&#xff0c;推荐系统都能够帮助用户找到最感兴趣的内容。为了不断优化推荐效果&#xff0c;AB测试&#xff08;A/B Testing&#xff09;作为评估新算法或功能改进的…

go语言多态性(接口interface)的使用

前言 在Go语言中&#xff0c;接口类型&#xff08;interface&#xff09;完全可以作为一个函数的参数。这是Go语言多态性的一个重要体现&#xff0c;允许函数接受任何实现了接口中定义的方法的类型的实例。 一、接口&#xff08;interface&#xff09;定义 type Reader inte…

Qt 学习第十四天:线程与多线程

1024程序员快乐&#xff0c;如果这博客让你学习到了知识&#xff0c;请给我一个免费的赞❤️ 父子线程演示 一、创建界面文件 LCDnumber 二、创建mythread类&#xff0c;继承QObject 三、在MyThread.h文件做修改&#xff0c;并且加上函数声明 引入头文件&#xff0c;改变继…

实战:大数据冷热分析

实战&#xff1a;大数据冷热分析 冷热分析&#xff08;Hot and Cold Data Analysis&#xff09;的目的主要在于优化存储系统的性能和成本。通过识别并区分访问频率和存储需求不同的数据&#xff0c;可以采取适当的存储策略&#xff0c;进而提高系统的效率和用户体验。终极目的…

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

PyTorch中如何进行向量微分、矩阵微分、计算雅各比行列式

文章目录 摘要Abstract 一、计算雅各比行列式二、向量微分三、矩阵微分总结 摘要 本文介绍了在PyTorch中进行向量微分、矩阵微分以及计算雅各比行列式的方法。通过对自动微分&#xff08;Autograd&#xff09;功能的讲解&#xff0c;展示了如何轻松实现复杂的数学运算&#xf…

【MySQL】运维篇—MySQL安装与配置:MySQL的安装与初始配置

安装和配置MySQL是数据库运维的基础&#xff0c;正确的安装和配置可以确保系统的稳定性和安全性。 在本节中&#xff0c;将详细介绍如何在不同平台上安装和配置MySQL&#xff0c;包括Windows、Linux&#xff08;Ubuntu&#xff09;和macOS。每个示例都将包括详细的步骤和代码注…

unity3d——PlayerPrefs day01——基础知识点

Unity3D中的PlayerPrefs是一个用于存储和读取玩家数据的公共类&#xff0c;它提供了一种简单、轻量级的数据存储解决方案。以下是关于PlayerPrefs的所有知识点&#xff1a; 一、基本概念与工作原理 定义&#xff1a;PlayerPrefs是Unity3D提供的一种本地持久化数据存储方式&am…

代码编辑组件

代码编辑组件 文章说明核心代码运行演示源码下载 文章说明 拖了很久&#xff0c;总算是自己写了一个简单的代码编辑组件&#xff0c;虽然还有不少的bug&#xff0c;真的很难写&#xff0c;在写的过程中感觉自己的前端技术根本不够用&#xff0c;好像总是方案不够好&#xff1b;…

Java 集合交集判断

Java 集合交集判断 一. 使用 retainAll()方法二. 使用 removeAll() 方法与判断集合大小三. 使用 Stream 流式处理四. 使用 Collections.disjoint() 方法五. 总结六. 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续…