Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java学习笔记(基础篇)—关键字static和final

java学习笔记(基础篇)—关键字static和final

作者头像
chlinlearn
发布于 2019-07-24 02:55:39
发布于 2019-07-24 02:55:39
35300
代码可运行
举报
文章被收录于专栏:java老实人java老实人
运行总次数:0
代码可运行

一、关键字Static

我们从关键字static可以修饰哪些东西入手,逐一的剖析static的使用和要注意的地方。

1)修饰变量(只能修饰实例变量)----->静态变量

又称为类变量

a)所有类实例共享 b)使用静态变量 类名.变量名 c)静态变量是属于这个类,非静态变量是属于对象 d)代码加载到内存静态变量就已经存在了 e)static变量和实例变量的区别: i)static变量对于每个类而言在内存中只有一个,能被类的所有实例所共享; 实例变量对于每个类的每个实例都有一份,它们之间互不影响; ii)Java虚拟机在加载类的过程中为static变量分配内存, 实例变量在加载完类后创建对象时分配内存; iii)static变量存在方法区,实例变量存在堆区; v)static变量可以直接通过类名访问, 实例变量通过引用类型变量访问;

2)修饰方法====>静态方法

称为类方法

a)调用时使用 类名.方法名(); b)静态方法不能使用非静态的变量 静态方法在类加载的时候就存在了 非静态变量在对象创建的时候才存在的 非静态方法可以访问静态变量 c)静态方法不能被非静态方法重写,静态方法不能被静态方法重写(总之就是不能被 重写) d)静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。既然如此,当前类必须为静态方法提供实现。静态方法属于类。 e)不能使用this关键字和super关键字;(考虑它的生命周期来理解)

this表示的当前对象,而被static修饰的是属于类的,不需要创建对象就可以使用;super是代表父类对象,调用父类的静态方法直接使用类名.方法名就可以。

3)静态初始化块----在类加载时只执行一次

​ 对静态变量进行初始化,当Java虚似机加载类时,就会执行该代码块;被static 所修饰的成员变量和成员方法表明归某个类所有,它不依赖于类的特定实例,被 类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据 区的方法区内定位到它们。而且只会被加载一次。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     static{
         System.out.print("hello static");
     }

4)普通初始化----每创建一个对象都会被调用的

对非静态变量进行初始化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      {
          System.out.print("hello static");
      }

5)静态导入

这个用法一般不太出现,很少使用。

import java.lang.Math; 使用:Math.random()

import static java.lang.Math.*; 使用:random()

6)补充知识

创建一个对象时的类加载步骤或者说顺序: Student student =new Student();猜猜它的执行顺序会是什么?我们来理一理逻辑,子类继承父类,创建一个子类对象首先要有一个父类被创建,Student()构造器里默认有一个super()方法,所有会先初始化父类,然后是初始化子类的部分。下面来看具体的步骤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Student extends Person{
    private static String name;
    private int age;

    public Student() {
        System.out.println("this student constructor");
    }

    static {
        System.out.println("this is student static block");
    }

    {
        System.out.println("hello student");
    }

    public static void main(String[] args) {
        Student stu = new Student();
    }
}

class Person{
    private static int count;
    private String title;

    public Person() {
        System.out.println("this person constructor");
    }
    static {
        System.out.println("this is person static block");
    }

    {
        System.out.println("hello person");
    }
}
  1. 父类初始化静态变量和静态代码块(按先后顺序执行);
  2. 子类初始化静态变量和静态代码块(按先后顺序执行);
  3. 父类初始化非静态变量和非静态代码块(按先后顺序执行);
  4. 父类构造器
  5. 子类初始化非静态变量和非静态代码块(按先后顺序执行);
  6. 子类构造器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//运行结果
this is person static block
this is student static block
hello person
this person constructor
hello student
this student constructor

二、关键字final

1)修饰变量---->常量

​ 变量必须初始化,变量的值不允许修改。 ​ final变量都必须显示初始化, ​ a) 修饰静态变量,只能在定义变量时进行初始化; ​ b) 修饰实例变量,可以在定义变量时进行初始化,或者在构造方法中进行初始 化;

2)修饰方法

​ 该方法不能够被重写

3)修饰类

​ 该类不能够被继承,即不能与abstract同时使用。 ​ String类就是final修饰的类,所有字符串是不能改变的,只能通过拼接创建新的 String对象,这样很浪费内存,所以又有了StringBuilder和StringBuffer;这两 个类后面再解释,可以去思考和看他们的实现源码。

三、思考final、finally和finalize的区别

