【JavaSE成神之路】一文搞定static关键字

news2024/11/26 9:51:19

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java的static关键字。

1. 我们是怎么使用static关键字的

我们其实一直在用static关键字,比如main方法:

public static void main(String[] args) {

}

static关键字可以用来修饰方法,main方法也是方法。它还可以修饰成员变量。

回到之前Car的例子,我们新增一个价格属性,价格用double类型。

你有没有发现,用static修饰的变量,在IDEA中是斜体的。那么和其他变量有啥区别呢,我们来看一个例子你就明白了。

public class CarTest {
    public static void main(String[] args) {

        Car car1 = new Car();
        car1.price = 200000;
        
        Car car2 = new Car();
        car2.price = 300000;

        System.out.println("car1.price = " + car1.price);
        System.out.println("car2.price = " + car2.price);

    }
}

此段代码中,定义了Car类,创建了两个实例car1和car2,并为car1和car2分别设置了price属性,然后输出了这两个实例的price属性值。

结果:

car1.price = 300000.0

car2.price = 300000.0

代码中其实给出了警告信息:

意思是你用实例对象去访问一个静态变量,编译器对你提出了警告。虽然不影响运行,但是结果和我们预想的有出入,price的值都是30w。

static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。

因为static修饰的变量是类变量,类变量是属于整个类的,与类的实例对象无关,所以不需要实例化对象,可以直接通过类名调用。

对Car类来说,静态的price属性是所有实例对象共享的一块内存,所以不管是car1还是car2,访问的和操作的都是同一块内存。

我们访问静态变量,是可以直接用类名去访问的,比如:

System.out.println("car1.price = " + Car.price);

2.静态方法

static除了可以修饰成员变量,还可以修饰成员方法,典型的就是main方法。

需要注意的是,static修饰的方法只能访问其他静态静态成员变量和静态方法,不能访问普通成员变量和普通方法,也不能访问this关键字。

因为this关键字代表当前对象,而static修饰的方法是所有实例对象共有的,所以this没办法代表其中某一个实例。

#3. 总结

static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。

例子1 - 静态方法访问静态成员变量:

public class Test {
    public static int count = 0; //定义静态变量
    public static void main(String[] args) {
        count++;
        System.out.println("count值为:"+count);
    }
}

例子2 - 静态方法访问其他静态方法:

public class Test {
    public static void printMessage() { //定义静态方法
        System.out.println("Hello World!");
    }
 
    public static void main(String[] args) {
        printMessage(); //通过类名调用
    }
}

当然,在静态方法中,你依然可以用new的方式创建实例对象,然后去调用其普通方法。

public static void test(){
    Car car = new Car();
    car.setBrand("五菱宏光");
    System.out.println(car);
}

3.代码块问题

代码块:代码块是指由花括号括起来的语句块,每当创建类的实例时,代码块都会被执行。

实际作用:可以用来给实例变量赋值,或者调用方法,用来初始化实例变量,提高代码的复用性。

举例:

