6.9关键字static,final的使用

news2024/11/24 22:29:16
  1. 关键字:static
    概念
    是java中的一个关键字
    用于修饰成员(成员变量和成员方法)

类属性、类方法的设计思想

概念:
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实
质上的对象,只有通过 new 关键字才会产出对象,这时系统才会分配内存空间
给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无
论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份。
例如例如,所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个
中国人的实例对象中都单独分配一个用于代表国家名称的变量。

请添加图片描述
此外,在类中声明的实例方法,在类的外面必须要先创建对象,才能调用。但
是有些方法的调用者和当前类的对象无关,这样的方法通常被声明为类方法,
由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
这里的类变量、类方法,只需要使用 static 修饰即可。所以也称为静态变量、
静态方法。

1.2 特点(重点)

1.static可以修饰成员变量和方法,但是还可以修饰代码块和内部类
2.被static修饰的资源称为静态资源
3.静态资源随着类的加载而加载,最先加载,优先于对象进行加载
4.静态资源可以通过类名直接调用,也被称作类资源
5.静态被全局所有对象共享,值只有一份
6.静态资源只能调用静态资源
7.静态区域内不允许使用this与super关键字

1.3 练习:static入门案例

创建包: cn.tedu.oop
创建类: TestStatic1.java

package cn.tedu.oop;
/*本类用作静态static的入门案例*/
/*0.被static修饰的资源统称为静态资源
* 静态资源是随着类加载而加载到内存中的,比对象优先进入内存
* 所以静态资源可以不通过对象,直接通过类名调用*/
public class TestStatic1 {
    public static void main(String[] args) {
        //5.通过类名直接调用静态资源
        Fruit.clean();//我们可以通过类名直接调用静态方法,这个IDEA会提示
        System.out.println(Fruit.kind);//我们可以通过类名直接调用静态属性,这个IDEA会提示
        //4.创建水果类的对象
        Fruit f1 = new Fruit();
        Fruit f2 = new Fruit();
        f1.grow();
        f1.clean();//没有提示,需要自己写
        System.out.println(f1.weight);
        System.out.println(f1.kind);//没有提示,需要自己写

        //6.修改普通变量的值
        f1.weight = 6.6;
        System.out.println(f1.weight);//6.6
        System.out.println(f2.weight);//0.0

        /*3.静态资源在内存中只有一份,而且会被全局所有对象共享
        * 所以:不管我们使用哪种方式修改了静态变量的值,使用任何方式来查看
        * 都是静态变量那个刚刚修改了的值*/
        //7.修改静态变量的值
        Fruit.kind = "苹果";
        System.out.println(Fruit.kind);
        System.out.println(f1.kind);
        System.out.println(f2.kind);

        f1.kind = "猕猴桃";
        System.out.println(Fruit.kind);
        System.out.println(f1.kind);
        System.out.println(f2.kind);

        f2.kind = "香蕉";
        System.out.println(Fruit.kind);
        System.out.println(f1.kind);
        System.out.println(f2.kind);
    }
}

//1.创建水果类
class Fruit{
    //2.定义属性
    /*1.可以用static修饰成员变量吗?--可以*/
    static String kind;//品种
    double weight;//重量

    //3.定义方法
    /*2.可以用static修饰方法吗?--可以*/
    public static void clean(){
        System.out.println("洗水果呀洗水果~");
    }
    public void grow(){
        System.out.println("这个果子长的一看就很好吃~");
    }
}

1.4 练习:static静态调用关系

创建包: cn.tedu.oopstatic
创建类: TestStatic2.java


