static静态代码块和静态方法

static关键字

  • static修饰的方法或变量,优先于对象执行,所以内存会先有static修饰的内容,后有对象的内容
  • 可以用来修饰类的成员方法、类的成员变量,还可以编写static静态代码块
  • 修饰变量就是类变量,修饰方法就是类方法
  • 总结:类变量或者类方法,可以直接通过类名.方法名或者变量名进行调用,不用经过对象
    public static class Student{
static int age;
public static String name;
public static void speak() {
System.out.println("唱歌");
}
}
public class Student {
static int age;
public static String name;
public static void speak() {
System.out.println("唱歌");
}
}

static变量也称作静态变量

  • 和非静态变量的区别是,静态变量被所有的对象所共享,在内存中只有一份,它当且仅当在类初次加载时会被初始化。非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
  • static成员变量的初始化顺序按照定义的顺序进行初始化

static方法也称作静态方法

  • 不依赖于任何对象就可以进行访问,类名.方法名
  • 不能访问类的非静态成员变量和非静态成员方法

注意事项

  1. 静态方法不能直接访问非静态变量
  2. 静态方法当中不能使用this
  3. 核心:一个类里面static修饰的不能访问非static修饰的成员或方法,而非static修饰的可以访问static修饰的成员或方法

静态代码块

  • 加载类的时候,静态代码块会被执行一次,且只能执行一次
  • 静态内容优先于非静态内容,所以静态代码比构造方法先执行
  • 使用场景:用来一次性对静态成员变量进行赋值,或者类资源初始化等操作
class Person {
static {
System.out.println("我是静态代码块");
}
}

常考面试题

  记得博主,在一次面试过程中,面试官出了这道题被吊打了。。。静态代码块、构造代码块、构造函数执行顺序

  默认执行顺序为:静态代码块 > 构造代码块 > 构造函数

public class Student {
static {
System.out.println("我是静态代码块");
}
{
System.out.println("我是构造代码块");
}
public Student() {
System.out.println("我是构造函数");
}
}

执行顺序

继承关系时的执行顺序

老师类

class Teacher {
static {
System.out.println("我是【老师】静态代码块");
}
{
System.out.println("我是【老师】构造代码块");
}
public Teacher() {
System.out.println("我是【老师】构造函数");
}
}

学生类继承老师

public class Student extends Teacher{
static {
System.out.println("我是【学生】静态代码块");
}
{
System.out.println("我是【学生】构造代码块");
}
public Student() {
System.out.println("我是【学生】构造函数");
}
}

执行顺序

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

p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }

打印结果:我是【老师】静态代码块我是【学生】静态代码块我是【老师】构造代码块我是【老师】构造函数我是【学生】构造代码块我是【学生】构造函数

p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }
p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }
p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }
p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }
p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }

Java 核心基础之static静态代码块和静态方法的更多相关文章

  1. Java之static静态代码块

    Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public cl ...

  2. Java static 静态代码块、代码块

    简述 static{} 静态代码块,加载类之前执行 {} 代码块,每次new的时候都会被执行 示例 类: public class Student { int age; String name; bo ...

  3. static{}静态代码块与{}普通代码块之间的区别

    先看一个例子: //class A package com.my.test; class A { static { System.out.println("A1:父类静态代码区域" ...

  4. Java-静态关键字Static&静态代码块

    静态成员变量:(static修饰变量) 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类.多个对象共享同一份数据. 静态方法:(static修饰方法) 一旦使用 ...

  5. java基础--java静态代码块和静态方法的区别、static用法

    转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时, ...

  6. java面试基础题------》Java 中的父子类静态代码块,代码块,构造方法执行顺序

    4.指出下面程序的运行结果. class A { static { System.out.print("1"); } public A() { System.out.print(& ...

  7. Java static 静态代码块执行分析

    假设有这样一个类: public class Utils { static { Log.i("static","isLoad!"); } public stat ...

  8. Java接口以及匿名内部类,静态代码块

    接口 接口中只能定义public并且是final的公共静态常量,不允许定义变量. 抽象类可以定义抽象方法和非抽象方法,接口中只能定义公共的,抽象的实例方法. 接口只能由其他接口实现继承 子接口继承的目 ...

  9. java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

    一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构

  10. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序

    转自:http://blog.csdn.net/mrzhoug/article/details/51581994 一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种: 1.普 ...

随机推荐

  1. fastposter发布1.4.3 跨语言的海报生成器

    fastposter发布1.4.3 跨语言的海报生成器 v1.4.3 增加golang语言支持,优化生成器代码,完善官方文档 昨天喝了点小9️⃣,发版慢了些. future: 增加golang语言支持 ...

  2. Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化

    本文分享自华为云社区<Kmesh进入CNCF 云原生全景图> ,作者:云容器大未来. 近日,Kmesh 正式进入 CNCF 云原生全景图,位于 Service Mesh 类别下. CNCF ...

  3. 2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数

    2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums. 每个数组的代价是指该数组中的第一个元素的值. 你的目标是将这个数组划分为三个连续且互不重叠的子数组. 然后,计算这三个子数 ...

  4. CSS——position定位属性

    就像photoshop中的图层功能会把一整张图片分层一个个图层一样,网页布局中的每一个元素也可以看成是一个个类似图层的层模型.层布局模型就是把网页中的每一个元素看成是一层一层的,然后通过定位属性pos ...

  5. windows报错

    如果说你dns没有权威的话1.先去long.com上面右键属性把"区域传送给所有服务器打勾"2.右键属性,在名称分析器中,输入要添加为辅助dns的服务器的ip显示解析成功就可以了

  6. jq data方法

    data() 是 jQuery 的方法之一,用于在元素上存储和获取数据.它允许你将任意类型的数据附加到一个或多个元素上,并且可以通过选择器或元素对象来访问和操作这些数据. 代码中,_t.selectB ...

  7. TypeScript keyof

    keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型.它主要用于在类型系统中引用对象类型的键. 以下是一些 keyof 的用法和示例: 1. 获取对象 ...

  8. 程序员面试金典-面试题 16.25. LRU缓存

    题目: 设计和构建一个"最近最少使用"缓存,该缓存会删除最近最少使用的项目.缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量.当缓存被填满时,它应该 ...

  9. 23201826-熊锋-第二次blog

    一.前言 这三次pta作业第一次为答题判断程序-4,这是答题判断程序的第三次迭代,相较于答题判断三,新增了各种题型及其不同种类的答案,并且出现多选题,使得这次题目相当棘手,具有很大的挑战性.第二次为家 ...

  10. IDEA:java: Compilation failed: internal java compiler error

    java: Compilation failed: internal java compiler error 解决方法: 1.打开菜单 ,File - Project Structure - Proj ...