2022-07-27 第4组 蒋萍 代码块和static关键字
作者:互联网
面向对象(7)
目录类的内部结构:属性、方法、构造器、代码块、内部类
1、代码块
??: 初始化块,属于类的成员,是将一些逻辑语句封装在方法体中,(但不是方法体)通过{}包裹起来;代码块没方法名,没参数,没返回值,没返回权限,它不需要通过对象或类进行显式调用,它会在类加载或创建对象时隐式调用
2、代码块分类
2.1 静态代码块
静态变量:静态变量不能声明在内部类还有方法里,并且在内存中只有一个拷贝空间
- 一个类被加载时会被调用一次,做一些初始化工作
static{
// 静态代码块,方法里能写啥,这里就能写啥
}
-
静态代码块不能存在任何方法体中
-
普通变量只能通过对象来调用,是不能放在静态代码块中的。
2.2 实例代码块
- 每次创建对象都会被调用一次
public class name{
{
System.out.println("实例代码块");
}
}
-
造两个对象时,静态代码块执行一次,实例代码块有几个对象执行几次
-
两种代码块都可以在一个类里写多个(一般都不写多个)
面试:静态块优于其他,父类优于子类
(1)当没有继承关系(1个类):执行顺序为 静态块,实例块,构造器
public class CodeBlock {
{
System.out.println("实例代码块"); // 2
}
static {
System.out.println("静态代码块"); // 1
}
public CodeBlock(){
System.out.println("无参构造函数"); // 3
}
public static void main(String[] args) {
new CodeBlock(); // 测试
}
}
(2)有继承关系:父类静态块,子类静态块,父类实例块,父类构造,子类实例块,子类构造器
- 静态块优于其他,父类优于子类
3、static关键字
-
可以修饰属性、方法、代码块
-
用
static
修饰的结构,不属于任何一个对象
3.1 static修饰变量
static 修饰的变量是常量吗??
不是,static 修饰的变量是唯一的,但不是不变的,加上final修饰的就是常量
static
修饰的结构,不属于任何一个对象,不依赖于对象,没对象也能调用
调用时:类名.属性名
3.2 static修饰类
3.3 static修饰方法 (也叫类方法或静态方法)
调用时,不用对象
4、static内存解析
-
垃圾回收会忽略
static
修饰的结构,就是用完不会被回收,static的变量或方法在方法区 -
不属于某一实例对象,只存在于方法区,比如工具类
-
调用静态结构:‘ 类名. ’的方式即可
尽量别用静态
5、实例方法 和 静态方法的互相调用
实例方法要通过 对象.方法名 的方式调用
- 静态结构随着类的加载而加载;
非静态结构随对象的创建而加载
- 在Java中调用实例方法必须要有主体(要用实例方法就得用对象)
- 静态方法无论在哪,包括构造器,都是通过类名.方法名调用
同一个类的静态调用静态时是可以省略类名的
- 5、静态方法没有重写的概念
6、静态方法怎么用
Arrays.toString()
Arrays.sort()
String.ValueOf()
啥时候用呢??
设计一些工具类时
其他
一些优化:
补充
-
接口中的常量默认有
public final static
-
无论是super还是this都不能用在静态结构(包括代码块、方法)里 ,why ?????
this和super分别都可以调属性和方法还有构造器,this.methodName 和 super.methodName 看上去是类.方法()
静态结构是属于类的,静态结构是优先于对象存在的, -
this和 super 什么时候出现呢??
必须依赖于对象才能出现(必须有实例才能用)
静态方法没有方法重写,继承或者接口对于静态方法来说毫无意义,那就和super无关;
静态结构出现的时候,对像还没产呢,而 this代表当前对象,
(开发中常量的声明基本上是这样的)
最后
今天晚上状态不错,继续努力 !!
自己敲代码实现记忆更深刻,感觉今天的导图做的不太好,会继续改进的。
标签:27,07,静态,代码,调用,蒋萍,实例,static,方法 来源: https://www.cnblogs.com/fulfill/p/16526878.html