一、static关键字
/*
* static:是一个关键字,用于修饰成员变量和成员方法
* static的特点:
* 被所有的对象所共享
* 可以使用类名调用
* 静态的加载优先于对象
* 随着类的加载而加载
* * static的注意事项:
* 静态方法:
* 可以调用静态的成员变量
* 可以调用静态的成员方法
* 不可以调用非静态成员变量
* 不可以调用非静态成员方法
* 静态方法只能调用静态的成员
* 非静态方法:
* 可以调用静态的成员变量
* 可以调用静态的成员方法
* 可以调用非静态的成员变量
* 可以调用非静态的成员方法
*
* 静态的方法中是否有this这个对象?没有的
*
*
*/
public class staictext {
public static void main(String[] args) {
Person.graduateFrom = "传智学院";
Person p = new Person();
p.name = "小苍同学";
p.age = 18;
//p.graduateFrom = "传智学院";
p.speak();
Person p2 = new Person();
p2.name = "小波同学";
p2.age = 20;
//p2.graduateFrom = "传智学院";
p2.speak();
Person.study();
p2.eat();
}
}
class Person {
String name;
int age;
static String graduateFrom;//毕业院校
public void speak() {
System.out.println(name + "---" + graduateFrom);
}
public static void study() {
System.out.println(graduateFrom);
}
public static void sleep() {
System.out.println("sleep");
}
public void eat() {
System.out.println(graduateFrom);
}
}
二、代码块
局部代码块:以”{}”划定的代码区域,此时只需要关注作用域的不同即可
构造代码块:优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
每创建一个对象均会执行一次构造代码块。
静态代码块:它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。该类不管创建多少对象,静态代码块只执行一次。可用于给静态变量赋值,用来给类进行初始化。
/*
* Coder静态代码块执行 --- Coder构造代码块执行 --- Coder无参空构造执行
*
*
* BlockTest静态代码块执行 --- BlockTest的主函数执行了 --- Coder静态代码块执行 --- Coder构造代码块执行 --- Coder无参空构造执行
* Coder构造代码块执行 --- Coder无参空构造执行
*
*/
public class staictext {
static {
System.out.println("BlockTest静态代码块执行");
}
{
System.out.println("BlockTest构造代码块执行");
}
public void BlockTest(){
System.out.println("BlockTest无参构造执行了");
}
public static void main(String[] args) {
System.out.println("BlockTest的主函数执行了");
Coder c = new Coder();
Coder c2 = new Coder();
}
}
class Coder {
static {
System.out.println("Coder静态代码块执行");
}
{
System.out.println("Coder构造代码块执行");
}
public Coder() {
System.out.println("Coder无参空构造执行");
}
}