最近学习了Static这个关键字,涉及到了三种代码块:
1.静态代码块:定义在类中的代码块(静态代码块在类加载时自动执行,并且只会执行一次)
Class Demo {
static {
System.out.println("静态代码块");
}
}
2.局部代码块:定义在类中或方法中(定义在类中的话也可以叫做初始代码块)
初始化代码块是构造方法前身
class Demo1 {
{
System.out.println("我是初始化代码块");
}
public void Method() {
{
System.out.println("我也是初始化代码块");
}
}
}
3.构造代码块:定义在类中(就是构造方法)
class Deme2 {
public Deme2() {
System.out.println("构造方法代码");
}
}
那么问题来了,假设我有下面的代码,执行顺序是什么呢?
class Woman{
static {
System.out.println("静态代码块被调用");
}
{
System.out.println("初始化代码块被调用");
}
public Woman() {
System.out.println("构造方法代码块被调用");
}
}
public class StaticDemo2 {
public static void main(String[] args) {
new Woman();
}
}
哈哈,不告诉你呦,提示一下:三种代码块的执行过程:
静态代码块被调用-->初始化代码块被调用-->构造方法代码块被调用
这下你知道答案了吗?
那么再来一个例子:
class Person{
static{
System.out.println("父类的静态代码块被调用")
}
{
System.out.println("父类的初始化代码块被调用")
}
public Person(){
System.out.println("父类的构造代码块被调用")
}
}
class Man extends Person{
static{
System.out.println("子类的静态代码块被调用")
}
{
System.out.println("子类的初始化代码块被调用")
}
public Man(){
System.out.println("子类的构造代码块被调用")
}
}
// Man man = new Man();
/*使用/权限 本类 同包 子类 不同包
private √ × × ×
default √ √ × ×
protected √ √ √ ×
public √ √ √ √
访问权限修饰符
private 私有的
protected 保护的
default(Package) 默认的
public 公有的
从小大到
修饰类:只有两个权限 public 或 default(Package)
public: 公有权限,在工程任意位置都可以访问
default(Package) 只能在当前包内访问
修饰方法和属性
Object类
Object是所有的类直接或间接父类
Object本身就是引用类型
重要的重写方法:
toString -->返回的是一个字符串类型,自定义对象打印时重写
equals和hashcode -->分别返回的是boolean类型和int类型
父类的静态代码块被调用
子类的静态代码块被调用
父类的初始化代码块被调用
父类的构造代码块被调用
子类的初始化代码块被调用
子类的构造代码块被调用
*/
就到这里吧,看完对你有帮助的话记得点赞喔~