后面出一篇关于这个的文章,敬请关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java中的final和static关键字详解
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
崩天的勾玉
2021/12/20
1.8K0
java提高篇之关键字static
在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。
哲洛不闹
2018/09/18
3410
java提高篇之关键字static
Java:关于Static静态关键字的那些小事
前言 在Java中,静态 Static关键字使用十分常见 本文全面 & 详细解析静态 Static关键字,希望你们会喜欢 目录 1. 定义 一种 表示静态属性的 关键字 / 修饰符 2. 作用 共用、
Carson.Ho
2019/02/22
4550
Java关键字final、static使用总结
一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。
用户1112962
2018/07/03
8370
Java中static、final关键字【详解】
静态成员变量(被static修饰,属于类、加载一次、内存中只有一份)。直接用 类名 访问即可,因为类只有一个,所以静态成员变量在内存区域中也只有一份,所有的对象都可以共享该变量。
寻求出路的程序媛
2024/03/25
5520
Java中static、final关键字【详解】
JavaSE(三)之static、final、abstract修饰符
一、static修饰符 1.1、static变量         在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量。         静态变量和非静态变量的区别  静态变量属于类的,"可以"使用类名来访问,非静态变量是属于对象的,"必须"使用对象来访问. public class Student{ private static int age; private double score;
用户1195962
2018/01/18
7040
Java基础(十):关键字static、代码块、关键字final
冬天vs不冷
2025/01/21
1390
Java基础(十):关键字static、代码块、关键字final
Java基础--static关键字
不管是平时阅读源代码,还是笔试、面试中,static关键字还是经常被问道,这篇文章主要来重新复习一下该关键字。
河岸飞流
2019/08/08
5040
Java基础--static关键字
Java零基础学习之路(十)Java中static关键字
static是java语言中的关键字,表示“静态的”,它可以用来修饰变量、方法、代码块等,修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。在java语言中凡是用static修饰的都是类相关的,不需要创建对象,直接通过“类名”即可访问,即使使用“引用”去访问,在运行的时候也和堆内存当中的对象无关。
挨踢小子部落阁
2023/03/15
5650
Java零基础学习之路(十)Java中static关键字
Java系列:关于关键字this和static
在C语言中,我们经常会遇到指针,也常常被指针所困扰,毕竟它经常惹程序员头疼。那么在Java中我们便方便多了,只是因为有了this.
小Bob来啦
2022/01/17
2260
Java系列:关于关键字this和static
Java关键字final、static总结与对比
Java关键字final有“不可改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
chenchenchen
2022/03/09
9420
Java关键字final、static总结与对比
static与final的区别
final被修饰的变量为常量一旦赋值不能修改,被修改的方法为最终方法不能被重写,被修饰的类是最终类,不能被继承 static被修饰的变量和方法,为该整个类及其类的对象所共享,一个类或对象修改了被定义的类或方法,其他的也会跟着变量。这就是说被static修饰的是大家共用的。就一块肥皂多个人用,每个人用都会少,而不是像不用static修饰的是每个人有每个人的肥皂,你用自己的和别人没有关系。。
zhangjiqun
2024/12/16
990
Java关键字系列 -- static
在Java代码中,static使用的是比较多的一个关键字,今天就来总结一下static的用法。首先写一段囊括static用法的代码:
叫我阿柒啊
2022/05/09
3050
Java final, static, this, super 关键字总结
this.employees.length:访问类Manager的当前实例的变量。
大鹅
2021/06/16
5110
java中static关键字的作用_Java:Java中static关键字作用
1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来
全栈程序员站长
2022/09/08
8060
Java中的 static
如果我们需要频繁引用某一个类下的方法,比如 ​​java.lang.Math​​​ 类下相关的数据计算类,或者是用于进行单元测试的 ​​org.junit.Assert​​ 类下各种用于断言的方法,就可以采用静态引用,从而可以省去对前边类名的重复书写。
头发还在
2023/10/16
1710
Java常见关键字总结:static,final,this,super
这次复习的知识点是面向对象的关键字static,final,this,super,一些注意的点和知识点。
用户7886150
2020/12/13
5560
JAVA零基础小白学习教程之day09-内部类&权限&final&静态
是内部类的简化写法。它的本质是一个带具体实现的 父类或者父接口的 匿名的 子类对象。
张哥编程
2024/12/13
1470
JAVA零基础小白学习教程之day09-内部类&权限&final&静态
【Java SE学习】Day6 JavaSE面向对象(下)看着三篇就够了
        前面我们已经讲述了面向对象三大特性:封装性、继承性、多态性,讲述了面向对象重要组成部分,今天讲的是面向对象(下),关于static,final,interface,abstart等重要关键字。
小小程序员
2023/02/24
4110
【Java SE学习】Day6 JavaSE面向对象(下)看着三篇就够了
深入理解java中的static关键字
static关键字是摆在刚入行编程语言的小白们面前的一道难题,为什么要用static?使用它有什么好处?修饰方法和修饰变量有什么区别?本文将就java中static关键字的使用方法及注意事项进行深入探讨,一是为了方便自己以后查阅,二也为了与大家交流分享学习的经验。
用户7886150
2020/12/13
1.8K0
相关推荐
Java中的final和static关键字详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验