IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中static关键字(重点) -> 正文阅读

[Java知识库]Java中static关键字(重点)

static关键字挺重要的,尤其是对于应届毕业生或者是实习生面试,是面试官大都会问的面试题,所以大家好好掌握,本人写的也有点不全面,只是本人的一些理解,希望大家及时指正。

static的简介:

????????static的英语意思是静态的,在类中,用static声明的属性为静态属性,用static声

明的方法为静态方法,举个栗子:

? ? ? ? static int a = 13;//为静态变量

? ? ? ? 我们常见的 public static void main(){}? //就是一个静态方法

? ? ? ? static修饰过之后和不修饰有什么区别呢? 修饰过之后的属性和方法和类的生命周

期是一样的,也可以理解为类在静态的东西就在,类没了静态的东西就没了。

? ? ? ? 也可以给大家举个生活中的栗子,一所学校,只有一个厕所,可以把学生教师当作

一个个对象,学校盖好的时候厕所也是盖好了对吧,总不会校长说学校盖好了,结果厕

所一直在施工,厕所盖好之后就是厕所这个东西,它也不会跑也不会飞,可以理解它为静态的,

一个个学生(也可以理解为对象)去厕所,厕所会变吗?他会变成餐厅吗?不会的,它

还是厕所,他只有在盖学校(可以理解为类)的时候才会初始化,只有当学校(类)塌

了的时候厕所才会没。

【注意事项】:

1.使用static修饰成员变量的时候,只需要记住一种调用方式

类名.属性名字

2.代码中没有创建任何类对象的时候,static修饰的成员变量已经加载。

3.分析内存:只要是static修饰的成员变量,都是在.class【字节码文件】文件,编译阶段,就直接加载到了内存的数据区。该过程是早于对象的创建的,整个数据区静态的成员属性是伴随着整个程序的结束而结束。

4.保存区域:

类对象 堆区。静态的成员属性保存在数据区

这里要强调一下:

  • static修饰的成员变量和方法,从属于类

  • 普通变量和方法从属于对象

  • 静态方法不能调用非静态成员,编译会报错

static关键字的用处

? ? ? ? 那么static的用处是什么呢?

????????为了方便在对象还没有实例化的时候调用属性或者方法

????????被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以

通过类名去进行访问。

????????static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能

静态变量(static修饰的变量)

????????static变量也称为静态变量,静态变量和非静态变量的区别:

????????静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化,和对象没有任何关系,可以直接通过 类名.属性调用。

????????非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

静态方法(static修饰的方法)

????????静态方法也成为static修饰的方法,和对象没有任何关系!由于静态方法不依赖于任何对象就

可以直接访问,因此对于静态方法来说,是没有this的,因为不依附于任何对象,并且由于此特

性,在静态方法中不能访问类的非静态成员变量和非静态方法,因为非静态成员变量和非静态方法

都必须依赖于具体的对象才能被调用。

????????虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是

可以访问静态成员方法和静态成员变量。

????????static方法是属于类的,并非实例对象,在JVM加载类时,就已经存在内存中,不会被虚拟机

GC回收掉(不知道GC的可以看一下jvm中的GC回收机制),所以这样内存负荷会很大,但是非

static方法会在运行完毕后被虚拟机GC掉,减轻内存压力

【注意事项】:

1.静态的成员方法可以摆脱对象束缚,直接使用类名调用静态的成员方法

2.内存分析:静态的成员方法随着.class文件的加载而加载。会被加载到方法区。

这个时候方法的创建要早于对象的创建。

3.静态的成员方法中不能使用非静态的成员属性和非静态的成员方法

4.静态的方法不能被重写

5.静态方法中可以的创建的对象

下附栗子:

class SingleDog {
    //成员属性
    String name;
    int age;
    static int test = 20;//静态的成员属性
    //成员方法
    public void eat () {
        name = "goudan1";
        testStaticMethod();
        System.out.println("单身狗吃狗粮");
    }
    //静态方法
    public static void testStaticMethod () {
        //name = "goudan";
        //因为静态的方法早于对象的创建,非静态的属性非静态方法是对象创建的时候才调用
        System.out.println("静态的成员方法");
        //eat();
    }
}
class XiaoMing extends SingleDog {
//    @Override//重写的严格限制,这个报错证明不是重写的,是你在自己定义的
//    public static void testStaticMethod() {
//        System.out.println("我是子类的静态方法");
//    }
}
public class Demo1 {
    public static void main(String[] args) {
        SingleDog.testStaticMethod();
        SingleDog singleDog = new SingleDog();
    }
}

1、 可以看到当静态方法内调用非静态方法的时候直接就会编译报错。

2、可以看到重写静态方法testStaticMethod()时候,注解也会编译报错,证明不是你重写的

3、可以看到,testStaticMethod这个静态方法是直接通过类来调用的,也可以看到静态方法中可以实例化对象,并且可以掉用对象方法。

?

?

?

?

静态代码块(static代码块)

????????构造方法用于对象的初始化。静态初始化块,用于类的初始化操作。在静态初始化块中不能

直接访问非staic成员,在一个类中执行顺序为:?静态代码块>构造代码块>构造方法

下附栗子:

class StaticPerson {
    public StaticPerson() {
        System.out.println("我是构造方法");
    }
    {
        System.out.println("我是构造代码块");
    }
    static {
        System.out.println("我是静态的代码块");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        StaticPerson staticPerson = new StaticPerson();
    }
}

可以看到,代码中故意把顺序颠倒,但是输出结果为 静态代码块-构造代码块-构造方法,也直接的反应了他们三个在程序中的运行顺序。

?

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:36:58  更:2021-07-30 12:37:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/29 0:29:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码