package cn.tedu.oopstatic;
/*本类用于测试静态的调用关系*/
/*总结:
* 1.普通资源既可以调用普通资源,也可以调用静态资源
* 2.静态资源只能调用静态资源*/
public class TestStatic2 {
}
//1.创建老师类
class Teacher{
    //2.定义普通属性与方法
    String name;
    public void teach(){
        System.out.println("正在授课中...");
        /*1.普通资源能否调用静态资源?--可以!!!*/
        System.out.println(age);
        ready();
    }
    //3.定义静态属性与方法
    static int age;
    public static void ready(){
        System.out.println("正在备课中...");
        /*2.静态资源能否调用普通资源?--不可以!*/
        //System.out.println(name);
        //teach();
    }
    public static void eat(){
        System.out.println("正在吃饭中...");
        /*3.静态资源能否调用静态资源?--可以!*/
        System.out.println(age);
        ready();
    }
}


练习:static静态调用关系

创建包: cn.tedu.oopstatic
创建类: TestStatic2.java



package cn.tedu.oopstatic;
/*本类用于测试静态的调用关系*/
/*总结:
* 1.普通资源既可以调用普通资源,也可以调用静态资源
* 2.静态资源只能调用静态资源*/
public class TestStatic2 {
}
//1.创建老师类
class Teacher{
    //2.定义普通属性与方法
    String name;
    public void teach(){
        System.out.println("正在授课中...");
        /*1.普通资源能否调用静态资源?--可以!!!*/
        System.out.println(age);
        ready();
    }
    //3.定义静态属性与方法
    static int age;
    public static void ready(){
        System.out.println("正在备课中...");
        /*2.静态资源能否调用普通资源?--不可以!*/
        //System.out.println(name);
        //teach();
    }
    public static void eat(){
        System.out.println("正在吃饭中...");
        /*3.静态资源能否调用静态资源?--可以!*/
        System.out.println(age);
        ready();
    }
}

总结:请添加图片描述

4. 类的成员之四:代码块

代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类。

在Java中,使用 { } 括起来的代码被称为代码块(Code block)

代码块的分类

根据其位置和声明的不同,可以分为:

局部代码块:用于限定变量生命周期,及早释放,提高内存利用率。
静态代码块:主要用于对静态属性进行初始化。

构造代码块:调用构造方法都会执行,并且在构造方法前执行。

4.1 静态代码块

如果想要为静态变量初始化,可以直接在静态变量的声明后面直接赋值,也可以使用静态代码块。

4.1.1 语法格式

在代码块的前面加 static,就是静态代码块

静态资源随着类的加载而加载,并且只被加载一次,一般用于项目的初始化
特点: 被static修饰,位置在类里方法外

4.1.2 静态代码块的特点
• 可以有输出语句。
• 可以对类的属性、类的声明进行初始化操作。
• 不可以调用非静态的属性和方法。
• 若有多个静态的代码块,那么按照从上到下的顺序依次执行。
• 静态代码块的执行要先于非静态代码块。
• 静态代码块随着类的加载而加载,且只执行一次。

练习:几种代码块的关系

创建包: cn.tedu. block
创建类: TestBlock.java


package cn.tedu.oopstatic;
/*本类用于学习静态代码块*/
/*执行顺序:
* 静态代码块->构造代码块->构造方法【对象创建成功】->局部代码块*/
public class TestStaticBlock {
    public static void main(String[] args) {
        //6.创建对象进行测试
        Person p = new Person();
        Person p2 = new Person();
        //7.触发局部代码块
        p.play();
    }
}

//1.创建Person类
class Person{
    //8.创建静态代码块
    /*位置:类里方法外
    * 执行时机:静态代码块也属于静态资源,随着类的加载而加载,优先于对象加载
    *         并且静态资源只会加载一次
    * 作用:用于加载那些需要第一时间就加载,并且只加载一次的资源*/
    static{
        System.out.println("我是静态代码块");
    }
    //2.创建构造代码块
    /*位置:类里方法外
    执行时机:每次创建对象时被触发,并且优先于构造方法执行
    作用:用于提取所有构造方法的共性功能*/
    {
        System.out.println("我是构造代码块");
    }
    //5.创建构造方法
    public Person(){
        System.out.println("我是无参构造");
    }
    //3.创建普通方法
    public void play(){
        System.out.println("我是一个普通方法");
        //4.创建局部代码块
        /*位置:方法里
        * 执行时机:执行本局部代码块所在的方法时才会执行
        * 作用:用于限制变量的作用范围*/
        {
            System.out.println("我是一个局部代码块~");
        }
    }

}


