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 v2.9.3 简单易用的海报生成器
fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击代码直接生成各种语言的调用代码,方便快速开发. 现已服务众 ...
- java stream数据分组 stream().collect(groupingBy
List<Map<String, Object>> foreList = forecastDataDao.getcityforeresults(param); Map<S ...
- C#TMS系统学习(ShippingNotice页面)
C#TMS系统代码-业务页面ShippingNotice学习 学一个业务页面,ok,领导开完会就被裁掉了,很突然啊,他收拾东西的时候我还以为他要旅游提前请假了,还在寻思为什么回家连自己买的几箱饮料都要 ...
- python计算机视觉学习笔记——PIL库的用法
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 这个 ...
- kubernets之init容器作用
一 init容器的作用 1.1 init容器是在pod的生命周期,保证该pod运行的一些前置条件满足之后才开始运行这个pod,例如需要依赖一些其他的pod,服务等,可以去对这些服务的状态进行检测, ...
- SuperSocket AppServer.NewRequestReceived 不触发 接受不到字节
SuperSocket AppServer.NewRequestReceived 不触发 接受不到字节 针对.netframework版本 1.6.* 使用 FixedHeaderReceiveFil ...
- 改造 Kubernetes 自定义调度器
原文出处:改造 Kubernetes 自定义调度器 | Jayden's Blog (jaydenchang.top) Overview Kubernetes 默认调度器在调度 Pod 时并不关心特殊 ...
- 分布式缓存NewLife.Redis
NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时计算为目标. Redis协议基础实现位于Redis/RedisClient,FullRedis为扩展实现,主要增加列表结构 ...
- 基于docker一键化部署LNMP环境
cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...
- OpenCV笔记(3) CV::Mat
1. 创建一个数组 1.1 使用构造函数 cv::Mat a; //默认构造函数 cv::Mat b = cv::Mat(); //默认构造函数 cv::Mat c = cv::Mat(3, 3, C ...