Java 核心基础之static静态代码块和静态方法
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方法也称作静态方法
- 不依赖于任何对象就可以进行访问,类名.方法名
- 不能访问类的非静态成员变量和非静态成员方法
注意事项
- 静态方法不能直接访问非静态变量
- 静态方法当中不能使用this
- 核心:一个类里面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静态代码块和静态方法的更多相关文章
- Java之static静态代码块
Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public cl ...
- Java static 静态代码块、代码块
简述 static{} 静态代码块,加载类之前执行 {} 代码块,每次new的时候都会被执行 示例 类: public class Student { int age; String name; bo ...
- static{}静态代码块与{}普通代码块之间的区别
先看一个例子: //class A package com.my.test; class A { static { System.out.println("A1:父类静态代码区域" ...
- Java-静态关键字Static&静态代码块
静态成员变量:(static修饰变量) 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类.多个对象共享同一份数据. 静态方法:(static修饰方法) 一旦使用 ...
- java基础--java静态代码块和静态方法的区别、static用法
转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时, ...
- java面试基础题------》Java 中的父子类静态代码块,代码块,构造方法执行顺序
4.指出下面程序的运行结果. class A { static { System.out.print("1"); } public A() { System.out.print(& ...
- Java static 静态代码块执行分析
假设有这样一个类: public class Utils { static { Log.i("static","isLoad!"); } public stat ...
- Java接口以及匿名内部类,静态代码块
接口 接口中只能定义public并且是final的公共静态常量,不允许定义变量. 抽象类可以定义抽象方法和非抽象方法,接口中只能定义公共的,抽象的实例方法. 接口只能由其他接口实现继承 子接口继承的目 ...
- java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数
一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构
- java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
转自:http://blog.csdn.net/mrzhoug/article/details/51581994 一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种: 1.普 ...
随机推荐
- fastposter发布1.4.3 跨语言的海报生成器
fastposter发布1.4.3 跨语言的海报生成器 v1.4.3 增加golang语言支持,优化生成器代码,完善官方文档 昨天喝了点小9️⃣,发版慢了些. future: 增加golang语言支持 ...
- Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化
本文分享自华为云社区<Kmesh进入CNCF 云原生全景图> ,作者:云容器大未来. 近日,Kmesh 正式进入 CNCF 云原生全景图,位于 Service Mesh 类别下. CNCF ...
- 2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数
2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums. 每个数组的代价是指该数组中的第一个元素的值. 你的目标是将这个数组划分为三个连续且互不重叠的子数组. 然后,计算这三个子数 ...
- CSS——position定位属性
就像photoshop中的图层功能会把一整张图片分层一个个图层一样,网页布局中的每一个元素也可以看成是一个个类似图层的层模型.层布局模型就是把网页中的每一个元素看成是一层一层的,然后通过定位属性pos ...
- windows报错
如果说你dns没有权威的话1.先去long.com上面右键属性把"区域传送给所有服务器打勾"2.右键属性,在名称分析器中,输入要添加为辅助dns的服务器的ip显示解析成功就可以了
- jq data方法
data() 是 jQuery 的方法之一,用于在元素上存储和获取数据.它允许你将任意类型的数据附加到一个或多个元素上,并且可以通过选择器或元素对象来访问和操作这些数据. 代码中,_t.selectB ...
- TypeScript keyof
keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型.它主要用于在类型系统中引用对象类型的键. 以下是一些 keyof 的用法和示例: 1. 获取对象 ...
- 程序员面试金典-面试题 16.25. LRU缓存
题目: 设计和构建一个"最近最少使用"缓存,该缓存会删除最近最少使用的项目.缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量.当缓存被填满时,它应该 ...
- 23201826-熊锋-第二次blog
一.前言 这三次pta作业第一次为答题判断程序-4,这是答题判断程序的第三次迭代,相较于答题判断三,新增了各种题型及其不同种类的答案,并且出现多选题,使得这次题目相当棘手,具有很大的挑战性.第二次为家 ...
- IDEA:java: Compilation failed: internal java compiler error
java: Compilation failed: internal java compiler error 解决方法: 1.打开菜单 ,File - Project Structure - Proj ...