Java刷题笔记6

T1 静态变量

image-20231011223932601

静态变量只能在类主体中定义,不能在方法中定义

PS :

类的final成员变量必须满足以下其中一个条件
1、在构造函数中赋值
2、定义时初始化赋值
3、初始化块中初始化,但是不可在静态初始化块中初始化,只能是静态的final成员变量才能在静态初始化块中初始化

T2 抽象类 & 接口

image-20231011230751791

抽象类

特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
6.抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰
7.抽象类中得方法访问修饰符默认是default
8.抽象类可以实现接口

关键字使用注意:
抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。

接口

1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final
3.在接口中的方法,永远都被public来修饰
4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
7.接口可以继承接口,用extends

作者:存在moring
链接:https://www.nowcoder.com/exam/test/74837104/submission?pid=53549264&testCallback=undefined
来源:牛客网

T3 堆栈

下列Java代码中的变量a、b、c分别在内存的__存储区存放。

1
2
3
4
5
6
7
class A {
private String a = “aa”;
public boolean methodB() {
String b = “bb”;
final String c = “cc”;
}
}

答案: 堆区、栈区、栈区

a是类中的成员变量,存放在堆区 b、c都是方法中的局部变量,存放在栈区

堆区:只存放类对象,线程共享;

方法区:又叫静态存储区,存放class文件和静态数据,线程共享;

栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;

T4 ??

image-20231011233358805

这题先放下不表

其实已经考虑过了i++和=的赋值先后的问题了,但还不是很明白

这里(i++)赋给i的值还是0,同时i还在等待++

按照答案来做马后炮的分析,是i先执行了++,然后又被之前的0赋值回去变为0了

很神奇吧, JVM