专业做网站优化/电商网站图片
1.static 静态变量
package com.itheima.a01staticdemo01;public class Student {private String name;private int age;public static String teacherName;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public void study() {System.out.println(name+"在学习");}public void show(){System.out.println(name+","+age+" ,"+teacherName);}
}
package com.itheima.a01staticdemo01;public class StudentTest {public static void main(String[] args) {//static修饰的techername共享//类名调用变量Student .teacherName="小陈老师";Student s1 = new Student("张三",18);s1.study();s1.show();Student s2 = new Student("李四",26);s2.study();s2.show();}
}
静态变量是随着类的加载而加载的,优先于对象的
对象s1提供地址值访问静态区的变量,如图 s1访问静态区,就是通过地址0X0011这个地址线找到了静态区的变量teachername
2.静态方法和工具类
package com.itheima.a01staticdemo02;
public class ArrutilTest {public static void main(String[] args) {//测试工具类的二个方法是否正确int[]arr={1,2,3,4,5};String str = Arrutil.pirintArr(arr);System.out.println(str);double[]arr1={1.1,2.2,3.3,4.4,5.5};double avg = Arrutil.getAverage(arr1);System.out.println(avg);}
}
package com.itheima.a01staticdemo02;public class Arrutil {//私有化构造方法//目的:为了不让外界创建他的对象private Arrutil(){}//需要定义为静态的,方便调用public static String pirintArr(int []arr){StringBuffer sb=new StringBuffer();sb.append("[");for(int i=0;i<arr.length;i++){if(i==arr.length-1){sb.append(arr[i]);}else{sb.append(arr[i]+",");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr){double avg=0;for(int i=0;i<arr.length;i++){avg+=arr[i];}return avg/=arr.length;}
}
package com.itheima.a01staticdemo03;import java.util.ArrayList;public class Test {public static void main(String[] args) {//1.创建一个集合用来存储学生对象ArrayList<Student> list = new ArrayList<>();//2.创建3个学生对象Student s1=new Student("zhangsan",18,"男");Student s2=new Student("lisi",19,"男");Student s3=new Student("wangwu",20,"女");//将三个学生对象添加在集合里list.add(s1);list.add(s2);list.add(s3);//4.调用工具类的方法int ageMax = Studentutil.getAgeMax(list);System.out.println(ageMax);}
}
package com.itheima.a01staticdemo03;import java.util.ArrayList;
import java.util.List;public class Studentutil {private Studentutil() {}public static int getAgeMax(ArrayList<Student> list) {int max=list.get(0).getAge();for (int i = 1; i < list.size(); i++) {//list.get(i)集合里的每一个元素 ,每个元素是一个学生对象,我们还需getAge获取到年龄之后再进行比较int tmpAge = list.get(i).getAge();if (tmpAge > max) {max = tmpAge;}}return max;}}
package com.itheima.a01staticdemo03;public class Student {private String name;private int age;private String gender;public Student() {}public Student(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return gender*/public String getGender() {return gender;}/*** 设置* @param gender*/public void setGender(String gender) {this.gender = gender;}public String toString() {return "Student{name = " + name + ", age = " + age + ", gender = " + gender + "}";}
}
3.总结
this表示当前地方调用的地址值
比如图里的s1和s2就是方法调用者, 所以说s1的地址和this的地址一样
我们平常写javabean类的时候是因为变量的名字一样没有加this关键字,严格的讲应该加this
比如说这里 this.show2() ,执行s1.show1()的时候 我们是调用者s1调用了show1的方法,然后show1的方法里面s1调用了show2()方法
静态区没有this关键字
静态区的方法不能调用成员的变量 也就是实例变量
因为静态区没有this关键字 调用show方法的时候没有对象调用方法
非静态区的变量通过对象能找到静态区的变量 teachername
一、static关键字是什么?
static是静态的意思,是一个修饰符,就像是一个形容词,是用来形容类,变量,方法的。在声明static关键字时,可以在前面加上static修饰,用static修饰的成员变量称做类变量(static变量、静态变量)
二、加了static关键字有什么用?
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问
static还有一个很关键的作用就是可以通过static来构建一个静态代码块,在这个静态代码块中,你可以将一些变量初始化,在程序加载的时候static代码块是优先加载的,因此可以说成是用来形成静态代码块以优化程序性能.
三、static静态变量和实例变量
说了一些static关键字的基本理念和它的作用,空谈不行,要将其应用到实例化代码中,接下来讲讲静态变量和实例变量的声明
1、两种变量的声明
- 比方说我们下面定义一个System类🎄
class System{int name; //姓名int num; //编号static int onlineNumber; //在线人数
}
- 可以看出,这里的姓名和编号都是属于普通的实例成员变量,但是对于在线人数onlineNumber,前面却加了static关键字,表明其是一个静态变量
注意:只要成员变量可以用static关键字修饰,普通的局部变量不可以,是非法的
实例变量就是非静态区的成员变量
2、两种变量的区别
对于实例变量,改变其中一个对象的实例变量不会影响其他对象的实例变量,因为它们在堆内存中是一块块独立的区域,各自有各自的内存,是互不相干的;但是你通过任何对象去修改一个static修饰的成员变量,都可以将其修改,改变其中一个对象的类变量会影响其他对象的这个类变量,通俗一点来讲就是对象共享类变量
在Java中,当程序执行的时候,类的【字节码文件】会被加载到内存中,如果类没有创建对象,则类的成员变量不会被分配内存,但对于类变量,也就是静态变量,它有在堆中有一个专属的静态变量区,,当JVM虚拟机将字节码加载到内存时,就会为这个onlineNumber在线人数在堆区中分配出一段空间用于放置💡
当你去通过类定义对象的时候,这个时候才会在堆内存中为不同的对象分配不同的内存空间,上面我们说过,所有对象的类变量都是相同的一块内存空间,光这么说太抽象了,我们来看个
【堆栈内存原理分布图】
- 然后在配合一个示例,大家可以先对照着我前面讲的把这个逻辑理一遍🔍
public class User {//static修饰的成员变量,内存中只有一份,可以被共享public static int onlineNumber = 16;//静态成员变量,直接用类名访问//实例成员变量 - 用对象访问private String name;private int age;public static void main(String[] args) {//直接用类名访问,不用对象//1.类名.静态成员变量System.out.println(User.onlineNumber);//2.对象名.实例成员变量User u = new User();//System.out.println(User.name); 不能用类名去访问实例成员变量u.name = "张三";u.age = 21;System.out.println(u.name);System.out.println(u.age);System.out.println("-----------");u.onlineNumber++; //新来了一个人User u2 = new User();u2.name = "李四";u2.age = 22;System.out.println(u2.name);System.out.println(u2.age);System.out.println("-----------");u2.onlineNumber++; //体现了共享的特点System.out.println(u.onlineNumber);System.out.println(User.onlineNumber);System.out.println(onlineNumber);//同一个类中静态成员变量的访问可以省略类型}
}
这个是运行结果
每个对象都指向堆区中的一块内存地址,每一块内存地址都是独立的,互不干扰,但是后面可以看出,两块不同的堆区内存均指向同一块静态变量区的地址,这就很好地印证了我上面说的那一点,所有对象的类变量都是相同的一块内存空间,也就是对象调用静态变量都能用.
因为对象调用的时候是在静态区调用的
- 从运行结果可以看出,通过下面两条语句,看运行结果,都可以实现在线人数的递增,这就印证了对象共享类变量这句话📖
u.onlineNumber++;
u2.onlineNumber++;
- 有一点要注意的是这句代码是不可行的,上面讲到过,当还没有通过类去构建对象的时候,是不会在堆内存中为其分配空间的,也就是说,这个时候堆内存中完全没有name这个变量,那你去直接用类名访问的话,是在访问哪个对象的姓名呢?
- 有一点要注意的是这句代码是不可行的,上面讲到过,当还没有通过类去构建对象的时候,是不会在堆内存中为其分配空间的,也就是说,这个时候堆内存中完全没有name这个变量,那你去直接用类名访问的话,是在访问哪个对象的姓名呢?
//System.out.println(User.name); 不能用类名去访问实例成员变量
- 好,我们讲本小块的最后一个知识点,就是如何去访问这个静态成员变量,一共是有下述三种方法,这三种方法就对应最后的这三句代码
①类名.静态成员变量(推荐)
②对象名.静态成员变量(不推荐)
③同一个类中,访问静态成员可以省略类名不写 -
System.out.println(u.onlineNumber);System.out.println(User.onlineNumber);System.out.println(onlineNumber);//同一个类中静态成员变量的访问可以省略类型
四、static静态方法和实例方法
1、两种方法的声明
//静态方法 - 实现通用功能
public static int getMax(int x,int y){return x > y ? x : y;
}//实例方法 - 直接访问对象的实例成员
public void speak(){name = "张三";System.out.println(name + "在说话");
}
- 通过以上代码,相信大家对静态方法和实例方法有了一个基本的认识,在声明方法时候
- 如果你想要实现一个通用功能,那就用静态方法;
- 但如果你想要直接访问对象的实例成员,则用实例方法
注意: static关键字需要放在方法的类型之前,而不可以乱放置;而且不可以用static修饰构造方法
2、两种方法的区别
- 上面在说到类加载时的字节码文件会被加载到内存中,而方法中存在一个入口地址,类的实例方法不会被分配入口地址,只有当该类创建了对象后,类中的实例方法才会被分配入口地址。而且当你创建了一个对象之后再继续创建对象时,不会再为实例方法分配入口地址,通俗地说就是,方法的入口地址所有对象共享
- 在实例方法中你不仅可以操作实例变量,而且可以操作类变量,也就是static变量
- 对于实例方法,它还可以调用类中其他的实例方法和类方法(不包括构造方法)
public static void main(String[] args) {//1.类名.静态成员方法System.out.println(Student.GetMax(10, 30));System.out.println(GetMax(50, 99)); //可不用类名//study(); 需要对象名去访问//2.对象名.实例方法Student st = new Student();st.name = "孙悟空";st.study();//3.对象名.静态成员方法(语法可行,但是不推荐)System.out.println(st.GetMax(1,9));
}
- 从上述代码我们可以看出静态成员方法和实例成员方法的调用格式,对于静态成员方法,它的格式有两种,我们也是推荐第一种,因为系统也是支持第一种调用方法,
- ①类名.静态成员方法
②对象名.静态成员方法(语法可行,但是不推荐)
对于这个,大家可以记住一句话
对于静态的东西,直接用类名调用即可,不会出错
- 而对于这个实例成员方法,则只能用对象名去调用,因为其是属于对象的一部分,和实例成员变量一样,不可以用类名去调用,更不能直接调用,因为具体的对象其所对应的具体方法,内部的成员变量 也是相互对应的
五、static关键字注意事项
1、静态方法只能访问静态的成员,不可以’直接’访问实例成员
2、实例方法可以访问静态的成员,也可以访问实例成员
3、静态方法中是不可以出现this关键字的
- 最后一点,就是对于静态方法中不可以出现this关键字,因为this代表的是当前对象,静态方法中是可以不用声明实例对象的,但是this可以出现在实例方法中,就如上一个注意事项中的最后一句代码,this代表正好是这个对象所对应的地址,就可以访问其所对应的成员变量
相关文章:

面向对象的进阶---static
1.static 静态变量 package com.itheima.a01staticdemo01;public class Student {private String name;private int age;public static String teacherName;public Student() {}public Student(String name, int age) {this.name name;this.age age;}/*** 获取* return n…...

React useContext
useContext 允许父组件向其下层无论多深的任何组件提供信息,而无需通过 props 显式传递。 // 1. LevelContext.js 创建 context,将其从文件中导出 import { createContext } from react; export const LevelContext createContext(1);// 2. Section.j…...

【尚庭公寓SpringBoot + Vue 项目实战】用户管理(十五)
【尚庭公寓SpringBoot Vue 项目实战】用户管理(十五) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】用户管理(十五)1、业务介绍2、接口实现2.1、根据条件分页查询用户列表2.2、根据ID更新用户状态 1、业务介绍 用户管理共包含两…...

laravel中如何向字段标签添加工具提示
首先,您可以使用 轻松自定义字段标签->label()。我相信您知道这一点。但您知道吗……标签输出未转义?这意味着您也可以在标签中包含 HTML。 为了尽快实现上述目标,我只是采取了一个快速而粗糙的解决方案: CRUD::field(nickna…...

高考志愿填报,选专业应该考虑哪些因素?
这是一个复杂的社会,各种影响就业的因素层出不穷,也从未断绝。对于高考生而言,高考刚结束,短暂的放松后,就必须考虑自身以后应该就读什么专业,如果不对就读专业进行评估,仔细挑选,毕…...

图书管理系统代码(Java)
1、运行演示 QQ2024528-205028-HD 详细讲解在这篇博客:JavaSE:图书管理系统-CSDN博客 2、所建的包 3、Java代码 3.1 book包 3.1.1 Book类代码 package book;/*** Created with IntelliJ IDEA.* Description:* User: dings* Date: 2024-05-13* Time:…...

Nginx反向代理Kingbase数据库
本文适用于开发人员学习运维领域知识,主要内容为在个人理解的基础上对企业级开发中所使用的Nginx和数据库kingbase相关使用,并附上Nginx反向代理kingbase数据库的相关配置的操作方式,感谢阅读 为什么是nginx代理kingbase数据库服务端 生产环…...

没有字幕的高清爆款视频素材去哪里找?无字幕无水印素材网站分享
在寻找无水印高清视频素材的道路上感到困惑?欢迎来到今天的分享,我将为您介绍一些海外优质的素材网站,以及国内极具特色的“蛙学府”。不论您是短视频制作的新手还是老手,这些网站都将为您的创意注入新活力。 蛙学府网 蛙学府网不…...

Java23种设计模式(一)
前言 这2个月来,重新出发,从java开发需要的数据库、查询日志工具、开发工具等的安装、环境配置,再到后面的基础学习、数据库学习、扩展学习(maven、mq、设计模式、spring 系列等等),边学边记录,…...

Spring Boot集成websocket实现webrtc功能
1.什么是webrtc? WebRTC 是 Web 实时通信(Real-Time Communication)的缩写,它既是 API 也是协议。WebRTC 协议是两个 WebRTC Agent 协商双向安全实时通信的一组规则。开发人员可以通过 WebRTC API 使用 WebRTC 协议。目前 WebRTC…...

StableSwarmUI 安装教程(详细)
文章目录 背景特点安装 背景 StableSwarmUI是StabilityAI官方开源的一个文生图工作流UI,目前处于beta阶段,但主流程是可以跑通的。该UI支持接入ComfyUI、Stable Diffusion-WebUI。其工作原理就是使用ComfyUI、Stable Diffusion-WebUI或者StabilityAI官方…...

利用Unity XR交互工具包实现简易VR菜单控制——6.18山大软院项目实训
初始设置 在Unity项目中,首先需要确保安装了XR插件和XR交互工具包。这些工具包提供了对VR硬件的支持,以及一系列用于快速开发VR交互的组件和预设。 脚本概览 本示例中的menuController脚本附加在一个Unity GameObject上,这个脚本负责监听用…...

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测
区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-ABKDE卷积神经网络自适应…...

【机器学习】第6章 支持向量机(SVM)
一、概念 1.支持向量机(support vector machine,SVM): (1)基于统计学理论的监督学习方法,但不属于生成式模型,而是判别式模型。 (2)支持向量机在各个领域内的…...

hive笔记
文章目录 1. 如何增加列2. 如何查看表的具体列的数据类型3. 如何drop一个表 1. 如何增加列 alter table your_table_name add columns (your_column_name varchar(255));2. 如何查看表的具体列的数据类型 DESCRIBE your_table_name3. 如何drop一个表 drop table your_table_…...

kali - 配置静态网络地址 + ssh 远程连接
文章目录 观前提示:本环境在 root 用户下kali 配置静态网络地址打开网络配置文件 kali 配置 ssh 远程连接 观前提示:本环境在 root 用户下 kali 配置静态网络地址 打开网络配置文件 vim /etc/network/interfaces出现一下内容 # This file describes …...

Redis常见数据类型及其常用命令详解
文章目录 一、Redis概述二、Redis常用命令1.通用命令1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5…...

JMU 数科 数据库与数据仓库期末总结(4)实验设计题
E-R图 实体-关系图 E-R图的组成要素主要包括: 实体(Entity):实体代表现实世界中可相互区别的对象或事物,如顾客、订单、产品等。在图中,实体通常用矩形表示,并在矩形内标注实体的名称。 属性…...

Go版RuoYi
RuoYi-Go(DDD) 1. 关于我(在找远程工作,给机会的老板可以联系) 个人介绍 2. 后端 后端是用Go写的RuoYi权限管理系统 (功能正在持续实现) 用DDD领域驱动设计(六边形架构)做实践 后端 GitHub地址 后端 Gitee地址 3. 前端 本项目没有自研前端,前端代…...

八股系列 Flink
Flink 和 SparkStreaming的区别 设计理念方面 SparkStreaming:使用微批次来模拟流计算,数据已时间为单位分为一个个批次,通过RDD进行分布式计算 Flink:基于事件驱动,是面向流的处理框架,是真正的流式计算…...

HTTP/2 协议学习
HTTP/2 协议介绍 HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。…...

“先票后款”条款的效力认定
当事人明确约定一方未开具发票,另一方有权拒绝支付工程款的,该约定对当事人具有约束力。收款方请求付款方支付工程款时,付款方可以行使先履行抗辩权,但为减少当事人诉累,收款方在诉讼中明确表示愿意开具发票࿰…...

CSDN 自动上传图片并优化Markdown的图片显示
文章目录 完整代码一、上传资源二、替换 MD 中的引用文件为在线链接参考 完整代码 完整代码由两个文件组成,upload.py 和 main.py,放在同一目录下运行 main.py 就好! # upload.py import requests class UploadPic: def __init__(self, c…...

常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别
在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。 包含如何配置输出日志到当前目录下的log.txt文件及控制台的示例,…...

【PX4-AutoPilot教程-TIPS】离线安装Flight Review PX4日志分析工具
离线安装Flight Review PX4日志分析工具 安装方法 安装方法 使用Flight Review在线分析日志,有时会因为网络原因无法使用。 使用离线安装的方式使用Flight Review,可以在无需网络的情况下使用Flight Review网页。 安装环境依赖。 sudo apt-get insta…...

探究Spring Boot自动配置的底层原理
在当今的软件开发领域,Spring Boot已经成为了构建Java应用程序的首选框架之一。它以其简单易用的特性和强大的功能而闻名,其中最引人注目的特性之一就是自动配置(Auto-Configuration)。Spring Boot的自动配置能够极大地简化开发人…...

Fedora40的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash
bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash Fedora40Workstation版的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, rootfedora:~# ll …...

重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装)
重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装) 6、场景整合6.1 Docker 6、场景整合 6.1 Docker 官网 https://docs.docker.com/查看自己的 CentOS配置 cat /etc/os-releaseStep 1: 安装必要的一些系统工具 sudo yum insta…...

cve_2014_3120-Elasticsearch-rce-vulfocus靶场
1.背景 来源:ElasticSearch(CVE-2014-3120)命令执行漏洞复现_mvel 漏洞-CSDN博客 参考:https://www.cnblogs.com/huangxiaosan/p/14398307.html 老版本ElasticSearch支持传入动态脚本(MVEL)来执行一些复…...

吴恩达2022机器学习专项课程C2W3:2.26 机器学习发展历程
目录 开发机器学习系统的过程开发机器学习案例1.问题描述2.创建监督学习算法3.解决问题4.小结 误差分析1.概述2.误差分析解决之前的问题3.小结 增加数据1.简述2.增加数据案例一3.增加数据案例二4.添加数据的技巧5.空白创建数据6.小结 迁移学习1.简述2.为什么迁移学习有作用3.小…...