0
点赞
收藏
分享

微信扫一扫

Java基础高级阶段 hspedu

沈芏 2022-02-25 阅读 76

Java 编程高级基础

static 类变量(静态变量)

static 修饰的属性被这个类的所有成员共享

static 修饰的方法能被这个类的所有成员所调用

使用场景:当方法中不涉及到任何和对象相关的成员,则可以设计为静态方法

简单的说,就是不想创建实例,但是也想调用方法时用!(如工具类,把这些static类当工具使用! )

​ **例:**Math类,调用Π,直接Math.PI就行了

Static Detail

类方法中无 **this ** 的参数

类方法中不能出现关于有的东西!

口诀:静态方法只能访问静态成员,普通成员方法,既可以访问非静态成员,也可以访问静态成员。

image-20220218152617508

关于main方法

public static void main(String [] args){//这是一个名为args的String字符串数组!
		for(int i =0;i<args.length;i++){
            System.out.println(args[i]);
        }
}
类如以下:
public static void main(int [] a){//这是一个名为a的int数组!
		for(int i =0;i<args.length;i++){
            System.out.println(args[i]);
        }
}

main方法是谁在执行?——Java虚拟机

当运行main方法时,如果想给args传进去一个参数,怎么传呢?——在命令行中 java 程序名 [参数1 参数2 参数3]

代码块{ }(又称初始化块)

code block = 代码

代码块属于类中的成员(是类中的一部分),类似于方法,但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

1.修饰符只有static或缺省

2.代码分为两类,用static修饰的是静态代码块,没有的是普通代码块

3.代码块中可以写任意逻辑语句(输入、输出、方法调用、循环、判断等)

4.最后的 ; 可以写 也可以不写

: 代码块 - > 构造器 先执行代码块再执行构造器

image-20220218181739142

codeblock Detail

1.static代码块也叫静态代码块,作用是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就会执行一次。如果是普通代码块,每创建一个对象,就会执行一次

在这里插入图片描述

static修饰的代码块,只会在加载的时候输出一次!

例如 DD dd1 = new DD(); DD dd2 = new DD(); 对应的static代码块只会输出一次

类什么时候被加载

1.new AA();//创建一个对象时

2.创建子类实例对象时,父类也会被加载

3.使用类的静态成员时(静态属性、静态方法)//所在类及其父类会加载

⚠ 普通的代码块:(和类加载没关系!只有创建对象时才会被调用

1.在创建对象实例时,会被隐式的调用

2.被创建一次就调用一次

3.如果只是使用类的静态成员,普通代码块并不会执行。

小结 :static代码块是类加载时执行,只会执行一次;普通代码块是在创建对象时调用的,创建一次调用一次。

创建一个对象时,在一个类调用的顺序是(重难点)

image-20220218202525408

  1. static:按顺序
  2. 缺省:按顺序
  3. 构造器

image-20220218212332688

关于继承状态下的代码块

class AAA {
    static {
        System.out.println("A的static");
    }
    {
        System.out.println("AAAAA的普通");
    }
    public AAA(){
        System.out.println("AAAAA的构造器");
    }
}
class BBB extends AAA {
    static {
        System.out.println("B的static");
    }
    {
        System.out.println("BBBBB的普通");
    }
    public BBB(){
        System.out.println("BBBBBB的构造器");
    }
}
此时  new BB();
输出如下:
    Astatic             顺序如下:!!!
    Bstatic              顺序就是父类静态->子类静态->父类普通->父类构造器->子类普通->子类构造器
    AAAAA的普通
    AAAAA的构造器
    BBBBB的普通
    BBBBBB的构造器

image-20220225122522831

构造器(){
//隐藏了以下内容
	super();
    普通代码块及普通属性;
    自己的内容
}

code block Test

static 代码块只会执行一次!

image-20220225125516205

同为static就看先后顺序

image-20220225125445956
举报

相关推荐

0 条评论