静态属性
如下图:
age为静态变量,score为非静态变量,通过 类名.属性 无法直接调用非静态变量score
需要实例化对象才能调用该变量
//实例化对象 类名 对象名 = new 对象();
Student student = new Student();
student.score;
静态方法和非静态方法
创建两个类Demo01和Demo02,使用Demo01调用Demo02的方法。
使用static关键字的方法可以直接使用 类名.方法名 调用该方法
若没有使用static关键字的方法调用时则需要创建对象来实例化,即使用 new
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及类中构造器的调用。
类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的。并且构造器有以下两个特点:
1、必须和类的名字相同
2、必须没有返回类型,也不能有void
public class Demo01 {
public static void main(String[] args) {
//静态方法可以使用 类名.方法名调用
Demo02.print_test1();
//非静态方法需要实例化对象 new
//实例化后就会返回一个自己的实例,demo02就是Demo02的具体实例。
Demo02 demo02 = new Demo02();
demo02.print_test2();
}
}
public class Demo02 {
//静态方法
public static void print_test1() {
System.out.println("helloworld");
}
//非静态方法
public void print_test2() {
System.out.println("helloworld");
}
}
静态代码块
public static 类名{
{
//代码块(匿名代码块)【在构造函数之前】
}
static{
//静态代码块(匿名代码块)
}
}
public class test {
{
System.out.println("匿名代码块");
}
static {
System.out.println("静态代码块");
}
public test(){
System.out.println("构造函数");
}
public static void main(String[] args) {
test t = new test();
System.out.println("====================");
test t2 = new test();
}
}
静态代码块
匿名代码块
构造函数
====================
匿名代码块
构造函数
第一次实例化test类:
先输出静态代码块,第二是匿名代码块,最后才是构造方法。
第二次实例化test类:
先执行匿名代码块,再执行构造方法,静态代码块只执行一次,一般使用匿名代码块赋初始值
静态导入包
静态导入包的方法和变量
import static java.lang.Math.random;
import static java.lang.Math.PI;//常量
public class test2 {
//由于静态导入包Math类的random()方法,则可以再这里直接使用不需要 Math.random()
public static void main(String[] args) {
System.out.println(random());
System.out.println(PI);
}
}