结论:执行顺序:静态代码块 --> 构造代码块 --> 构造方法 --> 局部代码块

final

3.1 概念

是java提供的一个关键字
final是最终的意思
final可以修饰类,方法,字段(属性)
初衷:java出现继承后,子类可以更改父类的功能,当父类功能不许子类改变时,可以利用final关键字修饰父类。

3.2 特点

被final修饰的类,不能被继承
被final修饰的方法,不能被重写
被final修饰的字段是个常量,值不能被修改
常量的定义形式:final 数据类型 常量名 = 值

被final修饰的类,不能被继承:string就使用的是final类
请添加图片描述

被final修饰的方法,不能被重写:object的getclass方法使用的就是final方法
请添加图片描述

final可以修饰成员变量和局部变量,被final修饰的变量是常量,一旦赋值不能被修改

请添加图片描述

变量可以赋值的地方:显示赋值,代码块赋值,构造器赋值

代码块赋值
在这里插入图片描述

构造器中赋值请添加图片描述

final和static 搭配使用修饰成员变量时,此成员变量称为全局常量

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

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

相关文章

带启动参数的启动idea

-Dspring.profiles.activedev -Dserver.addr192.168.1.153:8848

立即修复!华硕曝路由器的关键漏洞

近日,华硕针对多种路由器型号的漏洞,发布了安全固件更新,并敦促客户立即更新设备或限制WAN访问,以保证其设备安全。 华硕方面表示,新发布的固件中包含九个安全漏洞的修复程序,包括高漏洞和关键漏洞。其中最…

ZYNQ——锁相环(PLL)实验

