5.java基础之static、类加载过程

static修饰符

  1. 修饰属性:静态的属性不属于任何对象,全类及其对象共用,可以用类名直接调用
  2. 修饰方法:静态的方法可以直接用类名调用,和对象无关。静态方法只能访问静态成员和静态方法,非静态方法可以调用静态方法
  3. 静态方法只能被子类的的静态方法覆盖,而且没有多态(因为对引用调用静态方法,等价于对引用的类型调用静态方法),静态修饰符和抽象修饰符不能在一起使用
  4. 静态初始代码块在类加载的时候执行一次

    类加载

    类加载:当JVM第一次使用一个类的时候,需要提取这个类的字节码文件,获取类的信息并保存起来
    类加载过程(顺序):

  • 如果需要先加载父类的静态代码块,再加载子类的静态代码块;
  • 再加载父类的初始化代码块进行初始化和调用构造方法;
  • 最后加载子类的初始化代码块进行初始化和调用构造方法
    (总结:创建类时、先递归的从基类到派生类加载静态代码块,再依次初始化属性和调用构造方法)
    加载类的时机:①当第一次创建对象时;②第一次访问类的静态成员时

原文地址:https://www.cnblogs.com/linanana/p/12075343.html

时间: 2024-10-10 04:25:32

5.java基础之static、类加载过程的相关文章

Java基础知识之类加载器

1.类加载器定义 1.1类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类.通过该实例的newInstance()方法可以创建出一个该类的对象. 1.2类的生命周期: 类从加载到虚拟

Java基础之static关键字的用法

Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量(也称为类变量) 方法(也称为类方法) 代码块 嵌套类         修饰变量 被static修饰的变量称作静态变量或类变量:没有被static修饰的变量,称为实例变量.静态变量在内存中只有一个拷贝(节省内存),JVM只为静态变量分配一次内存,在类加载的过程中完成静态变量的内存分配(存储在"方法区

Java基础之static关键字

static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途.static可以用来修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能.但是在Java中切记:static是不允许用来修饰局部变量. static方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有th

java虚拟机(JVM) 一 类加载过程

java虚拟机学习一 挖一个大坑有时间就去填,先来一张图来自公众号@芋道源码,大概会根据这张图去搜索相关知识并学习(图比较大,建议放大或者下载查看) 加载过程 可分为三个主要过程:加载(Loading)→链接(Linking)→初始化(Initialization).此过程中的连接又分为三个过程:验证(Verification)→准备(Preparation)→监听(Resolution) 之后的过程为使用(Using)和卸载(Unloading)下面来分别分析各个过程中所完成的事情. 1.加载

一、Java基础之static关键字

static关键字可以用来修饰变量.方法.代码块以及内部类. 静态资源从JVM的类加载机制角度来说,它是在类首次被初始化时加载到方法区,而非静态资源需要类new出对象的时候被加载到堆栈里.如:使用Class.forName("xxx")方法初始化某个类来加载静态资源,同样的,在new出对象前会确保该类被初始化了. static变量: 静态变量被所有对象共享,在内存中只有一份.故,被任意对象修改该静态变量后,会影响到所有对象. (PS:在多线程中需要多注意共享资源的使用.) static

【Java基础】static关键字相关

static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用this,super关键字. 主方法(main)是静态的. 看了上面是不是想睡觉了,单纯的概念是挺烦人的,那下面让我们在实际代码中来加深对他们的认知. 方法的调用可以分为两种: 对象调用: 对象.方法(实参) 类调用: 这个方法所在类的名字.方法(实参)//前提是这个方法必须被static修饰. 没有使用

Java 基础之 static 静态

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

Java基础(十)--static关键字

static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存到内存中,在内存中只保存一份 实例变量是属于对象的,在创建对象的时候进行初始化,每个对象的实例变量是互斥的,不会相互影响 PS:static是不允许用来修饰局部变量,无论是方法.静态块.代码块 static方法: public class A{ private static int i = 1; p

java基础之static(静态)

静态的属性.方法等属于类而不是对象. 静态的方法能够由类直接调用,不须要将类实例化. 本篇主要说明:1.态的代码.成员变量要比构造方法先运行. 2. 子类的构造方法会默认去调用父类的不带參数的构造方法,假设父类不提供不带參数的构造方法,则子类的构造方法要显示使用super(param),去调用父类的带參数的构造方法 下面代码,能够将凝视掉的内容放开,或增改參数类型.參数定义的位置等,然后运行main看看打印结果,就会更加明确:静态的代码(块).成员变量要比构造方法先运行. /** * autho