public class Person {
    private String name;
    private int age;
    { 
        System.out.println("这是代码块"); 
    }
    public Person() {
        System.out.println("这是构造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

静态代码块:静态代码块是指由static关键字和花括号括起来的语句块,只会在类加载的时候执行一次,一般用于初始化类的静态变量。

实际作用:可以用来给类变量赋值,或者调用方法,用来初始化类变量,提高代码的复用性。

举例:

public class Person {
    private static String name;
    private static int age;
    static{ 
        System.out.println("这是静态代码块"); 
    }
    public Person() {
        System.out.println("这是构造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

4.课后作业

1.static关键字的作用是?(多选)

A、修饰类

B、修饰变量

C、修饰方法

D、修饰块

有任何不懂的地方,可以点击下方的“发消息”给我留言。

PS:从这一节开始,欢迎你使用任何你喜欢的IDE完成作业,比如eclipse,IDEA,如果不会使用工具,可以去B站搜索相关的视频进行学习哈。

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

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

相关文章

CSS样式基础内容3

目录 CSS三大特性 层叠性 继承性 行高的继承性 优先级 权重的叠加 CSS盒子模型 border边框 边框的复合写法 表格的细线边框 边框会影响盒子的实际大小 内边距 padding会影响盒子实际大小 网页导航案例 外边距 外边距合并 相邻块元素垂直外边距的合并 清除内外…

go语言实战(猜数字+在线词典+服务器)

go语言实战案例1.猜数字游戏2. 词典2.1 request2.2 response2.3 修改写死的单词为用户可写的word2.4 细节优化2.4.1 防止403、404等状态码2.4.2 增强输出可读性2.5 在线词典的最终代码3.SOCKS5代理服务器3.1 tcp echo server3.2 验证3.3 请求3.4 完整代理实现作业1.修改第一个猜…

cadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产

文章目录cadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产前言备注补充 - CAM350V14.6 - 在win10 22H2下不能正常用ENDcadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产 前言 以前交给板厂gerber文件时, 有一次, 板…

Pandas学习笔记-Day1安装与文件读取

Day1 安装与文件读取了解与安装什么是pandas?安装pandas?pandas数据读取读取mysql数据库了解与安装 什么是pandas? 处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。 安装pandas? 如果…

自动驾驶感知——图像数据处理数学方法

文章目录1. 二值化操作2. 卷积操作3. 均值滤波4. 高斯滤波5. 图像梯度算子5.1 Prewitt梯度算子5.2 Sobel梯度算子5.3 Laplace二阶梯度6. 边缘特征点提取算子7. 基于规则的特征点提取8. 最小二乘拟合方法9. RANSAC曲线拟合10. Hough Transform 霍夫变换11. 基于学习的特征点提取…

图论(4)Floyd算法

一、概述 floyd算法主要作用有:1.找最短路 2.求传递闭包 3.找最小环 4.求出恰好经过k条边的最短路 本文章将介绍floyd求最短路的证明以及以上四个作用的实践。 二、floyd算法求最短路的证明 之前就多次提到过图论与dp问题的联系,floyd算法可以…

Go依赖管理

"做讨厌潮汐的稚童,祈祷月球失踪。"一、背景我们写一个程序,例如输出hello world 或者 一个猜数字游戏,这些用到的单体函数接口,只需要依赖一些原生的SDK即可。但是,面对复杂的实际问题、工程,仅…

使用构建工具创建Vue项目

使用构建工具创建Vue项目一、使用vue-cli脚手架构建vue项目创建步骤:二、使用 Vite构建vue项目创建步骤:一、使用vue-cli脚手架构建vue项目 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 1 通过 vue/cli 实现的交互式…

演讲比赛流程管理系统

1. 演讲比赛程序需求 1.2程序功能 2. 项目创建 创建名为speech_contest的目录名称 3. 创建管理类 功能描述: 提供菜单界面与用户交互 对演讲比赛流程进行控制 与文件的读写交互 3.1 创建文件 在头文件和源文件的文件夹下分别创建speech…

ubuntu 学习笔记

环境:Ubuntu 22.04 桌面版和server版 一、更换国内源,下载更快 1、源文件路径:/etc/apt/sources.list,到这个路径下备份一下源文件。 #备份原有配置文件命令 sudo cp -r /etc/apt/sources.list /etc/apt/sources.list.backup …

C primer plus学习笔记 —— 14、限定关键字(const、volatile、restrict、_Atomic)

文章目录const 关键字修饰变量修饰指针修饰形参修饰全局变量volatile关键字restrict关键字_Atomic关键字(c11)const 关键字 修饰变量 将变量变为只读 const int nochange; nochange 4; //不允许 const int a 5; //没问题const int a[3] {3, 5, 6};…

Hive--14---使用sum() over() 实现累积求和

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Hive中使用over()实现累积求和1.总求和sum(需要求和的列) over(partition by 分组列 )数据准备需求1以地区号网点号币种 为唯一键,求总的金额需求2以地区…

python图像处理(高斯滤波)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在谈高斯滤波之前,我们不妨回顾一下之前谈到的均值滤波和中值滤波。均值滤波,就是对像素点以及周围的8个点计算平均值,然后赋值给新像素点。而中值滤波,则是对像素点及周围的8个…

6. 初识多线程编程

1. 多线程 多线程非常重要,工作中用到的也是非常多,面试时也100%会问多线程。 关于多线程的相关知识,可以参考《计算机操作系统(第四版)》,或者自行百度查看有关文章以及视频都可以,此处不再赘述。 2. python中的多…

常用网址-2023整理

办公&效率人民币大写转换 人民币大写 人民币RMB数字转大写汉字工具我的账单 - 支付宝Bypass - 分流抢票Zen Flowchart - 在线流程图MindMaster - 在线思维导图【抠图】在线抠图软件_AI抠图证件照换底色-稿定设计Visio模板推荐与VisualNet图库转化语音转文字iconfont-阿里巴…

LeetCode动态规划经典题目(九):middle

学习目标: 进一步了解并掌握动态规划 学习内容: 4. LeetCode62. 不同路径https://leetcode.cn/problems/unique-paths/ 5. LeetCode63. 不同路径 IIhttps://leetcode.cn/problems/unique-paths-ii/ 6. LeetCode343. 整数拆分https://leetcode.cn/pro…

人工智能学习06--pytorch06--神经网络骨架nn.Module scipy下载 现有网络模型的使用及修改(VGG16)

神经网络骨架nn.Module 括号里nn.Module表示继承Module类init 初始化 调用父类初始化函数forward scipy下载 pip install scipy -i https://pypi.douban.com/simple/ 现有网络模型的使用及修改(VGG16) pretrained为True时需要下载,在ima…

1. Spring 基础入门

文章目录1. 初识 spring1.1 系统架构1.2 学习路线1.3 核心概念2. IoC 与 DI 入门案例(xml版)2.1 IoC(控制反转)2.2 DI(依赖注入)3. bean 配置3.1 bean 基础配置3.2 bean 别名配置3.3 bean 作用范围配置4. b…

file控件与input标签的属性type=“hidden“标签

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>file控件于与input标签的属性type"hidden"标签</title> </head> <body bgcolor"antiquewhite"> …

k8s中使用Deployment控制器实现升级、回滚、弹性伸缩

前置条件&#xff1a;linux机器已安装k8s集群基于yaml文件创建pod,本次创建pod使用的web.yaml如下apiVersion: apps/v1 kind: Deployment metadata:creationTimestamp: nulllabels:app: webname: web spec:replicas: 2selector:matchLabels:app: webstrategy: {}template:metad…