文章目录 一、介绍二、添加时钟 IP三、设计源代码四、仿真测试五、添加 ILA IP六、分配引脚七、板上验证八、示波器输出九、问题汇总 一、介绍 ZYNQ开发板上只有一个50MHz的时钟输入,如果要用到其他频率的时钟,就需要通过FPGA芯片内部集成的PLL(Phase L…

认识磁盘及磁盘的读写原理

认识磁盘 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk&…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境,需要执行以下步骤: 1、安装 Python CentOS 7 自带的 Python 版本较老,建议使用 EPEL 库或源码安装 Python 3。例如,使用 EPEL 库安装 Python 3: sud…

【C语言初阶】循环语句的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话,建议先看看下面两篇博客哦&#…

普通人接了人生第一单

大家好,我是 “秋意零” ,全网同名(某平台多了一个数字0 “如:秋意零0”)。 你,相信天上掉馅饼吗? 40 分钟赚 150 你敢信? 现在我突然有点信了,为什么呢?请…

ESP-C3入门19. RSA算法加密、解密的实现

ESP-C3入门19. RSA算法加密、解密的实现 一、概述二、重要函数1. mbedtls_pk_parse_public_key和mbedtls_pk_parse_key函数原型:函数参数: 2. mbedtls_pk_encrypt函数原型:函数参数:函数功能: 三、实现过程1. CMakeLis…

@Param注解的用法

1、使用Param注解的原因 在 Mapper接口中,当方法的参数为多个字面量类型,此时mybatis会将这些参数存储在一个Map集合中,以两种方式进行存储 1、以arg0.arg1…为键,以参数为值2、以param1,param2…为键,以…

解读Linux常用命令使用方法

文章目录 1.前言1.1 定义1.2 特点 2.常用命令介绍2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm2.8 cp2.9 mv2.10 man(联机手册)2.11 vim2.12 grep2.13 ps2.14 netstat 1.前言 1.1 定义 Linux是一套免费使用和自由传播的类Unix操作系统&#xf…

【百套源码】HTML5期末大作业 - 各类网页作业源码合集

文章目录 持续更新文章记录1️⃣ 个人介绍类相关源码1.1 html实现个人简历1.2 科技风个人简历1.3 网站风个人简历1.4 多种风格个人主页模板1.5 html好看的个人简历明星版1.6 专属个人主页-系列11.7 专属个人主页-系列21.8 专属个人主页-系列31.9 专属个人主页-系列41.10 专属个…

uniapp和springboot微信小程序开发实战:前端架构之微信小程序主页实现

文章目录 主页效果前端代码后端实现主页效果 前端代码 具体代码实现如下: <template><view><!--首页轮播图--><view class="uni-banner-wrap"><swiper class="swiper" circular :indicator-dots="indicatorDots" …

数字信号处理11:变换

之前好长一段时间都在写软著、写一些结课作业&#xff0c;就断断续续的在学&#xff0c;很少有时间把东西串起来&#xff0c;前些博文主要就是讲的说&#xff0c;做这个Z变换&#xff0c;今天就主要来看看其他的变换&#xff0c;当然&#xff0c;最重要的还是傅里叶变换&#x…

有哪些优秀好用的网站SEO文章采集软件?

有哪些优秀好用的网站SEO文章采集软件?Ai智能采集文章操作教程及txt转Word教程#资源变现 #资源采集 我为什么会死磕seo并利用采集站seo赚到了第一个100W&#xff1f; 两个原因&#xff1a; 第一就是seo就是目前网络上免费的获取精准用户最牛逼&#xff0c;最有效的引流吸粉手…

linux下express+puppeteer安装部署并用PM2守护进程

背景 承上篇 puppeteer-不需重构&#xff0c;无痛加强vue单页面应用的SEO&#xff0c;提升百度收录排名,是在本地nginx部署前端&#xff0c;本地另起express服务进行测试&#xff0c;下面我们来讲讲如何部署express到linux服务器&#xff0c;并用PM2守护进程。 node 16.14.1 p…

java 学习交流社区平台系统Myeclipse开发mysql数据库web结构jsp编程计算机servlet网页项目

一、源码特点 JSP 学习交流社区平台系统 是一套完善的系统源码&#xff0c;对理解JSP java serlvet dao bean MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系统主要采用B/S模式开发。 研究的基本内…

wsl中docker自启动

前言 wsl -l -v # 查看 wsl 的状态 wsl -t Ubuntu # 关闭指定版本 wsl -d Ubuntu # 启动指定版本 启动 docker 通过命令 ps -p 1 -o comm 我们知道我们用的是 init&#xff0c;故我们将 systemd 命令修改为 SysV init命令。 ps -p 1 -o comm 更换命令&#xff0c;用SysV in…

NLP作业02:课程设计报告

作业头 这个作业属于哪个课程自然语言处理这个作业要求在哪里NLP作业02&#xff1a;课程设计报告我在这个课程的目标实现基于Seq2Seq注意力机制的聊天机器人这个作业在哪个具体方面帮助我实现目标问题的提出&#xff0c;资料的查找参考文献1.简说Seq2Seq原理以及实现 2.序列到…

Android加载大图策略,防止OOM

前言 Android中图片以位图&#xff08;Bitmap&#xff09;的形式存在&#xff0c;位图常见的格式有.png、.jgp、.bmp、.gif。在加载图片的过程中常见的就是OOM&#xff08;Out of Memory&#xff09;内存溢出。 内存溢出是系统会给APP分配内存也就是Heap Size值。当APP占用的内…

含多类型充电桩的电动汽车充电站优化配置方法(matlab代码)

目录 1 主要内容 目标函数 约束条件 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第三章《含多类型充电桩的电动汽车充电站优化配置方法》&#xff0c;本章选择3种典型的电动汽…